brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 23b4a4f Raw
107 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 32; RUN: opt -mtriple=nvptx64-nvidia-cuda -S -passes=separate-const-offset-from-gep  < %s | FileCheck %s3 4define protected amdgpu_kernel void @sink_addr(ptr %in.ptr, i64 %in.idx0, i64 %in.idx1) {5; CHECK-LABEL: define protected amdgpu_kernel void @sink_addr(6; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX0:%.*]], i64 [[IN_IDX1:%.*]]) {7; CHECK-NEXT:  entry:8; CHECK-NEXT:    [[IDX0:%.*]] = getelementptr [8192 x i64], ptr [[IN_PTR]], i64 [[IN_IDX0]], i64 [[IN_IDX1]]9; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr [8192 x i64], ptr [[IN_PTR]], i64 [[IN_IDX0]], i64 010; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr i64, ptr [[TMP0]], i64 [[IN_IDX1]]11; CHECK-NEXT:    [[IDX1:%.*]] = getelementptr i8, ptr [[TMP3]], i64 204812; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr [8192 x i64], ptr [[IN_PTR]], i64 [[IN_IDX0]], i64 013; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i64, ptr [[TMP1]], i64 [[IN_IDX1]]14; CHECK-NEXT:    [[IDX2:%.*]] = getelementptr i8, ptr [[TMP4]], i64 409615; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr [8192 x i64], ptr [[IN_PTR]], i64 [[IN_IDX0]], i64 016; CHECK-NEXT:    [[TMP7:%.*]] = getelementptr i64, ptr [[TMP2]], i64 [[IN_IDX1]]17; CHECK-NEXT:    [[IDX3:%.*]] = getelementptr i8, ptr [[TMP7]], i64 614418; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i64 [[IN_IDX0]], 019; CHECK-NEXT:    br i1 [[CMP0]], label [[BB_1:%.*]], label [[END:%.*]]20; CHECK:       bb.1:21; CHECK-NEXT:    [[VAL0:%.*]] = load <8 x i64>, ptr [[IDX0]], align 1622; CHECK-NEXT:    [[VAL1:%.*]] = load <8 x i64>, ptr [[IDX1]], align 1623; CHECK-NEXT:    [[VAL2:%.*]] = load <8 x i64>, ptr [[IDX2]], align 1624; CHECK-NEXT:    [[VAL3:%.*]] = load <8 x i64>, ptr [[IDX3]], align 1625; CHECK-NEXT:    call void asm sideeffect "26; CHECK-NEXT:    call void asm sideeffect "27; CHECK-NEXT:    call void asm sideeffect "28; CHECK-NEXT:    call void asm sideeffect "29; CHECK-NEXT:    br label [[END]]30; CHECK:       end:31; CHECK-NEXT:    call void asm sideeffect "32; CHECK-NEXT:    call void asm sideeffect "33; CHECK-NEXT:    call void asm sideeffect "34; CHECK-NEXT:    call void asm sideeffect "35; CHECK-NEXT:    ret void36;37entry:38  %idx0 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 %in.idx139  %const1 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 25640  %idx1 = getelementptr i64, ptr  %const1, i64 %in.idx141  %const2 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 51242  %idx2 = getelementptr i64, ptr  %const2, i64 %in.idx143  %const3 = getelementptr [8192 x i64], ptr %in.ptr, i64 %in.idx0, i64 76844  %idx3 = getelementptr i64, ptr  %const3, i64 %in.idx145  %cmp0 = icmp eq i64 %in.idx0, 046  br i1 %cmp0, label %bb.1, label %end47 48bb.1:49  %val0 = load <8 x i64>, ptr  %idx0, align 1650  %val1 = load <8 x i64>, ptr  %idx1, align 1651  %val2 = load <8 x i64>, ptr  %idx2, align 1652  %val3 = load <8 x i64>, ptr  %idx3, align 1653  call void asm sideeffect "; use $0", "v"(<8 x i64> %val0)54  call void asm sideeffect "; use $0", "v"(<8 x i64> %val1)55  call void asm sideeffect "; use $0", "v"(<8 x i64> %val2)56  call void asm sideeffect "; use $0", "v"(<8 x i64> %val3)57  br label %end58 59end:60  call void asm sideeffect "; use $0", "v"(ptr  %idx0)61  call void asm sideeffect "; use $0", "v"(ptr  %idx1)62  call void asm sideeffect "; use $0", "v"(ptr  %idx2)63  call void asm sideeffect "; use $0", "v"(ptr  %idx3)64  ret void65}66 67define void @inboundsPossiblyNegative1(ptr %in.ptr, i64 %in.idx1) {68; CHECK-LABEL: define void @inboundsPossiblyNegative1(69; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) {70; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1]]71; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i64 172; CHECK-NEXT:    ret void73;74  %const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i64 175  %idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i64 %in.idx176  ret void77}78 79define void @inboundsPossiblyNegative2(ptr %in.ptr, i64 %in.idx1) {80; CHECK-LABEL: define void @inboundsPossiblyNegative2(81; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) {82; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 922337203685477580783; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]84; CHECK-NEXT:    [[TMP2:%.*]] = getelementptr <2 x i8>, ptr [[TMP1]], i64 -185; CHECK-NEXT:    ret void86;87  %in.idx1.nneg = and i64 %in.idx1, 922337203685477580788  %const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i64 -189  %idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i64 %in.idx1.nneg90  ret void91}92 93define void @inboundsNonNegative(ptr %in.ptr, i64 %in.idx1) {94; CHECK-LABEL: define void @inboundsNonNegative(95; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) {96; CHECK-NEXT:    [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 922337203685477580797; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]98; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <2 x i8>, ptr [[TMP0]], i64 199; CHECK-NEXT:    ret void100;101  %in.idx1.nneg = and i64 %in.idx1, 9223372036854775807102  %const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i64 1103  %idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i64 %in.idx1.nneg104  ret void105}106 107