1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -basicaa -gvn -instcombine -S 2>&1 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-p:32:32:32-p1:16:16:16-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128" 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Make sure that basicaa thinks R and r are must aliases. 6*9880d681SAndroid Build Coastguard Workerdefine i32 @test1(i8 * %P) { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker %Q = bitcast i8* %P to {i32, i32}* 9*9880d681SAndroid Build Coastguard Worker %R = getelementptr {i32, i32}, {i32, i32}* %Q, i32 0, i32 1 10*9880d681SAndroid Build Coastguard Worker %S = load i32, i32* %R 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker %q = bitcast i8* %P to {i32, i32}* 13*9880d681SAndroid Build Coastguard Worker %r = getelementptr {i32, i32}, {i32, i32}* %q, i32 0, i32 1 14*9880d681SAndroid Build Coastguard Worker %s = load i32, i32* %r 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Worker %t = sub i32 %S, %s 17*9880d681SAndroid Build Coastguard Worker ret i32 %t 18*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test1( 19*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine i32 @test2(i8 * %P) { 23*9880d681SAndroid Build Coastguard Workerentry: 24*9880d681SAndroid Build Coastguard Worker %Q = bitcast i8* %P to {i32, i32, i32}* 25*9880d681SAndroid Build Coastguard Worker %R = getelementptr {i32, i32, i32}, {i32, i32, i32}* %Q, i32 0, i32 1 26*9880d681SAndroid Build Coastguard Worker %S = load i32, i32* %R 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker %r = getelementptr {i32, i32, i32}, {i32, i32, i32}* %Q, i32 0, i32 2 29*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %r 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker %s = load i32, i32* %R 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker %t = sub i32 %S, %s 34*9880d681SAndroid Build Coastguard Worker ret i32 %t 35*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test2( 36*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker; This was a miscompilation. 41*9880d681SAndroid Build Coastguard Workerdefine i32 @test3({float, {i32, i32, i32}}* %P) { 42*9880d681SAndroid Build Coastguard Workerentry: 43*9880d681SAndroid Build Coastguard Worker %P2 = getelementptr {float, {i32, i32, i32}}, {float, {i32, i32, i32}}* %P, i32 0, i32 1 44*9880d681SAndroid Build Coastguard Worker %R = getelementptr {i32, i32, i32}, {i32, i32, i32}* %P2, i32 0, i32 1 45*9880d681SAndroid Build Coastguard Worker %S = load i32, i32* %R 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker %r = getelementptr {i32, i32, i32}, {i32, i32, i32}* %P2, i32 0, i32 2 48*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %r 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Worker %s = load i32, i32* %R 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker %t = sub i32 %S, %s 53*9880d681SAndroid Build Coastguard Worker ret i32 %t 54*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test3( 55*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker;; This is reduced from the SmallPtrSet constructor. 60*9880d681SAndroid Build Coastguard Worker%SmallPtrSetImpl = type { i8**, i32, i32, i32, [1 x i8*] } 61*9880d681SAndroid Build Coastguard Worker%SmallPtrSet64 = type { %SmallPtrSetImpl, [64 x i8*] } 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Workerdefine i32 @test4(%SmallPtrSet64* %P) { 64*9880d681SAndroid Build Coastguard Workerentry: 65*9880d681SAndroid Build Coastguard Worker %tmp2 = getelementptr inbounds %SmallPtrSet64, %SmallPtrSet64* %P, i64 0, i32 0, i32 1 66*9880d681SAndroid Build Coastguard Worker store i32 64, i32* %tmp2, align 8 67*9880d681SAndroid Build Coastguard Worker %tmp3 = getelementptr inbounds %SmallPtrSet64, %SmallPtrSet64* %P, i64 0, i32 0, i32 4, i64 64 68*9880d681SAndroid Build Coastguard Worker store i8* null, i8** %tmp3, align 8 69*9880d681SAndroid Build Coastguard Worker %tmp4 = load i32, i32* %tmp2, align 8 70*9880d681SAndroid Build Coastguard Worker ret i32 %tmp4 71*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test4( 72*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 64 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker; P[i] != p[i+1] 76*9880d681SAndroid Build Coastguard Workerdefine i32 @test5(i32* %p, i64 %i) { 77*9880d681SAndroid Build Coastguard Worker %pi = getelementptr i32, i32* %p, i64 %i 78*9880d681SAndroid Build Coastguard Worker %i.next = add i64 %i, 1 79*9880d681SAndroid Build Coastguard Worker %pi.next = getelementptr i32, i32* %p, i64 %i.next 80*9880d681SAndroid Build Coastguard Worker %x = load i32, i32* %pi 81*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %pi.next 82*9880d681SAndroid Build Coastguard Worker %y = load i32, i32* %pi 83*9880d681SAndroid Build Coastguard Worker %z = sub i32 %x, %y 84*9880d681SAndroid Build Coastguard Worker ret i32 %z 85*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5( 86*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 87*9880d681SAndroid Build Coastguard Worker} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Workerdefine i32 @test5_as1_smaller_size(i32 addrspace(1)* %p, i8 %i) { 90*9880d681SAndroid Build Coastguard Worker %pi = getelementptr i32, i32 addrspace(1)* %p, i8 %i 91*9880d681SAndroid Build Coastguard Worker %i.next = add i8 %i, 1 92*9880d681SAndroid Build Coastguard Worker %pi.next = getelementptr i32, i32 addrspace(1)* %p, i8 %i.next 93*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %pi 94*9880d681SAndroid Build Coastguard Worker store i32 42, i32 addrspace(1)* %pi.next 95*9880d681SAndroid Build Coastguard Worker %y = load i32, i32 addrspace(1)* %pi 96*9880d681SAndroid Build Coastguard Worker %z = sub i32 %x, %y 97*9880d681SAndroid Build Coastguard Worker ret i32 %z 98*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5_as1_smaller_size( 99*9880d681SAndroid Build Coastguard Worker; CHECK: sext 100*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 101*9880d681SAndroid Build Coastguard Worker} 102*9880d681SAndroid Build Coastguard Worker 103*9880d681SAndroid Build Coastguard Workerdefine i32 @test5_as1_same_size(i32 addrspace(1)* %p, i16 %i) { 104*9880d681SAndroid Build Coastguard Worker %pi = getelementptr i32, i32 addrspace(1)* %p, i16 %i 105*9880d681SAndroid Build Coastguard Worker %i.next = add i16 %i, 1 106*9880d681SAndroid Build Coastguard Worker %pi.next = getelementptr i32, i32 addrspace(1)* %p, i16 %i.next 107*9880d681SAndroid Build Coastguard Worker %x = load i32, i32 addrspace(1)* %pi 108*9880d681SAndroid Build Coastguard Worker store i32 42, i32 addrspace(1)* %pi.next 109*9880d681SAndroid Build Coastguard Worker %y = load i32, i32 addrspace(1)* %pi 110*9880d681SAndroid Build Coastguard Worker %z = sub i32 %x, %y 111*9880d681SAndroid Build Coastguard Worker ret i32 %z 112*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test5_as1_same_size( 113*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 114*9880d681SAndroid Build Coastguard Worker} 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Worker; P[i] != p[(i*4)|1] 117*9880d681SAndroid Build Coastguard Workerdefine i32 @test6(i32* %p, i64 %i1) { 118*9880d681SAndroid Build Coastguard Worker %i = shl i64 %i1, 2 119*9880d681SAndroid Build Coastguard Worker %pi = getelementptr i32, i32* %p, i64 %i 120*9880d681SAndroid Build Coastguard Worker %i.next = or i64 %i, 1 121*9880d681SAndroid Build Coastguard Worker %pi.next = getelementptr i32, i32* %p, i64 %i.next 122*9880d681SAndroid Build Coastguard Worker %x = load i32, i32* %pi 123*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %pi.next 124*9880d681SAndroid Build Coastguard Worker %y = load i32, i32* %pi 125*9880d681SAndroid Build Coastguard Worker %z = sub i32 %x, %y 126*9880d681SAndroid Build Coastguard Worker ret i32 %z 127*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test6( 128*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 129*9880d681SAndroid Build Coastguard Worker} 130*9880d681SAndroid Build Coastguard Worker 131*9880d681SAndroid Build Coastguard Worker; P[1] != P[i*4] 132*9880d681SAndroid Build Coastguard Workerdefine i32 @test7(i32* %p, i64 %i) { 133*9880d681SAndroid Build Coastguard Worker %pi = getelementptr i32, i32* %p, i64 1 134*9880d681SAndroid Build Coastguard Worker %i.next = shl i64 %i, 2 135*9880d681SAndroid Build Coastguard Worker %pi.next = getelementptr i32, i32* %p, i64 %i.next 136*9880d681SAndroid Build Coastguard Worker %x = load i32, i32* %pi 137*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %pi.next 138*9880d681SAndroid Build Coastguard Worker %y = load i32, i32* %pi 139*9880d681SAndroid Build Coastguard Worker %z = sub i32 %x, %y 140*9880d681SAndroid Build Coastguard Worker ret i32 %z 141*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test7( 142*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 143*9880d681SAndroid Build Coastguard Worker} 144*9880d681SAndroid Build Coastguard Worker 145*9880d681SAndroid Build Coastguard Worker; P[zext(i)] != p[zext(i+1)] 146*9880d681SAndroid Build Coastguard Worker; PR1143 147*9880d681SAndroid Build Coastguard Workerdefine i32 @test8(i32* %p, i16 %i) { 148*9880d681SAndroid Build Coastguard Worker %i1 = zext i16 %i to i32 149*9880d681SAndroid Build Coastguard Worker %pi = getelementptr i32, i32* %p, i32 %i1 150*9880d681SAndroid Build Coastguard Worker %i.next = add i16 %i, 1 151*9880d681SAndroid Build Coastguard Worker %i.next2 = zext i16 %i.next to i32 152*9880d681SAndroid Build Coastguard Worker %pi.next = getelementptr i32, i32* %p, i32 %i.next2 153*9880d681SAndroid Build Coastguard Worker %x = load i32, i32* %pi 154*9880d681SAndroid Build Coastguard Worker store i32 42, i32* %pi.next 155*9880d681SAndroid Build Coastguard Worker %y = load i32, i32* %pi 156*9880d681SAndroid Build Coastguard Worker %z = sub i32 %x, %y 157*9880d681SAndroid Build Coastguard Worker ret i32 %z 158*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test8( 159*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 0 160*9880d681SAndroid Build Coastguard Worker} 161*9880d681SAndroid Build Coastguard Worker 162*9880d681SAndroid Build Coastguard Workerdefine i8 @test9([4 x i8] *%P, i32 %i, i32 %j) { 163*9880d681SAndroid Build Coastguard Worker %i2 = shl i32 %i, 2 164*9880d681SAndroid Build Coastguard Worker %i3 = add i32 %i2, 1 165*9880d681SAndroid Build Coastguard Worker ; P2 = P + 1 + 4*i 166*9880d681SAndroid Build Coastguard Worker %P2 = getelementptr [4 x i8], [4 x i8] *%P, i32 0, i32 %i3 167*9880d681SAndroid Build Coastguard Worker 168*9880d681SAndroid Build Coastguard Worker %j2 = shl i32 %j, 2 169*9880d681SAndroid Build Coastguard Worker 170*9880d681SAndroid Build Coastguard Worker ; P4 = P + 4*j 171*9880d681SAndroid Build Coastguard Worker %P4 = getelementptr [4 x i8], [4 x i8]* %P, i32 0, i32 %j2 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Worker %x = load i8, i8* %P2 174*9880d681SAndroid Build Coastguard Worker store i8 42, i8* %P4 175*9880d681SAndroid Build Coastguard Worker %y = load i8, i8* %P2 176*9880d681SAndroid Build Coastguard Worker %z = sub i8 %x, %y 177*9880d681SAndroid Build Coastguard Worker ret i8 %z 178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test9( 179*9880d681SAndroid Build Coastguard Worker; CHECK: ret i8 0 180*9880d681SAndroid Build Coastguard Worker} 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Workerdefine i8 @test10([4 x i8] *%P, i32 %i) { 183*9880d681SAndroid Build Coastguard Worker %i2 = shl i32 %i, 2 184*9880d681SAndroid Build Coastguard Worker %i3 = add i32 %i2, 4 185*9880d681SAndroid Build Coastguard Worker ; P2 = P + 4 + 4*i 186*9880d681SAndroid Build Coastguard Worker %P2 = getelementptr [4 x i8], [4 x i8] *%P, i32 0, i32 %i3 187*9880d681SAndroid Build Coastguard Worker 188*9880d681SAndroid Build Coastguard Worker ; P4 = P + 4*i 189*9880d681SAndroid Build Coastguard Worker %P4 = getelementptr [4 x i8], [4 x i8]* %P, i32 0, i32 %i2 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker %x = load i8, i8* %P2 192*9880d681SAndroid Build Coastguard Worker store i8 42, i8* %P4 193*9880d681SAndroid Build Coastguard Worker %y = load i8, i8* %P2 194*9880d681SAndroid Build Coastguard Worker %z = sub i8 %x, %y 195*9880d681SAndroid Build Coastguard Worker ret i8 %z 196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test10( 197*9880d681SAndroid Build Coastguard Worker; CHECK: ret i8 0 198*9880d681SAndroid Build Coastguard Worker} 199*9880d681SAndroid Build Coastguard Worker 200*9880d681SAndroid Build Coastguard Worker; (This was a miscompilation.) 201*9880d681SAndroid Build Coastguard Workerdefine float @test11(i32 %indvar, [4 x [2 x float]]* %q) nounwind ssp { 202*9880d681SAndroid Build Coastguard Worker %tmp = mul i32 %indvar, -1 203*9880d681SAndroid Build Coastguard Worker %dec = add i32 %tmp, 3 204*9880d681SAndroid Build Coastguard Worker %scevgep = getelementptr [4 x [2 x float]], [4 x [2 x float]]* %q, i32 0, i32 %dec 205*9880d681SAndroid Build Coastguard Worker %scevgep35 = bitcast [2 x float]* %scevgep to i64* 206*9880d681SAndroid Build Coastguard Worker %arrayidx28 = getelementptr inbounds [4 x [2 x float]], [4 x [2 x float]]* %q, i32 0, i32 0 207*9880d681SAndroid Build Coastguard Worker %y29 = getelementptr inbounds [2 x float], [2 x float]* %arrayidx28, i32 0, i32 1 208*9880d681SAndroid Build Coastguard Worker store float 1.0, float* %y29, align 4 209*9880d681SAndroid Build Coastguard Worker store i64 0, i64* %scevgep35, align 4 210*9880d681SAndroid Build Coastguard Worker %tmp30 = load float, float* %y29, align 4 211*9880d681SAndroid Build Coastguard Worker ret float %tmp30 212*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test11( 213*9880d681SAndroid Build Coastguard Worker; CHECK: ret float %tmp30 214*9880d681SAndroid Build Coastguard Worker} 215*9880d681SAndroid Build Coastguard Worker 216*9880d681SAndroid Build Coastguard Worker; (This was a miscompilation.) 217*9880d681SAndroid Build Coastguard Workerdefine i32 @test12(i32 %x, i32 %y, i8* %p) nounwind { 218*9880d681SAndroid Build Coastguard Worker %a = bitcast i8* %p to [13 x i8]* 219*9880d681SAndroid Build Coastguard Worker %b = getelementptr [13 x i8], [13 x i8]* %a, i32 %x 220*9880d681SAndroid Build Coastguard Worker %c = bitcast [13 x i8]* %b to [15 x i8]* 221*9880d681SAndroid Build Coastguard Worker %d = getelementptr [15 x i8], [15 x i8]* %c, i32 %y, i32 8 222*9880d681SAndroid Build Coastguard Worker %castd = bitcast i8* %d to i32* 223*9880d681SAndroid Build Coastguard Worker %castp = bitcast i8* %p to i32* 224*9880d681SAndroid Build Coastguard Worker store i32 1, i32* %castp 225*9880d681SAndroid Build Coastguard Worker store i32 0, i32* %castd 226*9880d681SAndroid Build Coastguard Worker %r = load i32, i32* %castp 227*9880d681SAndroid Build Coastguard Worker ret i32 %r 228*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test12( 229*9880d681SAndroid Build Coastguard Worker; CHECK: ret i32 %r 230*9880d681SAndroid Build Coastguard Worker} 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Worker@P = internal global i32 715827882, align 4 233*9880d681SAndroid Build Coastguard Worker@Q = internal global i32 715827883, align 4 234*9880d681SAndroid Build Coastguard Worker@.str = private unnamed_addr constant [7 x i8] c"%u %u\0A\00", align 1 235*9880d681SAndroid Build Coastguard Worker 236*9880d681SAndroid Build Coastguard Worker; Make sure we recognize that u[0] and u[Global + Cst] may alias 237*9880d681SAndroid Build Coastguard Worker; when the addition has wrapping semantic. 238*9880d681SAndroid Build Coastguard Worker; PR24468. 239*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @test13( 240*9880d681SAndroid Build Coastguard Worker; Make sure the stores appear before the related loads. 241*9880d681SAndroid Build Coastguard Worker; CHECK: store i8 42, 242*9880d681SAndroid Build Coastguard Worker; CHECK: store i8 99, 243*9880d681SAndroid Build Coastguard Worker; Find the loads and make sure they are used in the arguments to the printf. 244*9880d681SAndroid Build Coastguard Worker; CHECK: [[T0ADDR:%[a-zA-Z0-9_]+]] = getelementptr inbounds [3 x i8], [3 x i8]* %t, i32 0, i32 0 245*9880d681SAndroid Build Coastguard Worker; CHECK: [[T0:%[a-zA-Z0-9_]+]] = load i8, i8* [[T0ADDR]], align 1 246*9880d681SAndroid Build Coastguard Worker; CHECK: [[T0ARG:%[a-zA-Z0-9_]+]] = zext i8 [[T0]] to i32 247*9880d681SAndroid Build Coastguard Worker; CHECK: [[U0ADDR:%[a-zA-Z0-9_]+]] = getelementptr inbounds [3 x i8], [3 x i8]* %u, i32 0, i32 0 248*9880d681SAndroid Build Coastguard Worker; CHECK: [[U0:%[a-zA-Z0-9_]+]] = load i8, i8* [[U0ADDR]], align 1 249*9880d681SAndroid Build Coastguard Worker; CHECK: [[U0ARG:%[a-zA-Z0-9_]+]] = zext i8 [[U0]] to i32 250*9880d681SAndroid Build Coastguard Worker; CHECK: call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i32 0, i32 0), i32 [[T0ARG]], i32 [[U0ARG]]) 251*9880d681SAndroid Build Coastguard Worker; CHECK: ret 252*9880d681SAndroid Build Coastguard Workerdefine void @test13() { 253*9880d681SAndroid Build Coastguard Workerentry: 254*9880d681SAndroid Build Coastguard Worker %t = alloca [3 x i8], align 1 255*9880d681SAndroid Build Coastguard Worker %u = alloca [3 x i8], align 1 256*9880d681SAndroid Build Coastguard Worker %tmp = load i32, i32* @P, align 4 257*9880d681SAndroid Build Coastguard Worker %tmp1 = mul i32 %tmp, 3 258*9880d681SAndroid Build Coastguard Worker %mul = add i32 %tmp1, -2147483646 259*9880d681SAndroid Build Coastguard Worker %idxprom = zext i32 %mul to i64 260*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [3 x i8], [3 x i8]* %t, i64 0, i64 %idxprom 261*9880d681SAndroid Build Coastguard Worker store i8 42, i8* %arrayidx, align 1 262*9880d681SAndroid Build Coastguard Worker %tmp2 = load i32, i32* @Q, align 4 263*9880d681SAndroid Build Coastguard Worker %tmp3 = mul i32 %tmp2, 3 264*9880d681SAndroid Build Coastguard Worker %mul2 = add i32 %tmp3, 2147483647 265*9880d681SAndroid Build Coastguard Worker %idxprom3 = zext i32 %mul2 to i64 266*9880d681SAndroid Build Coastguard Worker %arrayidx4 = getelementptr inbounds [3 x i8], [3 x i8]* %u, i64 0, i64 %idxprom3 267*9880d681SAndroid Build Coastguard Worker store i8 99, i8* %arrayidx4, align 1 268*9880d681SAndroid Build Coastguard Worker %arrayidx5 = getelementptr inbounds [3 x i8], [3 x i8]* %t, i64 0, i64 0 269*9880d681SAndroid Build Coastguard Worker %tmp4 = load i8, i8* %arrayidx5, align 1 270*9880d681SAndroid Build Coastguard Worker %conv = zext i8 %tmp4 to i32 271*9880d681SAndroid Build Coastguard Worker %arrayidx6 = getelementptr inbounds [3 x i8], [3 x i8]* %u, i64 0, i64 0 272*9880d681SAndroid Build Coastguard Worker %tmp5 = load i8, i8* %arrayidx6, align 1 273*9880d681SAndroid Build Coastguard Worker %conv7 = zext i8 %tmp5 to i32 274*9880d681SAndroid Build Coastguard Worker %call = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i32 %conv, i32 %conv7) 275*9880d681SAndroid Build Coastguard Worker ret void 276*9880d681SAndroid Build Coastguard Worker} 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Workerdeclare i32 @printf(i8*, ...) 279