brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.6 KiB · 2e3b6ca Raw
252 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 32; RUN: opt -S -passes=separate-const-offset-from-gep < %s | FileCheck %s3 4define void @illegal_addr_mode(ptr %in.ptr, i64 %in.idx0, i64 %in.idx1) {5; CHECK-LABEL: define void @illegal_addr_mode(6; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX0:%.*]], i64 [[IN_IDX1:%.*]]) {7; CHECK-NEXT:  entry:8; CHECK-NEXT:    [[BASE:%.*]] = getelementptr i64, ptr [[IN_PTR]], i64 [[IN_IDX0]]9; CHECK-NEXT:    [[IDX0:%.*]] = getelementptr i64, ptr [[BASE]], i64 [[IN_IDX1]]10; CHECK-NEXT:    [[CONST1:%.*]] = getelementptr i64, ptr [[BASE]], i64 25611; CHECK-NEXT:    [[IDX1:%.*]] = getelementptr i64, ptr [[CONST1]], i64 [[IN_IDX1]]12; CHECK-NEXT:    [[CONST2:%.*]] = getelementptr i64, ptr [[BASE]], i64 51213; CHECK-NEXT:    [[IDX2:%.*]] = getelementptr i64, ptr [[CONST2]], i64 [[IN_IDX1]]14; CHECK-NEXT:    [[CONST3:%.*]] = getelementptr i64, ptr [[BASE]], i64 76815; CHECK-NEXT:    [[IDX3:%.*]] = getelementptr i64, ptr [[CONST3]], i64 [[IN_IDX1]]16; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i64 [[IN_IDX0]], 017; CHECK-NEXT:    br i1 [[CMP0]], label [[BB_1:%.*]], label [[END:%.*]]18; CHECK:       bb.1:19; CHECK-NEXT:    [[VAL0:%.*]] = load <8 x i64>, ptr [[IDX0]], align 1620; CHECK-NEXT:    [[VAL1:%.*]] = load <8 x i64>, ptr [[IDX1]], align 1621; CHECK-NEXT:    [[VAL2:%.*]] = load <8 x i64>, ptr [[IDX2]], align 1622; CHECK-NEXT:    [[VAL3:%.*]] = load <8 x i64>, ptr [[IDX3]], align 1623; CHECK-NEXT:    call void asm sideeffect "24; CHECK-NEXT:    call void asm sideeffect "25; CHECK-NEXT:    call void asm sideeffect "26; CHECK-NEXT:    call void asm sideeffect "27; CHECK-NEXT:    br label [[END]]28; CHECK:       end:29; CHECK-NEXT:    call void asm sideeffect "30; CHECK-NEXT:    call void asm sideeffect "31; CHECK-NEXT:    call void asm sideeffect "32; CHECK-NEXT:    call void asm sideeffect "33; CHECK-NEXT:    ret void34;35entry:36  %base = getelementptr i64, ptr %in.ptr, i64 %in.idx037  %idx0 = getelementptr i64, ptr %base, i64 %in.idx138  %const1 = getelementptr i64, ptr %base, i64 25639  %idx1 = getelementptr i64, ptr %const1, i64 %in.idx140  %const2 = getelementptr i64, ptr %base, i64 51241  %idx2 = getelementptr i64, ptr %const2, i64 %in.idx142  %const3 = getelementptr i64, ptr %base, i64 76843  %idx3 = getelementptr i64, ptr %const3, i64 %in.idx144  %cmp0 = icmp eq i64 %in.idx0, 045  br i1 %cmp0, label %bb.1, label %end46 47bb.1:48  %val0 = load <8 x i64>, ptr %idx0, align 1649  %val1 = load <8 x i64>, ptr %idx1, align 1650  %val2 = load <8 x i64>, ptr %idx2, align 1651  %val3 = load <8 x i64>, ptr %idx3, align 1652  call void asm sideeffect "; use $0", "v"(<8 x i64> %val0)53  call void asm sideeffect "; use $0", "v"(<8 x i64> %val1)54  call void asm sideeffect "; use $0", "v"(<8 x i64> %val2)55  call void asm sideeffect "; use $0", "v"(<8 x i64> %val3)56  br label %end57 58end:59  call void asm sideeffect "; use $0", "v"(ptr %idx0)60  call void asm sideeffect "; use $0", "v"(ptr %idx1)61  call void asm sideeffect "; use $0", "v"(ptr %idx2)62  call void asm sideeffect "; use $0", "v"(ptr %idx3)63  ret void64}65 66 67define void @multi_index_reorder(ptr %in.ptr, i64 %in.idx0, i64 %in.idx1) {68; CHECK-LABEL: define void @multi_index_reorder(69; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX0:%.*]], i64 [[IN_IDX1:%.*]]) {70; CHECK-NEXT:  entry:71; CHECK-NEXT:    [[IDX0:%.*]] = getelementptr [8192 x i64], ptr [[IN_PTR]], i64 0, i64 [[IN_IDX1]]72; CHECK-NEXT:    [[CONST1:%.*]] = getelementptr [8192 x i64], ptr [[IN_PTR]], i64 0, i64 25673; CHECK-NEXT:    [[IDX1:%.*]] = getelementptr i64, ptr [[CONST1]], i64 [[IN_IDX1]]74; CHECK-NEXT:    [[CONST2:%.*]] = getelementptr [8192 x i64], ptr [[IN_PTR]], i64 0, i64 51275; CHECK-NEXT:    [[IDX2:%.*]] = getelementptr i64, ptr [[CONST2]], i64 [[IN_IDX1]]76; CHECK-NEXT:    [[CONST3:%.*]] = getelementptr [8192 x i64], ptr [[IN_PTR]], i64 0, i64 76877; CHECK-NEXT:    [[IDX3:%.*]] = getelementptr i64, ptr [[CONST3]], i64 [[IN_IDX1]]78; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i64 [[IN_IDX0]], 079; CHECK-NEXT:    br i1 [[CMP0]], label [[BB_1:%.*]], label [[END:%.*]]80; CHECK:       bb.1:81; CHECK-NEXT:    [[VAL0:%.*]] = load <8 x i64>, ptr [[IDX0]], align 1682; CHECK-NEXT:    [[VAL1:%.*]] = load <8 x i64>, ptr [[IDX1]], align 1683; CHECK-NEXT:    [[VAL2:%.*]] = load <8 x i64>, ptr [[IDX2]], align 1684; CHECK-NEXT:    [[VAL3:%.*]] = load <8 x i64>, ptr [[IDX3]], align 1685; CHECK-NEXT:    call void asm sideeffect "86; CHECK-NEXT:    call void asm sideeffect "87; CHECK-NEXT:    call void asm sideeffect "88; CHECK-NEXT:    call void asm sideeffect "89; CHECK-NEXT:    br label [[END]]90; CHECK:       end:91; CHECK-NEXT:    call void asm sideeffect "92; CHECK-NEXT:    call void asm sideeffect "93; CHECK-NEXT:    call void asm sideeffect "94; CHECK-NEXT:    call void asm sideeffect "95; CHECK-NEXT:    ret void96;97entry:98  %idx0 = getelementptr [8192 x i64], ptr %in.ptr, i64 0, i64 %in.idx199  %const1 = getelementptr [8192 x i64], ptr %in.ptr, i64 0, i64 256100  %idx1 = getelementptr i64, ptr %const1, i64 %in.idx1101  %const2 = getelementptr [8192 x i64], ptr %in.ptr, i64 0, i64 512102  %idx2 = getelementptr i64, ptr %const2, i64 %in.idx1103  %const3 = getelementptr [8192 x i64], ptr %in.ptr, i64 0, i64 768104  %idx3 = getelementptr i64, ptr %const3, i64 %in.idx1105  %cmp0 = icmp eq i64 %in.idx0, 0106  br i1 %cmp0, label %bb.1, label %end107 108bb.1:109  %val0 = load <8 x i64>, ptr %idx0, align 16110  %val1 = load <8 x i64>, ptr %idx1, align 16111  %val2 = load <8 x i64>, ptr %idx2, align 16112  %val3 = load <8 x i64>, ptr %idx3, align 16113  call void asm sideeffect "; use $0", "v"(<8 x i64> %val0)114  call void asm sideeffect "; use $0", "v"(<8 x i64> %val1)115  call void asm sideeffect "; use $0", "v"(<8 x i64> %val2)116  call void asm sideeffect "; use $0", "v"(<8 x i64> %val3)117  br label %end118 119end:120  call void asm sideeffect "; use $0", "v"(ptr %idx0)121  call void asm sideeffect "; use $0", "v"(ptr %idx1)122  call void asm sideeffect "; use $0", "v"(ptr %idx2)123  call void asm sideeffect "; use $0", "v"(ptr %idx3)124  ret void125}126 127 128define void @different_type_reorder(ptr %in.ptr, i64 %in.idx0, i64 %in.idx1) {129; CHECK-LABEL: define void @different_type_reorder(130; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX0:%.*]], i64 [[IN_IDX1:%.*]]) {131; CHECK-NEXT:  entry:132; CHECK-NEXT:    [[BASE:%.*]] = getelementptr i64, ptr [[IN_PTR]], i64 [[IN_IDX0]]133; CHECK-NEXT:    [[IDX0:%.*]] = getelementptr i64, ptr [[BASE]], i64 [[IN_IDX1]]134; CHECK-NEXT:    [[CONST1:%.*]] = getelementptr i8, ptr [[BASE]], i64 256135; CHECK-NEXT:    [[IDX1:%.*]] = getelementptr i64, ptr [[CONST1]], i64 [[IN_IDX1]]136; CHECK-NEXT:    [[CONST2:%.*]] = getelementptr i8, ptr [[BASE]], i64 512137; CHECK-NEXT:    [[IDX2:%.*]] = getelementptr i64, ptr [[CONST2]], i64 [[IN_IDX1]]138; CHECK-NEXT:    [[CONST3:%.*]] = getelementptr i8, ptr [[BASE]], i64 768139; CHECK-NEXT:    [[IDX3:%.*]] = getelementptr i64, ptr [[CONST3]], i64 [[IN_IDX1]]140; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i64 [[IN_IDX0]], 0141; CHECK-NEXT:    br i1 [[CMP0]], label [[BB_1:%.*]], label [[END:%.*]]142; CHECK:       bb.1:143; CHECK-NEXT:    [[VAL0:%.*]] = load <8 x i64>, ptr [[IDX0]], align 16144; CHECK-NEXT:    [[VAL1:%.*]] = load <8 x i64>, ptr [[IDX1]], align 16145; CHECK-NEXT:    [[VAL2:%.*]] = load <8 x i64>, ptr [[IDX2]], align 16146; CHECK-NEXT:    [[VAL3:%.*]] = load <8 x i64>, ptr [[IDX3]], align 16147; CHECK-NEXT:    call void asm sideeffect "148; CHECK-NEXT:    call void asm sideeffect "149; CHECK-NEXT:    call void asm sideeffect "150; CHECK-NEXT:    call void asm sideeffect "151; CHECK-NEXT:    br label [[END]]152; CHECK:       end:153; CHECK-NEXT:    call void asm sideeffect "154; CHECK-NEXT:    call void asm sideeffect "155; CHECK-NEXT:    call void asm sideeffect "156; CHECK-NEXT:    call void asm sideeffect "157; CHECK-NEXT:    ret void158;159entry:160  %base = getelementptr i64, ptr %in.ptr, i64 %in.idx0161  %idx0 = getelementptr i64, ptr %base, i64 %in.idx1162  %const1 = getelementptr i8, ptr %base, i64 256163  %idx1 = getelementptr i64, ptr %const1, i64 %in.idx1164  %const2 = getelementptr i8, ptr %base, i64 512165  %idx2 = getelementptr i64, ptr %const2, i64 %in.idx1166  %const3 = getelementptr i8, ptr %base, i64 768167  %idx3 = getelementptr i64, ptr %const3, i64 %in.idx1168  %cmp0 = icmp eq i64 %in.idx0, 0169  br i1 %cmp0, label %bb.1, label %end170 171bb.1:172  %val0 = load <8 x i64>, ptr %idx0, align 16173  %val1 = load <8 x i64>, ptr %idx1, align 16174  %val2 = load <8 x i64>, ptr %idx2, align 16175  %val3 = load <8 x i64>, ptr %idx3, align 16176  call void asm sideeffect "; use $0", "v"(<8 x i64> %val0)177  call void asm sideeffect "; use $0", "v"(<8 x i64> %val1)178  call void asm sideeffect "; use $0", "v"(<8 x i64> %val2)179  call void asm sideeffect "; use $0", "v"(<8 x i64> %val3)180  br label %end181 182end:183  call void asm sideeffect "; use $0", "v"(ptr %idx0)184  call void asm sideeffect "; use $0", "v"(ptr %idx1)185  call void asm sideeffect "; use $0", "v"(ptr %idx2)186  call void asm sideeffect "; use $0", "v"(ptr %idx3)187  ret void188}189 190 191define void @different_type_reorder2(ptr %in.ptr, i64 %in.idx0, i64 %in.idx1) {192; CHECK-LABEL: define void @different_type_reorder2(193; CHECK-SAME: ptr [[IN_PTR:%.*]], i64 [[IN_IDX0:%.*]], i64 [[IN_IDX1:%.*]]) {194; CHECK-NEXT:  entry:195; CHECK-NEXT:    [[BASE:%.*]] = getelementptr i8, ptr [[IN_PTR]], i64 [[IN_IDX0]]196; CHECK-NEXT:    [[IDX0:%.*]] = getelementptr i8, ptr [[BASE]], i64 [[IN_IDX1]]197; CHECK-NEXT:    [[CONST1:%.*]] = getelementptr i64, ptr [[BASE]], i64 256198; CHECK-NEXT:    [[IDX1:%.*]] = getelementptr i8, ptr [[CONST1]], i64 [[IN_IDX1]]199; CHECK-NEXT:    [[CONST2:%.*]] = getelementptr i64, ptr [[BASE]], i64 512200; CHECK-NEXT:    [[IDX2:%.*]] = getelementptr i8, ptr [[CONST2]], i64 [[IN_IDX1]]201; CHECK-NEXT:    [[CONST3:%.*]] = getelementptr i64, ptr [[BASE]], i64 768202; CHECK-NEXT:    [[IDX3:%.*]] = getelementptr i8, ptr [[CONST3]], i64 [[IN_IDX1]]203; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i64 [[IN_IDX0]], 0204; CHECK-NEXT:    br i1 [[CMP0]], label [[BB_1:%.*]], label [[END:%.*]]205; CHECK:       bb.1:206; CHECK-NEXT:    [[VAL0:%.*]] = load <8 x i64>, ptr [[IDX0]], align 16207; CHECK-NEXT:    [[VAL1:%.*]] = load <8 x i64>, ptr [[IDX1]], align 16208; CHECK-NEXT:    [[VAL2:%.*]] = load <8 x i64>, ptr [[IDX2]], align 16209; CHECK-NEXT:    [[VAL3:%.*]] = load <8 x i64>, ptr [[IDX3]], align 16210; CHECK-NEXT:    call void asm sideeffect "211; CHECK-NEXT:    call void asm sideeffect "212; CHECK-NEXT:    call void asm sideeffect "213; CHECK-NEXT:    call void asm sideeffect "214; CHECK-NEXT:    br label [[END]]215; CHECK:       end:216; CHECK-NEXT:    call void asm sideeffect "217; CHECK-NEXT:    call void asm sideeffect "218; CHECK-NEXT:    call void asm sideeffect "219; CHECK-NEXT:    call void asm sideeffect "220; CHECK-NEXT:    ret void221;222entry:223  %base = getelementptr i8, ptr %in.ptr, i64 %in.idx0224  %idx0 = getelementptr i8, ptr %base, i64 %in.idx1225  %const1 = getelementptr i64, ptr %base, i64 256226  %idx1 = getelementptr i8, ptr %const1, i64 %in.idx1227  %const2 = getelementptr i64, ptr %base, i64 512228  %idx2 = getelementptr i8, ptr %const2, i64 %in.idx1229  %const3 = getelementptr i64, ptr %base, i64 768230  %idx3 = getelementptr i8, ptr %const3, i64 %in.idx1231  %cmp0 = icmp eq i64 %in.idx0, 0232  br i1 %cmp0, label %bb.1, label %end233 234bb.1:235  %val0 = load <8 x i64>, ptr %idx0, align 16236  %val1 = load <8 x i64>, ptr %idx1, align 16237  %val2 = load <8 x i64>, ptr %idx2, align 16238  %val3 = load <8 x i64>, ptr %idx3, align 16239  call void asm sideeffect "; use $0", "v"(<8 x i64> %val0)240  call void asm sideeffect "; use $0", "v"(<8 x i64> %val1)241  call void asm sideeffect "; use $0", "v"(<8 x i64> %val2)242  call void asm sideeffect "; use $0", "v"(<8 x i64> %val3)243  br label %end244 245end:246  call void asm sideeffect "; use $0", "v"(ptr %idx0)247  call void asm sideeffect "; use $0", "v"(ptr %idx1)248  call void asm sideeffect "; use $0", "v"(ptr %idx2)249  call void asm sideeffect "; use $0", "v"(ptr %idx3)250  ret void251}252