xref: /llvm-project/llvm/test/Transforms/InstCombine/strlen-5.ll (revision 4ab40eca080965c65802710e39adbb78c4ce7bde)
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