1cc2ce81bSMartin Sebor; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2cc2ce81bSMartin Sebor; Verify that strlen calls with elements of constant arrays are folded. 3cc2ce81bSMartin Sebor; 4cc2ce81bSMartin Sebor; RUN: opt < %s -passes=instcombine -S | FileCheck %s 5cc2ce81bSMartin Sebor 6*4ab40ecaSBjorn Petterssondeclare i64 @strlen(ptr) 7cc2ce81bSMartin Sebor 8cc2ce81bSMartin Sebor@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] 9cc2ce81bSMartin Sebor 10cc2ce81bSMartin Sebor 11cc2ce81bSMartin Sebor; Fold strlen(a5_4[0]) to 3. 12cc2ce81bSMartin Sebor 13cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i0_to_3() { 14cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i0_to_3( 15b19194c0SMartin Sebor; CHECK-NEXT: ret i64 3 16cc2ce81bSMartin Sebor; 17*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr @a5_4) 18cc2ce81bSMartin Sebor ret i64 %len 19cc2ce81bSMartin Sebor} 20cc2ce81bSMartin Sebor 21cc2ce81bSMartin Sebor 22cc2ce81bSMartin Sebor; Fold strlen(&a5_4[0][1]) to 2. 23cc2ce81bSMartin Sebor 24cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i0_p1_to_2() { 25cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i0_p1_to_2( 26b19194c0SMartin Sebor; CHECK-NEXT: ret i64 2 27cc2ce81bSMartin Sebor; 28*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 1 29*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 30cc2ce81bSMartin Sebor ret i64 %len 31cc2ce81bSMartin Sebor} 32cc2ce81bSMartin Sebor 33cc2ce81bSMartin Sebor 34cc2ce81bSMartin Sebor; Fold strlen(&a5_4[0][2]) to 1. 35cc2ce81bSMartin Sebor 36cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i0_p2_to_1() { 37cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i0_p2_to_1( 38b19194c0SMartin Sebor; CHECK-NEXT: ret i64 1 39cc2ce81bSMartin Sebor; 40*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 2 41*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 42cc2ce81bSMartin Sebor ret i64 %len 43cc2ce81bSMartin Sebor} 44cc2ce81bSMartin Sebor 45cc2ce81bSMartin Sebor 46cc2ce81bSMartin Sebor; Fold strlen(&a5_4[0][3]) to 0. 47cc2ce81bSMartin Sebor 48cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i0_p3_to_0() { 49cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i0_p3_to_0( 50b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 51cc2ce81bSMartin Sebor; 52*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 0, i64 3 53*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 54cc2ce81bSMartin Sebor ret i64 %len 55cc2ce81bSMartin Sebor} 56cc2ce81bSMartin Sebor 57cc2ce81bSMartin Sebor 58cc2ce81bSMartin Sebor; Fold strlen(a5_4[1]) to 2. 59cc2ce81bSMartin Sebor 60cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i1_to_2() { 61cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i1_to_2( 62b19194c0SMartin Sebor; CHECK-NEXT: ret i64 2 63cc2ce81bSMartin Sebor; 64*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 0 65*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 66cc2ce81bSMartin Sebor ret i64 %len 67cc2ce81bSMartin Sebor} 68cc2ce81bSMartin Sebor 69cc2ce81bSMartin Sebor 70cc2ce81bSMartin Sebor; Fold strlen(&a5_4[1][1]) to 1. 71cc2ce81bSMartin Sebor 72cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i1_p1_to_1() { 73cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i1_p1_to_1( 74b19194c0SMartin Sebor; CHECK-NEXT: ret i64 1 75cc2ce81bSMartin Sebor; 76*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 1 77*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 78cc2ce81bSMartin Sebor ret i64 %len 79cc2ce81bSMartin Sebor} 80cc2ce81bSMartin Sebor 81cc2ce81bSMartin Sebor 82cc2ce81bSMartin Sebor; Fold strlen(&a5_4[1][2]) to 0. 83cc2ce81bSMartin Sebor 84cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i1_p2_to_0() { 85cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i1_p2_to_0( 86b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 87cc2ce81bSMartin Sebor; 88*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 2 89*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 90cc2ce81bSMartin Sebor ret i64 %len 91cc2ce81bSMartin Sebor} 92cc2ce81bSMartin Sebor 93cc2ce81bSMartin Sebor 94cc2ce81bSMartin Sebor; Fold strlen(&a5_4[1][3]) to 0. 95cc2ce81bSMartin Sebor 96cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i1_p3_to_0() { 97cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i1_p3_to_0( 98b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 99cc2ce81bSMartin Sebor; 100*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 1, i64 3 101*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 102cc2ce81bSMartin Sebor ret i64 %len 103cc2ce81bSMartin Sebor} 104cc2ce81bSMartin Sebor 105cc2ce81bSMartin Sebor 106cc2ce81bSMartin Sebor; Fold strlen(a5_4[2]) to 1. 107cc2ce81bSMartin Sebor 108cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i2_to_1() { 109cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i2_to_1( 110b19194c0SMartin Sebor; CHECK-NEXT: ret i64 1 111cc2ce81bSMartin Sebor; 112*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 0 113*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 114cc2ce81bSMartin Sebor ret i64 %len 115cc2ce81bSMartin Sebor} 116cc2ce81bSMartin Sebor 117cc2ce81bSMartin Sebor 118cc2ce81bSMartin Sebor; Fold strlen(&a5_4[2][1]) to 0. 119cc2ce81bSMartin Sebor 120cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i2_p1_to_0() { 121cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i2_p1_to_0( 122b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 123cc2ce81bSMartin Sebor; 124*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 1 125*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 126cc2ce81bSMartin Sebor ret i64 %len 127cc2ce81bSMartin Sebor} 128cc2ce81bSMartin Sebor 129cc2ce81bSMartin Sebor 130cc2ce81bSMartin Sebor; Fold strlen(&a5_4[2][2]) to 0. 131cc2ce81bSMartin Sebor 132cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i2_p2_to_0() { 133cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i2_p2_to_0( 134b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 135cc2ce81bSMartin Sebor; 136*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 2 137*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 138cc2ce81bSMartin Sebor ret i64 %len 139cc2ce81bSMartin Sebor} 140cc2ce81bSMartin Sebor 141cc2ce81bSMartin Sebor 142cc2ce81bSMartin Sebor; Fold strlen(&a5_4[2][3]) to 0. 143cc2ce81bSMartin Sebor 144cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i2_p3_to_0() { 145cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i2_p3_to_0( 146b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 147cc2ce81bSMartin Sebor; 148*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 2, i64 3 149*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 150cc2ce81bSMartin Sebor ret i64 %len 151cc2ce81bSMartin Sebor} 152cc2ce81bSMartin Sebor 153cc2ce81bSMartin Sebor 154cc2ce81bSMartin Sebor; Fold strlen(a5_4[3]) to 0 155cc2ce81bSMartin Sebor 156cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i3_to_0() { 157cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i3_to_0( 158b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 159cc2ce81bSMartin Sebor; 160*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 0 161*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 162cc2ce81bSMartin Sebor ret i64 %len 163cc2ce81bSMartin Sebor} 164cc2ce81bSMartin Sebor 165cc2ce81bSMartin Sebor 166cc2ce81bSMartin Sebor; Fold strlen(&a5_4[3][1]) to 0 167cc2ce81bSMartin Sebor 168cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i3_p1_to_0() { 169cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i3_p1_to_0( 170b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 171cc2ce81bSMartin Sebor; 172*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 1 173*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 174cc2ce81bSMartin Sebor ret i64 %len 175cc2ce81bSMartin Sebor} 176cc2ce81bSMartin Sebor 177cc2ce81bSMartin Sebor 178cc2ce81bSMartin Sebor; Fold strlen(&a5_4[3][2]) to 0 179cc2ce81bSMartin Sebor 180cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i3_p2_to_0() { 181cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i3_p2_to_0( 182b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 183cc2ce81bSMartin Sebor; 184*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 2 185*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 186cc2ce81bSMartin Sebor ret i64 %len 187cc2ce81bSMartin Sebor} 188cc2ce81bSMartin Sebor 189cc2ce81bSMartin Sebor 190cc2ce81bSMartin Sebor; Fold strlen(&a5_4[3][3]) to 0 191cc2ce81bSMartin Sebor 192cc2ce81bSMartin Sebordefine i64 @fold_a5_3_i4_p3_to_0() { 193cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_3_i4_p3_to_0( 194b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 195cc2ce81bSMartin Sebor; 196*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 3, i64 3 197*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 198cc2ce81bSMartin Sebor ret i64 %len 199cc2ce81bSMartin Sebor} 200cc2ce81bSMartin Sebor 201cc2ce81bSMartin Sebor 202cc2ce81bSMartin Sebor; Fold strlen(a5_4[4]) to 0 203cc2ce81bSMartin Sebor 204cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i4_to_0() { 205cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i4_to_0( 206b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 207cc2ce81bSMartin Sebor; 208*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 0 209*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 210cc2ce81bSMartin Sebor ret i64 %len 211cc2ce81bSMartin Sebor} 212cc2ce81bSMartin Sebor 213cc2ce81bSMartin Sebor 214cc2ce81bSMartin Sebor; Fold strlen(&a5_4[4][1]) to 0 215cc2ce81bSMartin Sebor 216cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i4_p1_to_0() { 217cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i4_p1_to_0( 218b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 219cc2ce81bSMartin Sebor; 220*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 1 221*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 222cc2ce81bSMartin Sebor ret i64 %len 223cc2ce81bSMartin Sebor} 224cc2ce81bSMartin Sebor 225cc2ce81bSMartin Sebor 226cc2ce81bSMartin Sebor; Fold strlen(&a5_4[4][2]) to 0 227cc2ce81bSMartin Sebor 228cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i4_p2_to_0() { 229cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i4_p2_to_0( 230b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 231cc2ce81bSMartin Sebor; 232*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 2 233*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 234cc2ce81bSMartin Sebor ret i64 %len 235cc2ce81bSMartin Sebor} 236cc2ce81bSMartin Sebor 237cc2ce81bSMartin Sebor 238cc2ce81bSMartin Sebor; Fold strlen(&a5_4[4][3]) to 0 239cc2ce81bSMartin Sebor 240cc2ce81bSMartin Sebordefine i64 @fold_a5_4_i4_p3_to_0() { 241cc2ce81bSMartin Sebor; CHECK-LABEL: @fold_a5_4_i4_p3_to_0( 242b19194c0SMartin Sebor; CHECK-NEXT: ret i64 0 243cc2ce81bSMartin Sebor; 244*4ab40ecaSBjorn Pettersson %ptr = getelementptr [5 x [4 x i8]], ptr @a5_4, i64 0, i64 4, i64 3 245*4ab40ecaSBjorn Pettersson %len = call i64 @strlen(ptr %ptr) 246cc2ce81bSMartin Sebor ret i64 %len 247cc2ce81bSMartin Sebor} 248