xref: /aosp_15_r20/external/llvm/test/Transforms/InstCombine/load-cmp.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*9880d681SAndroid Build Coastguard Worker; RUN: opt -instcombine -S -default-data-layout="p:32:32:32-p1:16:16:16-n8:16:32:64" < %s | FileCheck %s
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker@G16 = internal constant [10 x i16] [i16 35, i16 82, i16 69, i16 81, i16 85,
5*9880d681SAndroid Build Coastguard Worker                                     i16 73, i16 82, i16 69, i16 68, i16 0]
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Worker@G16_as1 = internal addrspace(1) constant [10 x i16] [i16 35, i16 82, i16 69, i16 81, i16 85,
8*9880d681SAndroid Build Coastguard Worker                                                      i16 73, i16 82, i16 69, i16 68, i16 0]
9*9880d681SAndroid Build Coastguard Worker
10*9880d681SAndroid Build Coastguard Worker@GD = internal constant [6 x double]
11*9880d681SAndroid Build Coastguard Worker   [double -10.0, double 1.0, double 4.0, double 2.0, double -20.0, double -40.0]
12*9880d681SAndroid Build Coastguard Worker
13*9880d681SAndroid Build Coastguard Worker%Foo = type { i32, i32, i32, i32 }
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Worker@GS = internal constant %Foo { i32 1, i32 4, i32 9, i32 14 }
16*9880d681SAndroid Build Coastguard Worker
17*9880d681SAndroid Build Coastguard Worker@GStructArr = internal constant [4 x %Foo] [ %Foo { i32 1, i32 4, i32 9, i32 14 },
18*9880d681SAndroid Build Coastguard Worker                                             %Foo { i32 5, i32 4, i32 6, i32 11 },
19*9880d681SAndroid Build Coastguard Worker                                             %Foo { i32 6, i32 5, i32 9, i32 20 },
20*9880d681SAndroid Build Coastguard Worker                                             %Foo { i32 12, i32 3, i32 9, i32 8 } ]
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Worker
23*9880d681SAndroid Build Coastguard Workerdefine i1 @test1(i32 %X) {
24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1(
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 %X, 9
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
27*9880d681SAndroid Build Coastguard Worker;
28*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
29*9880d681SAndroid Build Coastguard Worker  %Q = load i16, i16* %P
30*9880d681SAndroid Build Coastguard Worker  %R = icmp eq i16 %Q, 0
31*9880d681SAndroid Build Coastguard Worker  ret i1 %R
32*9880d681SAndroid Build Coastguard Worker}
33*9880d681SAndroid Build Coastguard Worker
34*9880d681SAndroid Build Coastguard Workerdefine i1 @test1_noinbounds(i32 %X) {
35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1_noinbounds(
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 %X, 9
37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
38*9880d681SAndroid Build Coastguard Worker;
39*9880d681SAndroid Build Coastguard Worker  %P = getelementptr [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
40*9880d681SAndroid Build Coastguard Worker  %Q = load i16, i16* %P
41*9880d681SAndroid Build Coastguard Worker  %R = icmp eq i16 %Q, 0
42*9880d681SAndroid Build Coastguard Worker  ret i1 %R
43*9880d681SAndroid Build Coastguard Worker}
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerdefine i1 @test1_noinbounds_i64(i64 %X) {
46*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1_noinbounds_i64(
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 %X to i32
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[TMP1]], 9
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
50*9880d681SAndroid Build Coastguard Worker;
51*9880d681SAndroid Build Coastguard Worker  %P = getelementptr [10 x i16], [10 x i16]* @G16, i64 0, i64 %X
52*9880d681SAndroid Build Coastguard Worker  %Q = load i16, i16* %P
53*9880d681SAndroid Build Coastguard Worker  %R = icmp eq i16 %Q, 0
54*9880d681SAndroid Build Coastguard Worker  ret i1 %R
55*9880d681SAndroid Build Coastguard Worker}
56*9880d681SAndroid Build Coastguard Worker
57*9880d681SAndroid Build Coastguard Workerdefine i1 @test1_noinbounds_as1(i32 %x) {
58*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1_noinbounds_as1(
59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 %x to i16
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp eq i16 [[TMP1]], 9
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
62*9880d681SAndroid Build Coastguard Worker;
63*9880d681SAndroid Build Coastguard Worker  %p = getelementptr [10 x i16], [10 x i16] addrspace(1)* @G16_as1, i16 0, i32 %x
64*9880d681SAndroid Build Coastguard Worker  %q = load i16, i16 addrspace(1)* %p
65*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i16 %q, 0
66*9880d681SAndroid Build Coastguard Worker  ret i1 %r
67*9880d681SAndroid Build Coastguard Worker
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerdefine i1 @test2(i32 %X) {
71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2(
72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 %X, 4
73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
74*9880d681SAndroid Build Coastguard Worker;
75*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
76*9880d681SAndroid Build Coastguard Worker  %Q = load i16, i16* %P
77*9880d681SAndroid Build Coastguard Worker  %R = icmp slt i16 %Q, 85
78*9880d681SAndroid Build Coastguard Worker  ret i1 %R
79*9880d681SAndroid Build Coastguard Worker}
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Workerdefine i1 @test3(i32 %X) {
82*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3(
83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 %X, 1
84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
85*9880d681SAndroid Build Coastguard Worker;
86*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [6 x double], [6 x double]* @GD, i32 0, i32 %X
87*9880d681SAndroid Build Coastguard Worker  %Q = load double, double* %P
88*9880d681SAndroid Build Coastguard Worker  %R = fcmp oeq double %Q, 1.0
89*9880d681SAndroid Build Coastguard Worker  ret i1 %R
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Worker}
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Workerdefine i1 @test4(i32 %X) {
94*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4(
95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = lshr i32 933, %X
96*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP2:%.*]] = and i32 [[TMP1]], 1
97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[TMP2]], 0
98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
99*9880d681SAndroid Build Coastguard Worker;
100*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
101*9880d681SAndroid Build Coastguard Worker  %Q = load i16, i16* %P
102*9880d681SAndroid Build Coastguard Worker  %R = icmp sle i16 %Q, 73
103*9880d681SAndroid Build Coastguard Worker  ret i1 %R
104*9880d681SAndroid Build Coastguard Worker}
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Workerdefine i1 @test4_i16(i16 %X) {
107*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4_i16(
108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = sext i16 %X to i32
109*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP2:%.*]] = lshr i32 933, [[TMP1]]
110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP3:%.*]] = and i32 [[TMP2]], 1
111*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[TMP3]], 0
112*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
113*9880d681SAndroid Build Coastguard Worker;
114*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i16 %X
115*9880d681SAndroid Build Coastguard Worker  %Q = load i16, i16* %P
116*9880d681SAndroid Build Coastguard Worker  %R = icmp sle i16 %Q, 73
117*9880d681SAndroid Build Coastguard Worker  ret i1 %R
118*9880d681SAndroid Build Coastguard Worker}
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Workerdefine i1 @test5(i32 %X) {
121*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5(
122*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i32 %X, 2
123*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 %X, 7
124*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = or i1 [[TMP1]], [[TMP2]]
125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
126*9880d681SAndroid Build Coastguard Worker;
127*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
128*9880d681SAndroid Build Coastguard Worker  %Q = load i16, i16* %P
129*9880d681SAndroid Build Coastguard Worker  %R = icmp eq i16 %Q, 69
130*9880d681SAndroid Build Coastguard Worker  ret i1 %R
131*9880d681SAndroid Build Coastguard Worker}
132*9880d681SAndroid Build Coastguard Worker
133*9880d681SAndroid Build Coastguard Workerdefine i1 @test6(i32 %X) {
134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test6(
135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = add i32 %X, -1
136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ult i32 [[TMP1]], 3
137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
138*9880d681SAndroid Build Coastguard Worker;
139*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [6 x double], [6 x double]* @GD, i32 0, i32 %X
140*9880d681SAndroid Build Coastguard Worker  %Q = load double, double* %P
141*9880d681SAndroid Build Coastguard Worker  %R = fcmp ogt double %Q, 0.0
142*9880d681SAndroid Build Coastguard Worker  ret i1 %R
143*9880d681SAndroid Build Coastguard Worker}
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Workerdefine i1 @test7(i32 %X) {
146*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test7(
147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = add i32 %X, -1
148*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ugt i32 [[TMP1]], 2
149*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
150*9880d681SAndroid Build Coastguard Worker;
151*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [6 x double], [6 x double]* @GD, i32 0, i32 %X
152*9880d681SAndroid Build Coastguard Worker  %Q = load double, double* %P
153*9880d681SAndroid Build Coastguard Worker  %R = fcmp olt double %Q, 0.0
154*9880d681SAndroid Build Coastguard Worker  ret i1 %R
155*9880d681SAndroid Build Coastguard Worker}
156*9880d681SAndroid Build Coastguard Worker
157*9880d681SAndroid Build Coastguard Workerdefine i1 @test8(i32 %X) {
158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test8(
159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = or i32 %X, 1
160*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP2:%.*]] = icmp eq i32 [[TMP1]], 9
161*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[TMP2]]
162*9880d681SAndroid Build Coastguard Worker;
163*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [10 x i16], [10 x i16]* @G16, i32 0, i32 %X
164*9880d681SAndroid Build Coastguard Worker  %Q = load i16, i16* %P
165*9880d681SAndroid Build Coastguard Worker  %R = and i16 %Q, 3
166*9880d681SAndroid Build Coastguard Worker  %S = icmp eq i16 %R, 0
167*9880d681SAndroid Build Coastguard Worker  ret i1 %S
168*9880d681SAndroid Build Coastguard Worker}
169*9880d681SAndroid Build Coastguard Worker
170*9880d681SAndroid Build Coastguard Worker@GA = internal constant [4 x { i32, i32 } ] [
171*9880d681SAndroid Build Coastguard Worker  { i32, i32 } { i32 1, i32 0 },
172*9880d681SAndroid Build Coastguard Worker  { i32, i32 } { i32 2, i32 1 },
173*9880d681SAndroid Build Coastguard Worker  { i32, i32 } { i32 3, i32 1 },
174*9880d681SAndroid Build Coastguard Worker  { i32, i32 } { i32 4, i32 0 }
175*9880d681SAndroid Build Coastguard Worker]
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Workerdefine i1 @test9(i32 %X) {
178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test9(
179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[X_OFF:%.*]] = add i32 %X, -1
180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = icmp ult i32 [[X_OFF]], 2
181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[TMP1]]
182*9880d681SAndroid Build Coastguard Worker;
183*9880d681SAndroid Build Coastguard Worker  %P = getelementptr inbounds [4 x { i32, i32 } ], [4 x { i32, i32 } ]* @GA, i32 0, i32 %X, i32 1
184*9880d681SAndroid Build Coastguard Worker  %Q = load i32, i32* %P
185*9880d681SAndroid Build Coastguard Worker  %R = icmp eq i32 %Q, 1
186*9880d681SAndroid Build Coastguard Worker  ret i1 %R
187*9880d681SAndroid Build Coastguard Worker}
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct(i32 %x) {
190*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct(
191*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 false
192*9880d681SAndroid Build Coastguard Worker;
193*9880d681SAndroid Build Coastguard Worker  %p = getelementptr inbounds %Foo, %Foo* @GS, i32 %x, i32 0
194*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
195*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 9
196*9880d681SAndroid Build Coastguard Worker  ret i1 %r
197*9880d681SAndroid Build Coastguard Worker}
198*9880d681SAndroid Build Coastguard Worker
199*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_noinbounds(i32 %x) {
200*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_noinbounds(
201*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[P:%.*]] = getelementptr %Foo, %Foo* @GS, i32 %x, i32 0
202*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[Q:%.*]] = load i32, i32* [[P]], align 8
203*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[Q]], 9
204*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
205*9880d681SAndroid Build Coastguard Worker;
206*9880d681SAndroid Build Coastguard Worker  %p = getelementptr %Foo, %Foo* @GS, i32 %x, i32 0
207*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
208*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 9
209*9880d681SAndroid Build Coastguard Worker  ret i1 %r
210*9880d681SAndroid Build Coastguard Worker}
211*9880d681SAndroid Build Coastguard Worker
212*9880d681SAndroid Build Coastguard Worker; Test that the GEP indices are converted before we ever get here
213*9880d681SAndroid Build Coastguard Worker; Index < ptr size
214*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_i16(i16 %x){
215*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_i16(
216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 false
217*9880d681SAndroid Build Coastguard Worker;
218*9880d681SAndroid Build Coastguard Worker  %p = getelementptr inbounds %Foo, %Foo* @GS, i16 %x, i32 0
219*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
220*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 0
221*9880d681SAndroid Build Coastguard Worker  ret i1 %r
222*9880d681SAndroid Build Coastguard Worker}
223*9880d681SAndroid Build Coastguard Worker
224*9880d681SAndroid Build Coastguard Worker; Test that the GEP indices are converted before we ever get here
225*9880d681SAndroid Build Coastguard Worker; Index > ptr size
226*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_i64(i64 %x){
227*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_i64(
228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 false
229*9880d681SAndroid Build Coastguard Worker;
230*9880d681SAndroid Build Coastguard Worker  %p = getelementptr inbounds %Foo, %Foo* @GS, i64 %x, i32 0
231*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
232*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 0
233*9880d681SAndroid Build Coastguard Worker  ret i1 %r
234*9880d681SAndroid Build Coastguard Worker}
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_noinbounds_i16(i16 %x) {
237*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_noinbounds_i16(
238*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = sext i16 %x to i32
239*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[P:%.*]] = getelementptr %Foo, %Foo* @GS, i32 [[TMP1]], i32 0
240*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[Q:%.*]] = load i32, i32* [[P]], align 8
241*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp eq i32 [[Q]], 0
242*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
243*9880d681SAndroid Build Coastguard Worker;
244*9880d681SAndroid Build Coastguard Worker  %p = getelementptr %Foo, %Foo* @GS, i16 %x, i32 0
245*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
246*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 0
247*9880d681SAndroid Build Coastguard Worker  ret i1 %r
248*9880d681SAndroid Build Coastguard Worker}
249*9880d681SAndroid Build Coastguard Worker
250*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_arr(i32 %x) {
251*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_arr(
252*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 %x, 1
253*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
254*9880d681SAndroid Build Coastguard Worker;
255*9880d681SAndroid Build Coastguard Worker  %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
256*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
257*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 9
258*9880d681SAndroid Build Coastguard Worker  ret i1 %r
259*9880d681SAndroid Build Coastguard Worker}
260*9880d681SAndroid Build Coastguard Worker
261*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_arr_noinbounds(i32 %x) {
262*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_arr_noinbounds(
263*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 %x, 1
264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
265*9880d681SAndroid Build Coastguard Worker;
266*9880d681SAndroid Build Coastguard Worker  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i32 %x, i32 2
267*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
268*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 9
269*9880d681SAndroid Build Coastguard Worker  ret i1 %r
270*9880d681SAndroid Build Coastguard Worker}
271*9880d681SAndroid Build Coastguard Worker
272*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_arr_i16(i16 %x) {
273*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_arr_i16(
274*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ne i16 %x, 1
275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
276*9880d681SAndroid Build Coastguard Worker;
277*9880d681SAndroid Build Coastguard Worker  %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i16 0, i16 %x, i32 2
278*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
279*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 9
280*9880d681SAndroid Build Coastguard Worker  ret i1 %r
281*9880d681SAndroid Build Coastguard Worker}
282*9880d681SAndroid Build Coastguard Worker
283*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_arr_i64(i64 %x) {
284*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_arr_i64(
285*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 %x to i32
286*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[TMP1]], 1
287*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
288*9880d681SAndroid Build Coastguard Worker;
289*9880d681SAndroid Build Coastguard Worker  %p = getelementptr inbounds [4 x %Foo], [4 x %Foo]* @GStructArr, i64 0, i64 %x, i32 2
290*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
291*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 9
292*9880d681SAndroid Build Coastguard Worker  ret i1 %r
293*9880d681SAndroid Build Coastguard Worker}
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_arr_noinbounds_i16(i16 %x) {
296*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_arr_noinbounds_i16(
297*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ne i16 %x, 1
298*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
299*9880d681SAndroid Build Coastguard Worker;
300*9880d681SAndroid Build Coastguard Worker  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i16 %x, i32 2
301*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
302*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 9
303*9880d681SAndroid Build Coastguard Worker  ret i1 %r
304*9880d681SAndroid Build Coastguard Worker}
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Workerdefine i1 @test10_struct_arr_noinbounds_i64(i64 %x) {
307*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10_struct_arr_noinbounds_i64(
308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[TMP1:%.*]] = trunc i64 %x to i32
309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    [[R:%.*]] = icmp ne i32 [[TMP1]], 1
310*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT:    ret i1 [[R]]
311*9880d681SAndroid Build Coastguard Worker;
312*9880d681SAndroid Build Coastguard Worker  %p = getelementptr [4 x %Foo], [4 x %Foo]* @GStructArr, i32 0, i64 %x, i32 2
313*9880d681SAndroid Build Coastguard Worker  %q = load i32, i32* %p
314*9880d681SAndroid Build Coastguard Worker  %r = icmp eq i32 %q, 9
315*9880d681SAndroid Build Coastguard Worker  ret i1 %r
316*9880d681SAndroid Build Coastguard Worker}
317