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