brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 77e79a9 Raw
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