; RUN: opt -S -codegenprepare -mtriple=amdgcn--amdhsa < %s | FileCheck %s ; CHECK-LABEL: @no_sink_local_to_flat( ; CHECK: addrspacecast ; CHECK: br ; CHECK-NOT: addrspacecast define i64 @no_sink_local_to_flat(i1 %pred, ptr addrspace(3) %ptr) { %ptr_cast = addrspacecast ptr addrspace(3) %ptr to ptr br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, ptr addrspace(3) %ptr ret i64 %v1 l2: %v2 = load i64, ptr %ptr_cast ret i64 %v2 } ; CHECK-LABEL: @no_sink_private_to_flat( ; CHECK: addrspacecast ; CHECK: br ; CHECK-NOT: addrspacecast define i64 @no_sink_private_to_flat(i1 %pred, ptr addrspace(5) %ptr) { %ptr_cast = addrspacecast ptr addrspace(5) %ptr to ptr br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, ptr addrspace(5) %ptr ret i64 %v1 l2: %v2 = load i64, ptr %ptr_cast ret i64 %v2 } ; CHECK-LABEL: @sink_global_to_flat( ; CHECK-NOT: addrspacecast ; CHECK: br ; CHECK: addrspacecast define i64 @sink_global_to_flat(i1 %pred, ptr addrspace(1) %ptr) { %ptr_cast = addrspacecast ptr addrspace(1) %ptr to ptr br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, ptr addrspace(1) %ptr ret i64 %v1 l2: %v2 = load i64, ptr %ptr_cast ret i64 %v2 } ; CHECK-LABEL: @sink_flat_to_global( ; CHECK-NOT: addrspacecast ; CHECK: br ; CHECK: addrspacecast define i64 @sink_flat_to_global(i1 %pred, ptr %ptr) { %ptr_cast = addrspacecast ptr %ptr to ptr addrspace(1) br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, ptr %ptr ret i64 %v1 l2: %v2 = load i64, ptr addrspace(1) %ptr_cast ret i64 %v2 } ; CHECK-LABEL: @sink_flat_to_constant( ; CHECK-NOT: addrspacecast ; CHECK: br ; CHECK: addrspacecast define i64 @sink_flat_to_constant(i1 %pred, ptr %ptr) { %ptr_cast = addrspacecast ptr %ptr to ptr addrspace(4) br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, ptr %ptr ret i64 %v1 l2: %v2 = load i64, ptr addrspace(4) %ptr_cast ret i64 %v2 } ; CHECK-LABEL: @sink_flat_to_local( ; CHECK-NOT: addrspacecast ; CHECK: br ; CHECK: addrspacecast define i64 @sink_flat_to_local(i1 %pred, ptr %ptr) { %ptr_cast = addrspacecast ptr %ptr to ptr addrspace(3) br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, ptr %ptr ret i64 %v1 l2: %v2 = load i64, ptr addrspace(3) %ptr_cast ret i64 %v2 } ; CHECK-LABEL: @sink_flat_to_private( ; CHECK-NOT: addrspacecast ; CHECK: br ; CHECK: addrspacecast define i64 @sink_flat_to_private(i1 %pred, ptr %ptr) { %ptr_cast = addrspacecast ptr %ptr to ptr addrspace(5) br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, ptr %ptr ret i64 %v1 l2: %v2 = load i64, ptr addrspace(5) %ptr_cast ret i64 %v2 }