brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.2 KiB · f7c019b Raw
309 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 32; RUN: opt -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a -S -passes=separate-const-offset-from-gep < %s | FileCheck %s3 4define void @inboundsPossiblyNegative(ptr %in.ptr, i64 %in.idx1) {5; CHECK-LABEL: define void @inboundsPossiblyNegative(6; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0:[0-9]+]] {7; CHECK-NEXT:  entry:8; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1]]9; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i64 110; CHECK-NEXT:    ret void11;12entry:13  %const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i64 114  %idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i64 %in.idx115  ret void16}17 18define void @inboundsNonNegative_nonCanonical(ptr %in.ptr, i32 %in.idx1) {19; CHECK-LABEL: define void @inboundsNonNegative_nonCanonical(20; CHECK-SAME: ptr [[IN_PTR:%.*]], i32 [[IN_IDX1:%.*]]) #[[ATTR0]] {21; CHECK-NEXT:  entry:22; CHECK-NEXT:    [[IN_IDX1_NNEG1:%.*]] = and i32 [[IN_IDX1]], 214748364723; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = sext i32 [[IN_IDX1_NNEG1]] to i6424; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]25; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <2 x i8>, ptr [[TMP0]], i32 126; CHECK-NEXT:    ret void27;28entry:29  %in.idx1.nneg = and i32 %in.idx1, 214748364730  %const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i32 131  %idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i32 %in.idx1.nneg32  ret void33}34 35define void @inboundsNonNegative(ptr %in.ptr, i64 %in.idx1) {36; CHECK-LABEL: define void @inboundsNonNegative(37; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {38; CHECK-NEXT:  entry:39; CHECK-NEXT:    [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 922337203685477580740; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]41; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <2 x i8>, ptr [[TMP0]], i64 142; CHECK-NEXT:    ret void43;44entry:45  %in.idx1.nneg = and i64 %in.idx1, 922337203685477580746  %const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i64 147  %idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i64 %in.idx1.nneg48  ret void49}50 51define void @inboundsNonchained(ptr %in.ptr, i64 %in.idx1) {52; CHECK-LABEL: define void @inboundsNonchained(53; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {54; CHECK-NEXT:  entry:55; CHECK-NEXT:    [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 922337203685477580756; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr <2 x i8>, ptr [[IN_PTR]], i64 [[IDXPROM]]57; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr <2 x i8>, ptr [[TMP0]], i64 158; CHECK-NEXT:    ret void59;60entry:61  %in.idx1.nneg = and i64 %in.idx1, 922337203685477580762  %const1 = getelementptr inbounds <2 x i8>, ptr %in.ptr, i64 163  %idx1 = getelementptr <2 x i8>, ptr %const1, i64 %in.idx1.nneg64  ret void65}66 67define void @inboundsNonNegativeType_i16i8(ptr %in.ptr, i64 %in.idx1) {68; CHECK-LABEL: define void @inboundsNonNegativeType_i16i8(69; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {70; CHECK-NEXT:  entry:71; CHECK-NEXT:    [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 922337203685477580772; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i8, ptr [[IN_PTR]], i64 [[IDXPROM]]73; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i16, ptr [[TMP0]], i64 102474; CHECK-NEXT:    ret void75;76entry:77  %in.idx1.nneg = and i64 %in.idx1, 922337203685477580778  %const1 = getelementptr inbounds i16, ptr %in.ptr, i64 102479  %idx1 = getelementptr inbounds i8, ptr %const1, i64 %in.idx1.nneg80  ret void81}82 83define void @inboundsNonNegative_i8i16(ptr %in.ptr, i64 %in.idx1) {84; CHECK-LABEL: define void @inboundsNonNegative_i8i16(85; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {86; CHECK-NEXT:  entry:87; CHECK-NEXT:    [[IDXPROM:%.*]] = and i64 [[IN_IDX1]], 922337203685477580788; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i16, ptr [[IN_PTR]], i64 [[IDXPROM]]89; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr [[TMP0]], i64 102490; CHECK-NEXT:    ret void91;92entry:93  %in.idx1.nneg = and i64 %in.idx1, 922337203685477580794  %const1 = getelementptr inbounds i8, ptr %in.ptr, i64 102495  %idx1 = getelementptr inbounds i16, ptr %const1, i64 %in.idx1.nneg96  ret void97}98 99define void @inboundsNonchained_first(ptr %in.ptr, i64 %in.idx1) {100; CHECK-LABEL: define void @inboundsNonchained_first(101; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {102; CHECK-NEXT:  entry:103; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807104; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i32, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]105; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 1024106; CHECK-NEXT:    ret void107;108entry:109  %in.idx1.nneg = and i64 %in.idx1, 9223372036854775807110  %const1 = getelementptr inbounds i8, ptr %in.ptr, i64 1024111  %idx1 = getelementptr i32, ptr %const1, i64 %in.idx1.nneg112  ret void113}114 115define void @inboundsNonchained_second(ptr %in.ptr, i64 %in.idx1) {116; CHECK-LABEL: define void @inboundsNonchained_second(117; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {118; CHECK-NEXT:  entry:119; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807120; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i64, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]121; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 1024122; CHECK-NEXT:    ret void123;124entry:125  %in.idx1.nneg = and i64 %in.idx1, 9223372036854775807126  %const1 = getelementptr i8, ptr %in.ptr, i64 1024127  %idx1 = getelementptr inbounds i64, ptr %const1, i64 %in.idx1.nneg128  ret void129}130 131define void @notInbounds(ptr %in.ptr, i64 %in.idx1) {132; CHECK-LABEL: define void @notInbounds(133; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {134; CHECK-NEXT:  entry:135; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807136; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i128, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]137; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr i8, ptr [[TMP0]], i64 1024138; CHECK-NEXT:    ret void139;140entry:141  %in.idx1.nneg = and i64 %in.idx1, 9223372036854775807142  %const1 = getelementptr i8, ptr %in.ptr, i64 1024143  %idx1 = getelementptr i128, ptr %const1, i64 %in.idx1.nneg144  ret void145}146 147define void @vectorType1(ptr %in.ptr, i64 %in.idx1) {148; CHECK-LABEL: define void @vectorType1(149; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {150; CHECK-NEXT:  entry:151; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647152; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds <2 x i8>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]153; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr [[TMP0]], i32 3154; CHECK-NEXT:    ret void155;156entry:157  %in.idx1.nneg = and i64 %in.idx1, 2147483647158  %const1 = getelementptr inbounds <4 x i8>, ptr %in.ptr, i32 3159  %idx1 = getelementptr inbounds <2 x i8>, ptr %const1, i64 %in.idx1.nneg160  ret void161}162 163define void @vectorType2(ptr %in.ptr, i64 %in.idx1) {164; CHECK-LABEL: define void @vectorType2(165; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {166; CHECK-NEXT:  entry:167; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647168; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds <4 x half>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]169; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <4 x i8>, ptr [[TMP0]], i32 1170; CHECK-NEXT:    ret void171;172entry:173  %in.idx1.nneg = and i64 %in.idx1, 2147483647174  %const1 = getelementptr inbounds <4 x i8>, ptr %in.ptr, i32 1175  %idx1 = getelementptr inbounds <4 x half>, ptr %const1, i64 %in.idx1.nneg176  ret void177}178 179define void @vectorType3(ptr %in.ptr, i64 %in.idx1) {180; CHECK-LABEL: define void @vectorType3(181; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {182; CHECK-NEXT:  entry:183; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647184; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds ptr, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]185; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 1186; CHECK-NEXT:    ret void187;188entry:189  %in.idx1.nneg = and i64 %in.idx1, 2147483647190  %const1 = getelementptr inbounds <4 x ptr>, ptr %in.ptr, i32 1191  %idx1 = getelementptr inbounds ptr, ptr %const1, i64 %in.idx1.nneg192  ret void193}194 195define void @vectorType4(ptr %in.ptr, i64 %in.idx1) {196; CHECK-LABEL: define void @vectorType4(197; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {198; CHECK-NEXT:  entry:199; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647200; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds <8 x ptr addrspace(1)>, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]201; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds <4 x ptr>, ptr [[TMP0]], i32 3202; CHECK-NEXT:    ret void203;204entry:205  %in.idx1.nneg = and i64 %in.idx1, 2147483647206  %const1 = getelementptr inbounds <4 x ptr>, ptr %in.ptr, i32 3207  %idx1 = getelementptr inbounds <8 x ptr addrspace(1)>, ptr %const1, i64 %in.idx1.nneg208  ret void209}210 211 212define void @ptrType(ptr %in.ptr, i64 %in.idx1) {213; CHECK-LABEL: define void @ptrType(214; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {215; CHECK-NEXT:  entry:216; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647217; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds ptr, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]218; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(2), ptr [[TMP0]], i32 1219; CHECK-NEXT:    ret void220;221entry:222  %in.idx1.nneg = and i64 %in.idx1, 2147483647223  %const1 = getelementptr inbounds ptr addrspace(2), ptr %in.ptr, i32 1224  %idx1 = getelementptr inbounds ptr, ptr %const1, i64 %in.idx1.nneg225  ret void226}227 228define void @ptrType2(ptr %in.ptr, i64 %in.idx1) {229; CHECK-LABEL: define void @ptrType2(230; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {231; CHECK-NEXT:  entry:232; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647233; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i64, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]234; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(3), ptr [[TMP0]], i32 3235; CHECK-NEXT:    ret void236;237entry:238  %in.idx1.nneg = and i64 %in.idx1, 2147483647239  %const1 = getelementptr inbounds ptr addrspace(3), ptr %in.ptr, i32 3240  %idx1 = getelementptr inbounds i64, ptr %const1, i64 %in.idx1.nneg241  ret void242}243 244define void @ptrType3(ptr %in.ptr, i64 %in.idx1) {245; CHECK-LABEL: define void @ptrType3(246; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {247; CHECK-NEXT:  entry:248; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 2147483647249; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i16, ptr [[IN_PTR]], i64 [[IN_IDX1_NNEG]]250; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds ptr addrspace(7), ptr [[TMP0]], i32 3251; CHECK-NEXT:    ret void252;253entry:254  %in.idx1.nneg = and i64 %in.idx1, 2147483647255  %const1 = getelementptr inbounds ptr addrspace(7), ptr %in.ptr, i32 3256  %idx1 = getelementptr inbounds i16, ptr %const1, i64 %in.idx1.nneg257  ret void258}259 260define void @addrspace1(ptr addrspace(1) %in.ptr, i64 %in.idx1) {261; CHECK-LABEL: define void @addrspace1(262; CHECK-SAME: ptr addrspace(1) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {263; CHECK-NEXT:  entry:264; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807265; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr inbounds i128, ptr addrspace(1) [[IN_PTR]], i64 [[IN_IDX1_NNEG]]266; CHECK-NEXT:    [[TMP1:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP0]], i64 1024267; CHECK-NEXT:    ret void268;269entry:270  %in.idx1.nneg = and i64 %in.idx1, 9223372036854775807271  %const1 = getelementptr inbounds i8, ptr addrspace(1) %in.ptr, i64 1024272  %idx1 = getelementptr inbounds i128, ptr addrspace(1) %const1, i64 %in.idx1.nneg273  ret void274}275 276define void @addrspace3(ptr addrspace(3) %in.ptr, i64 %in.idx1) {277; CHECK-LABEL: define void @addrspace3(278; CHECK-SAME: ptr addrspace(3) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {279; CHECK-NEXT:  entry:280; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807281; CHECK-NEXT:    [[IDXPROM:%.*]] = trunc i64 [[IN_IDX1_NNEG]] to i32282; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i128, ptr addrspace(3) [[IN_PTR]], i32 [[IDXPROM]]283; CHECK-NEXT:    [[IDX11:%.*]] = getelementptr i8, ptr addrspace(3) [[TMP0]], i32 1024284; CHECK-NEXT:    ret void285;286entry:287  %in.idx1.nneg = and i64 %in.idx1, 9223372036854775807288  %const1 = getelementptr inbounds i8, ptr addrspace(3) %in.ptr, i64 1024289  %idx1 = getelementptr inbounds i128, ptr addrspace(3) %const1, i64 %in.idx1.nneg290  ret void291}292 293define void @addrspace7(ptr addrspace(7) %in.ptr, i64 %in.idx1) {294; CHECK-LABEL: define void @addrspace7(295; CHECK-SAME: ptr addrspace(7) [[IN_PTR:%.*]], i64 [[IN_IDX1:%.*]]) #[[ATTR0]] {296; CHECK-NEXT:  entry:297; CHECK-NEXT:    [[IN_IDX1_NNEG:%.*]] = and i64 [[IN_IDX1]], 9223372036854775807298; CHECK-NEXT:    [[IDXPROM:%.*]] = trunc i64 [[IN_IDX1_NNEG]] to i32299; CHECK-NEXT:    [[TMP0:%.*]] = getelementptr i128, ptr addrspace(7) [[IN_PTR]], i32 [[IDXPROM]]300; CHECK-NEXT:    [[IDX11:%.*]] = getelementptr i8, ptr addrspace(7) [[TMP0]], i32 1024301; CHECK-NEXT:    ret void302;303entry:304  %in.idx1.nneg = and i64 %in.idx1, 9223372036854775807305  %const1 = getelementptr inbounds i8, ptr addrspace(7) %in.ptr, i64 1024306  %idx1 = getelementptr inbounds i128, ptr addrspace(7) %const1, i64 %in.idx1.nneg307  ret void308}309