brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.4 KiB · 6f0347f Raw
248 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; Verify that strlen calls with elements of constant arrays are folded.3;4; RUN: opt < %s -passes=instcombine -S | FileCheck %s5 6declare i64 @strlen(ptr)7 8@a5_4 = constant [5 x [4 x i8]] [[4 x i8] c"123\00", [4 x i8] c"12\00\00", [4 x i8] c"1\00\00\00", [4 x i8] zeroinitializer, [4 x i8] zeroinitializer]9 10 11; Fold strlen(a5_4[0]) to 3.12 13define i64 @fold_a5_4_i0_to_3() {14; CHECK-LABEL: @fold_a5_4_i0_to_3(15; CHECK-NEXT:    ret i64 316;17  %len = call i64 @strlen(ptr @a5_4)18  ret i64 %len19}20 21 22; Fold strlen(&a5_4[0][1]) to 2.23 24define i64 @fold_a5_4_i0_p1_to_2() {25; CHECK-LABEL: @fold_a5_4_i0_p1_to_2(26; CHECK-NEXT:    ret i64 227;28  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 129  %len = call i64 @strlen(ptr %ptr)30  ret i64 %len31}32 33 34; Fold strlen(&a5_4[0][2]) to 1.35 36define i64 @fold_a5_4_i0_p2_to_1() {37; CHECK-LABEL: @fold_a5_4_i0_p2_to_1(38; CHECK-NEXT:    ret i64 139;40  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 241  %len = call i64 @strlen(ptr %ptr)42  ret i64 %len43}44 45 46; Fold strlen(&a5_4[0][3]) to 0.47 48define i64 @fold_a5_4_i0_p3_to_0() {49; CHECK-LABEL: @fold_a5_4_i0_p3_to_0(50; CHECK-NEXT:    ret i64 051;52  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 353  %len = call i64 @strlen(ptr %ptr)54  ret i64 %len55}56 57 58; Fold strlen(a5_4[1]) to 2.59 60define i64 @fold_a5_4_i1_to_2() {61; CHECK-LABEL: @fold_a5_4_i1_to_2(62; CHECK-NEXT:    ret i64 263;64  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 065  %len = call i64 @strlen(ptr %ptr)66  ret i64 %len67}68 69 70; Fold strlen(&a5_4[1][1]) to 1.71 72define i64 @fold_a5_4_i1_p1_to_1() {73; CHECK-LABEL: @fold_a5_4_i1_p1_to_1(74; CHECK-NEXT:    ret i64 175;76  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 177  %len = call i64 @strlen(ptr %ptr)78  ret i64 %len79}80 81 82; Fold strlen(&a5_4[1][2]) to 0.83 84define i64 @fold_a5_4_i1_p2_to_0() {85; CHECK-LABEL: @fold_a5_4_i1_p2_to_0(86; CHECK-NEXT:    ret i64 087;88  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 289  %len = call i64 @strlen(ptr %ptr)90  ret i64 %len91}92 93 94; Fold strlen(&a5_4[1][3]) to 0.95 96define i64 @fold_a5_4_i1_p3_to_0() {97; CHECK-LABEL: @fold_a5_4_i1_p3_to_0(98; CHECK-NEXT:    ret i64 099;100  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 3101  %len = call i64 @strlen(ptr %ptr)102  ret i64 %len103}104 105 106; Fold strlen(a5_4[2]) to 1.107 108define i64 @fold_a5_4_i2_to_1() {109; CHECK-LABEL: @fold_a5_4_i2_to_1(110; CHECK-NEXT:    ret i64 1111;112  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 0113  %len = call i64 @strlen(ptr %ptr)114  ret i64 %len115}116 117 118; Fold strlen(&a5_4[2][1]) to 0.119 120define i64 @fold_a5_4_i2_p1_to_0() {121; CHECK-LABEL: @fold_a5_4_i2_p1_to_0(122; CHECK-NEXT:    ret i64 0123;124  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 1125  %len = call i64 @strlen(ptr %ptr)126  ret i64 %len127}128 129 130; Fold strlen(&a5_4[2][2]) to 0.131 132define i64 @fold_a5_4_i2_p2_to_0() {133; CHECK-LABEL: @fold_a5_4_i2_p2_to_0(134; CHECK-NEXT:    ret i64 0135;136  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 2137  %len = call i64 @strlen(ptr %ptr)138  ret i64 %len139}140 141 142; Fold strlen(&a5_4[2][3]) to 0.143 144define i64 @fold_a5_4_i2_p3_to_0() {145; CHECK-LABEL: @fold_a5_4_i2_p3_to_0(146; CHECK-NEXT:    ret i64 0147;148  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 3149  %len = call i64 @strlen(ptr %ptr)150  ret i64 %len151}152 153 154; Fold strlen(a5_4[3]) to 0155 156define i64 @fold_a5_4_i3_to_0() {157; CHECK-LABEL: @fold_a5_4_i3_to_0(158; CHECK-NEXT:    ret i64 0159;160  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 0161  %len = call i64 @strlen(ptr %ptr)162  ret i64 %len163}164 165 166; Fold strlen(&a5_4[3][1]) to 0167 168define i64 @fold_a5_4_i3_p1_to_0() {169; CHECK-LABEL: @fold_a5_4_i3_p1_to_0(170; CHECK-NEXT:    ret i64 0171;172  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 1173  %len = call i64 @strlen(ptr %ptr)174  ret i64 %len175}176 177 178; Fold strlen(&a5_4[3][2]) to 0179 180define i64 @fold_a5_4_i3_p2_to_0() {181; CHECK-LABEL: @fold_a5_4_i3_p2_to_0(182; CHECK-NEXT:    ret i64 0183;184  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 2185  %len = call i64 @strlen(ptr %ptr)186  ret i64 %len187}188 189 190; Fold strlen(&a5_4[3][3]) to 0191 192define i64 @fold_a5_3_i4_p3_to_0() {193; CHECK-LABEL: @fold_a5_3_i4_p3_to_0(194; CHECK-NEXT:    ret i64 0195;196  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 3197  %len = call i64 @strlen(ptr %ptr)198  ret i64 %len199}200 201 202; Fold strlen(a5_4[4]) to 0203 204define i64 @fold_a5_4_i4_to_0() {205; CHECK-LABEL: @fold_a5_4_i4_to_0(206; CHECK-NEXT:    ret i64 0207;208  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 0209  %len = call i64 @strlen(ptr %ptr)210  ret i64 %len211}212 213 214; Fold strlen(&a5_4[4][1]) to 0215 216define i64 @fold_a5_4_i4_p1_to_0() {217; CHECK-LABEL: @fold_a5_4_i4_p1_to_0(218; CHECK-NEXT:    ret i64 0219;220  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 1221  %len = call i64 @strlen(ptr %ptr)222  ret i64 %len223}224 225 226; Fold strlen(&a5_4[4][2]) to 0227 228define i64 @fold_a5_4_i4_p2_to_0() {229; CHECK-LABEL: @fold_a5_4_i4_p2_to_0(230; CHECK-NEXT:    ret i64 0231;232  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 2233  %len = call i64 @strlen(ptr %ptr)234  ret i64 %len235}236 237 238; Fold strlen(&a5_4[4][3]) to 0239 240define i64 @fold_a5_4_i4_p3_to_0() {241; CHECK-LABEL: @fold_a5_4_i4_p3_to_0(242; CHECK-NEXT:    ret i64 0243;244  %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 3245  %len = call i64 @strlen(ptr %ptr)246  ret i64 %len247}248