172 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 32; RUN: opt -S -passes='require<profile-summary>,function(codegenprepare)' -mtriple=amdgcn--amdhsa < %s | FileCheck %s3 4define i64 @no_sink_local_to_flat(i1 %pred, ptr addrspace(3) %ptr) {5; CHECK-LABEL: define i64 @no_sink_local_to_flat(6; CHECK-SAME: i1 [[PRED:%.*]], ptr addrspace(3) [[PTR:%.*]]) {7; CHECK-NEXT: [[PTR_CAST:%.*]] = addrspacecast ptr addrspace(3) [[PTR]] to ptr8; CHECK-NEXT: br i1 [[PRED]], label [[L1:%.*]], label [[L2:%.*]]9; CHECK: l1:10; CHECK-NEXT: [[V1:%.*]] = load i64, ptr addrspace(3) [[PTR]], align 811; CHECK-NEXT: ret i64 [[V1]]12; CHECK: l2:13; CHECK-NEXT: [[V2:%.*]] = load i64, ptr [[PTR_CAST]], align 814; CHECK-NEXT: ret i64 [[V2]]15;16 %ptr_cast = addrspacecast ptr addrspace(3) %ptr to ptr17 br i1 %pred, label %l1, label %l218 19l1:20 %v1 = load i64, ptr addrspace(3) %ptr21 ret i64 %v122 23l2:24 %v2 = load i64, ptr %ptr_cast25 ret i64 %v226}27 28define i64 @no_sink_private_to_flat(i1 %pred, ptr addrspace(5) %ptr) {29; CHECK-LABEL: define i64 @no_sink_private_to_flat(30; CHECK-SAME: i1 [[PRED:%.*]], ptr addrspace(5) [[PTR:%.*]]) {31; CHECK-NEXT: [[PTR_CAST:%.*]] = addrspacecast ptr addrspace(5) [[PTR]] to ptr32; CHECK-NEXT: br i1 [[PRED]], label [[L1:%.*]], label [[L2:%.*]]33; CHECK: l1:34; CHECK-NEXT: [[V1:%.*]] = load i64, ptr addrspace(5) [[PTR]], align 835; CHECK-NEXT: ret i64 [[V1]]36; CHECK: l2:37; CHECK-NEXT: [[V2:%.*]] = load i64, ptr [[PTR_CAST]], align 838; CHECK-NEXT: ret i64 [[V2]]39;40 %ptr_cast = addrspacecast ptr addrspace(5) %ptr to ptr41 br i1 %pred, label %l1, label %l242 43l1:44 %v1 = load i64, ptr addrspace(5) %ptr45 ret i64 %v146 47l2:48 %v2 = load i64, ptr %ptr_cast49 ret i64 %v250}51 52 53define i64 @sink_global_to_flat(i1 %pred, ptr addrspace(1) %ptr) {54; CHECK-LABEL: define i64 @sink_global_to_flat(55; CHECK-SAME: i1 [[PRED:%.*]], ptr addrspace(1) [[PTR:%.*]]) {56; CHECK-NEXT: br i1 [[PRED]], label [[L1:%.*]], label [[L2:%.*]]57; CHECK: l1:58; CHECK-NEXT: [[V1:%.*]] = load i64, ptr addrspace(1) [[PTR]], align 859; CHECK-NEXT: ret i64 [[V1]]60; CHECK: l2:61; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr addrspace(1) [[PTR]] to ptr62; CHECK-NEXT: [[V2:%.*]] = load i64, ptr [[TMP1]], align 863; CHECK-NEXT: ret i64 [[V2]]64;65 %ptr_cast = addrspacecast ptr addrspace(1) %ptr to ptr66 br i1 %pred, label %l1, label %l267 68l1:69 %v1 = load i64, ptr addrspace(1) %ptr70 ret i64 %v171 72l2:73 %v2 = load i64, ptr %ptr_cast74 ret i64 %v275}76 77define i64 @sink_flat_to_global(i1 %pred, ptr %ptr) {78; CHECK-LABEL: define i64 @sink_flat_to_global(79; CHECK-SAME: i1 [[PRED:%.*]], ptr [[PTR:%.*]]) {80; CHECK-NEXT: br i1 [[PRED]], label [[L1:%.*]], label [[L2:%.*]]81; CHECK: l1:82; CHECK-NEXT: [[V1:%.*]] = load i64, ptr [[PTR]], align 883; CHECK-NEXT: ret i64 [[V1]]84; CHECK: l2:85; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr [[PTR]] to ptr addrspace(1)86; CHECK-NEXT: [[V2:%.*]] = load i64, ptr addrspace(1) [[TMP1]], align 887; CHECK-NEXT: ret i64 [[V2]]88;89 %ptr_cast = addrspacecast ptr %ptr to ptr addrspace(1)90 br i1 %pred, label %l1, label %l291 92l1:93 %v1 = load i64, ptr %ptr94 ret i64 %v195 96l2:97 %v2 = load i64, ptr addrspace(1) %ptr_cast98 ret i64 %v299}100 101define i64 @sink_flat_to_constant(i1 %pred, ptr %ptr) {102; CHECK-LABEL: define i64 @sink_flat_to_constant(103; CHECK-SAME: i1 [[PRED:%.*]], ptr [[PTR:%.*]]) {104; CHECK-NEXT: br i1 [[PRED]], label [[L1:%.*]], label [[L2:%.*]]105; CHECK: l1:106; CHECK-NEXT: [[V1:%.*]] = load i64, ptr [[PTR]], align 8107; CHECK-NEXT: ret i64 [[V1]]108; CHECK: l2:109; CHECK-NEXT: [[TMP1:%.*]] = addrspacecast ptr [[PTR]] to ptr addrspace(4)110; CHECK-NEXT: [[V2:%.*]] = load i64, ptr addrspace(4) [[TMP1]], align 8111; CHECK-NEXT: ret i64 [[V2]]112;113 %ptr_cast = addrspacecast ptr %ptr to ptr addrspace(4)114 br i1 %pred, label %l1, label %l2115 116l1:117 %v1 = load i64, ptr %ptr118 ret i64 %v1119 120l2:121 %v2 = load i64, ptr addrspace(4) %ptr_cast122 ret i64 %v2123}124 125define i64 @sink_flat_to_local(i1 %pred, ptr %ptr) {126; CHECK-LABEL: define i64 @sink_flat_to_local(127; CHECK-SAME: i1 [[PRED:%.*]], ptr [[PTR:%.*]]) {128; CHECK-NEXT: [[PTR_CAST:%.*]] = addrspacecast ptr [[PTR]] to ptr addrspace(3)129; CHECK-NEXT: br i1 [[PRED]], label [[L1:%.*]], label [[L2:%.*]]130; CHECK: l1:131; CHECK-NEXT: [[V1:%.*]] = load i64, ptr [[PTR]], align 8132; CHECK-NEXT: ret i64 [[V1]]133; CHECK: l2:134; CHECK-NEXT: [[V2:%.*]] = load i64, ptr addrspace(3) [[PTR_CAST]], align 8135; CHECK-NEXT: ret i64 [[V2]]136;137 %ptr_cast = addrspacecast ptr %ptr to ptr addrspace(3)138 br i1 %pred, label %l1, label %l2139 140l1:141 %v1 = load i64, ptr %ptr142 ret i64 %v1143 144l2:145 %v2 = load i64, ptr addrspace(3) %ptr_cast146 ret i64 %v2147}148 149define i64 @sink_flat_to_private(i1 %pred, ptr %ptr) {150; CHECK-LABEL: define i64 @sink_flat_to_private(151; CHECK-SAME: i1 [[PRED:%.*]], ptr [[PTR:%.*]]) {152; CHECK-NEXT: [[PTR_CAST:%.*]] = addrspacecast ptr [[PTR]] to ptr addrspace(5)153; CHECK-NEXT: br i1 [[PRED]], label [[L1:%.*]], label [[L2:%.*]]154; CHECK: l1:155; CHECK-NEXT: [[V1:%.*]] = load i64, ptr [[PTR]], align 8156; CHECK-NEXT: ret i64 [[V1]]157; CHECK: l2:158; CHECK-NEXT: [[V2:%.*]] = load i64, ptr addrspace(5) [[PTR_CAST]], align 8159; CHECK-NEXT: ret i64 [[V2]]160;161 %ptr_cast = addrspacecast ptr %ptr to ptr addrspace(5)162 br i1 %pred, label %l1, label %l2163 164l1:165 %v1 = load i64, ptr %ptr166 ret i64 %v1167 168l2:169 %v2 = load i64, ptr addrspace(5) %ptr_cast170 ret i64 %v2171}172