; 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, i64 addrspace(3)* %ptr) { %ptr_cast = addrspacecast i64 addrspace(3)* %ptr to i64* br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, i64 addrspace(3)* %ptr ret i64 %v1 l2: %v2 = load i64, i64* %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, i64 addrspace(5)* %ptr) { %ptr_cast = addrspacecast i64 addrspace(5)* %ptr to i64* br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, i64 addrspace(5)* %ptr ret i64 %v1 l2: %v2 = load i64, i64* %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, i64 addrspace(1)* %ptr) { %ptr_cast = addrspacecast i64 addrspace(1)* %ptr to i64* br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, i64 addrspace(1)* %ptr ret i64 %v1 l2: %v2 = load i64, i64* %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, i64* %ptr) { %ptr_cast = addrspacecast i64* %ptr to i64 addrspace(1)* br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, i64* %ptr ret i64 %v1 l2: %v2 = load i64, i64 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, i64* %ptr) { %ptr_cast = addrspacecast i64* %ptr to i64 addrspace(4)* br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, i64* %ptr ret i64 %v1 l2: %v2 = load i64, i64 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, i64* %ptr) { %ptr_cast = addrspacecast i64* %ptr to i64 addrspace(3)* br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, i64* %ptr ret i64 %v1 l2: %v2 = load i64, i64 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, i64* %ptr) { %ptr_cast = addrspacecast i64* %ptr to i64 addrspace(5)* br i1 %pred, label %l1, label %l2 l1: %v1 = load i64, i64* %ptr ret i64 %v1 l2: %v2 = load i64, i64 addrspace(5)* %ptr_cast ret i64 %v2 }