1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -asm-verbose=false -disable-wasm-fallthrough-return-opt | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; Test folding constant offsets and symbols into load and store addresses under 4*9880d681SAndroid Build Coastguard Worker; a variety of circumstances. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workertarget datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128" 7*9880d681SAndroid Build Coastguard Workertarget triple = "wasm32-unknown-unknown" 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker@g = external global [0 x i32], align 4 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test0: 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}} 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push1=, g+40($pop0){{$}} 15*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop1{{$}} 16*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test0() { 17*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 18*9880d681SAndroid Build Coastguard Worker ret i32 %t 19*9880d681SAndroid Build Coastguard Worker} 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test0_noinbounds: 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}} 24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push1=, g+40($pop0){{$}} 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop1{{$}} 26*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test0_noinbounds() { 27*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* getelementptr ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 28*9880d681SAndroid Build Coastguard Worker ret i32 %t 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test1: 32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} 37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 38*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test1(i32 %n) { 39*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, 10 40*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 41*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %arrayidx, align 4 42*9880d681SAndroid Build Coastguard Worker ret i32 %t 43*9880d681SAndroid Build Coastguard Worker} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test2: 46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 52*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test2(i32 %n) { 53*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 10, %n 54*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 55*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %arrayidx, align 4 56*9880d681SAndroid Build Coastguard Worker ret i32 %t 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test3: 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 64*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} 65*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 66*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test3(i32 %n) { 67*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n 68*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 69*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr1, align 4 70*9880d681SAndroid Build Coastguard Worker ret i32 %t 71*9880d681SAndroid Build Coastguard Worker} 72*9880d681SAndroid Build Coastguard Worker 73*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test4: 74*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 75*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 77*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 78*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 80*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test4(i32 %n) { 81*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n 82*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr, align 4 83*9880d681SAndroid Build Coastguard Worker ret i32 %t 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test5: 87*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 91*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} 92*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 93*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test5(i32 %n) { 94*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n 95*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr, align 4 96*9880d681SAndroid Build Coastguard Worker ret i32 %t 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test6: 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 104*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} 105*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 106*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test6(i32 %n) { 107*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, 10 108*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 109*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr, align 4 110*9880d681SAndroid Build Coastguard Worker ret i32 %t 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test7: 114*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 120*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test7(i32 %n) { 121*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n 122*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 123*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr1, align 4 124*9880d681SAndroid Build Coastguard Worker ret i32 %t 125*9880d681SAndroid Build Coastguard Worker} 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test8: 128*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 129*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 132*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, g+40($pop1){{$}} 133*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 134*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test8(i32 %n) { 135*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 10, %n 136*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 137*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr, align 4 138*9880d681SAndroid Build Coastguard Worker ret i32 %t 139*9880d681SAndroid Build Coastguard Worker} 140*9880d681SAndroid Build Coastguard Worker 141*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test9: 142*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 143*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}} 144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push1=, g-40($pop0){{$}} 145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop1{{$}} 146*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test9() { 147*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 1073741814), align 4 148*9880d681SAndroid Build Coastguard Worker ret i32 %t 149*9880d681SAndroid Build Coastguard Worker} 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test10: 152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 153*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 154*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push2=, g-40{{$}} 157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push3=, $pop1, $pop2{{$}} 158*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push4=, 0($pop3){{$}} 159*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop4{{$}} 160*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test10(i32 %n) { 161*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, -10 162*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 163*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %arrayidx, align 4 164*9880d681SAndroid Build Coastguard Worker ret i32 %t 165*9880d681SAndroid Build Coastguard Worker} 166*9880d681SAndroid Build Coastguard Worker 167*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test11: 168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 170*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push0=, 40($0){{$}} 171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop0{{$}} 172*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test11(i32* %p) { 173*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 10 174*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %arrayidx, align 4 175*9880d681SAndroid Build Coastguard Worker ret i32 %t 176*9880d681SAndroid Build Coastguard Worker} 177*9880d681SAndroid Build Coastguard Worker 178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test11_noinbounds: 179*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 180*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 181*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 40{{$}} 182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} 183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, 0($pop1){{$}} 184*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 185*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test11_noinbounds(i32* %p) { 186*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr i32, i32* %p, i32 10 187*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %arrayidx, align 4 188*9880d681SAndroid Build Coastguard Worker ret i32 %t 189*9880d681SAndroid Build Coastguard Worker} 190*9880d681SAndroid Build Coastguard Worker 191*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test12: 192*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 193*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 196*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} 200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop5{{$}} 201*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test12(i32* %p, i32 %n) { 202*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, 10 203*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add 204*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %arrayidx, align 4 205*9880d681SAndroid Build Coastguard Worker ret i32 %t 206*9880d681SAndroid Build Coastguard Worker} 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test13: 209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 213*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 214*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 215*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 216*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} 217*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop5{{$}} 218*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test13(i32* %p, i32 %n) { 219*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 10, %n 220*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add 221*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %arrayidx, align 4 222*9880d681SAndroid Build Coastguard Worker ret i32 %t 223*9880d681SAndroid Build Coastguard Worker} 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test14: 226*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 227*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 228*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 229*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push3=, 40($pop2){{$}} 232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop3{{$}} 233*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test14(i32* %p, i32 %n) { 234*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n 235*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 236*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr1, align 4 237*9880d681SAndroid Build Coastguard Worker ret i32 %t 238*9880d681SAndroid Build Coastguard Worker} 239*9880d681SAndroid Build Coastguard Worker 240*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test15: 241*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 242*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 243*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 247*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 248*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} 249*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop5{{$}} 250*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test15(i32* %p, i32 %n) { 251*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 10 252*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n 253*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr1, align 4 254*9880d681SAndroid Build Coastguard Worker ret i32 %t 255*9880d681SAndroid Build Coastguard Worker} 256*9880d681SAndroid Build Coastguard Worker 257*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test16: 258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 259*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 260*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 261*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 262*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 263*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 264*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 265*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} 266*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop5{{$}} 267*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test16(i32* %p, i32 %n) { 268*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 10 269*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n 270*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr1, align 4 271*9880d681SAndroid Build Coastguard Worker ret i32 %t 272*9880d681SAndroid Build Coastguard Worker} 273*9880d681SAndroid Build Coastguard Worker 274*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test17: 275*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 276*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 277*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 278*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 279*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 282*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} 283*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop5{{$}} 284*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test17(i32* %p, i32 %n) { 285*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, 10 286*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add 287*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr, align 4 288*9880d681SAndroid Build Coastguard Worker ret i32 %t 289*9880d681SAndroid Build Coastguard Worker} 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test18: 292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 295*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 296*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 297*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push3=, 40($pop2){{$}} 298*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop3{{$}} 299*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test18(i32* %p, i32 %n) { 300*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n 301*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 302*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr1, align 4 303*9880d681SAndroid Build Coastguard Worker ret i32 %t 304*9880d681SAndroid Build Coastguard Worker} 305*9880d681SAndroid Build Coastguard Worker 306*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test19: 307*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 308*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 309*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 310*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 311*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 312*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 313*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 314*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} 315*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop5{{$}} 316*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test19(i32* %p, i32 %n) { 317*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 10, %n 318*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add 319*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %add.ptr, align 4 320*9880d681SAndroid Build Coastguard Worker ret i32 %t 321*9880d681SAndroid Build Coastguard Worker} 322*9880d681SAndroid Build Coastguard Worker 323*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test20: 324*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 325*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 326*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, -40{{$}} 327*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} 328*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push2=, 0($pop1){{$}} 329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop2{{$}} 330*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test20(i32* %p) { 331*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 -10 332*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %arrayidx, align 4 333*9880d681SAndroid Build Coastguard Worker ret i32 %t 334*9880d681SAndroid Build Coastguard Worker} 335*9880d681SAndroid Build Coastguard Worker 336*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: load_test21: 337*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 338*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: result i32{{$}} 339*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 340*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 341*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 342*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, -40{{$}} 343*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 344*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.load $push5=, 0($pop4){{$}} 345*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return $pop5{{$}} 346*9880d681SAndroid Build Coastguard Workerdefine i32 @load_test21(i32* %p, i32 %n) { 347*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, -10 348*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add 349*9880d681SAndroid Build Coastguard Worker %t = load i32, i32* %arrayidx, align 4 350*9880d681SAndroid Build Coastguard Worker ret i32 %t 351*9880d681SAndroid Build Coastguard Worker} 352*9880d681SAndroid Build Coastguard Worker 353*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test0: 354*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 355*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}} 356*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop0), $0{{$}} 357*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 358*9880d681SAndroid Build Coastguard Workerdefine void @store_test0(i32 %i) { 359*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 360*9880d681SAndroid Build Coastguard Worker ret void 361*9880d681SAndroid Build Coastguard Worker} 362*9880d681SAndroid Build Coastguard Worker 363*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test0_noinbounds: 364*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 365*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}} 366*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop0), $0{{$}} 367*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 368*9880d681SAndroid Build Coastguard Workerdefine void @store_test0_noinbounds(i32 %i) { 369*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* getelementptr ([0 x i32], [0 x i32]* @g, i32 0, i32 10), align 4 370*9880d681SAndroid Build Coastguard Worker ret void 371*9880d681SAndroid Build Coastguard Worker} 372*9880d681SAndroid Build Coastguard Worker 373*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test1: 374*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 375*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 376*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 377*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}} 378*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 379*9880d681SAndroid Build Coastguard Workerdefine void @store_test1(i32 %n, i32 %i) { 380*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, 10 381*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 382*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %arrayidx, align 4 383*9880d681SAndroid Build Coastguard Worker ret void 384*9880d681SAndroid Build Coastguard Worker} 385*9880d681SAndroid Build Coastguard Worker 386*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test2: 387*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 388*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 389*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 390*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}} 391*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 392*9880d681SAndroid Build Coastguard Workerdefine void @store_test2(i32 %n, i32 %i) { 393*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 10, %n 394*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 395*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %arrayidx, align 4 396*9880d681SAndroid Build Coastguard Worker ret void 397*9880d681SAndroid Build Coastguard Worker} 398*9880d681SAndroid Build Coastguard Worker 399*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test3: 400*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 401*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 402*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 403*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}} 404*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 405*9880d681SAndroid Build Coastguard Workerdefine void @store_test3(i32 %n, i32 %i) { 406*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n 407*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 408*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr1, align 4 409*9880d681SAndroid Build Coastguard Worker ret void 410*9880d681SAndroid Build Coastguard Worker} 411*9880d681SAndroid Build Coastguard Worker 412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test4: 413*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 414*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 415*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 416*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}} 417*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 418*9880d681SAndroid Build Coastguard Workerdefine void @store_test4(i32 %n, i32 %i) { 419*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n 420*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr, align 4 421*9880d681SAndroid Build Coastguard Worker ret void 422*9880d681SAndroid Build Coastguard Worker} 423*9880d681SAndroid Build Coastguard Worker 424*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test5: 425*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 426*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 427*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 428*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}} 429*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 430*9880d681SAndroid Build Coastguard Workerdefine void @store_test5(i32 %n, i32 %i) { 431*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 10), i32 %n 432*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr, align 4 433*9880d681SAndroid Build Coastguard Worker ret void 434*9880d681SAndroid Build Coastguard Worker} 435*9880d681SAndroid Build Coastguard Worker 436*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test6: 437*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 438*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 439*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 440*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}} 441*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 442*9880d681SAndroid Build Coastguard Workerdefine void @store_test6(i32 %n, i32 %i) { 443*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, 10 444*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 445*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr, align 4 446*9880d681SAndroid Build Coastguard Worker ret void 447*9880d681SAndroid Build Coastguard Worker} 448*9880d681SAndroid Build Coastguard Worker 449*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test7: 450*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 451*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 452*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 453*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}} 454*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 455*9880d681SAndroid Build Coastguard Workerdefine void @store_test7(i32 %n, i32 %i) { 456*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %n 457*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 458*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr1, align 4 459*9880d681SAndroid Build Coastguard Worker ret void 460*9880d681SAndroid Build Coastguard Worker} 461*9880d681SAndroid Build Coastguard Worker 462*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test8: 463*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 464*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 465*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 466*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g+40($pop1), $1{{$}} 467*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 468*9880d681SAndroid Build Coastguard Workerdefine void @store_test8(i32 %n, i32 %i) { 469*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 10, %n 470*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 471*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr, align 4 472*9880d681SAndroid Build Coastguard Worker ret void 473*9880d681SAndroid Build Coastguard Worker} 474*9880d681SAndroid Build Coastguard Worker 475*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test9: 476*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32{{$}} 477*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 0{{$}} 478*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, g-40($pop0), $0{{$}} 479*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 480*9880d681SAndroid Build Coastguard Workerdefine void @store_test9(i32 %i) { 481*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* getelementptr inbounds ([0 x i32], [0 x i32]* @g, i32 0, i32 1073741814), align 4 482*9880d681SAndroid Build Coastguard Worker ret void 483*9880d681SAndroid Build Coastguard Worker} 484*9880d681SAndroid Build Coastguard Worker 485*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test10: 486*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 487*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 488*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $0, $pop0{{$}} 489*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push2=, g-40{{$}} 490*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push3=, $pop1, $pop2{{$}} 491*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop3), $1{{$}} 492*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 493*9880d681SAndroid Build Coastguard Workerdefine void @store_test10(i32 %n, i32 %i) { 494*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, -10 495*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds [0 x i32], [0 x i32]* @g, i32 0, i32 %add 496*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %arrayidx, align 4 497*9880d681SAndroid Build Coastguard Worker ret void 498*9880d681SAndroid Build Coastguard Worker} 499*9880d681SAndroid Build Coastguard Worker 500*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test11: 501*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 502*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 40($0), $1{{$}} 503*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 504*9880d681SAndroid Build Coastguard Workerdefine void @store_test11(i32* %p, i32 %i) { 505*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 10 506*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %arrayidx, align 4 507*9880d681SAndroid Build Coastguard Worker ret void 508*9880d681SAndroid Build Coastguard Worker} 509*9880d681SAndroid Build Coastguard Worker 510*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test11_noinbounds: 511*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 512*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 40{{$}} 513*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} 514*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop1), $1{{$}} 515*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 516*9880d681SAndroid Build Coastguard Workerdefine void @store_test11_noinbounds(i32* %p, i32 %i) { 517*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr i32, i32* %p, i32 10 518*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %arrayidx, align 4 519*9880d681SAndroid Build Coastguard Worker ret void 520*9880d681SAndroid Build Coastguard Worker} 521*9880d681SAndroid Build Coastguard Worker 522*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test12: 523*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32, i32{{$}} 524*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 525*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 526*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 527*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 528*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 529*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}} 530*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 531*9880d681SAndroid Build Coastguard Workerdefine void @store_test12(i32* %p, i32 %n, i32 %i) { 532*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, 10 533*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add 534*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %arrayidx, align 4 535*9880d681SAndroid Build Coastguard Worker ret void 536*9880d681SAndroid Build Coastguard Worker} 537*9880d681SAndroid Build Coastguard Worker 538*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test13: 539*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32, i32{{$}} 540*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 541*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 542*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 543*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 544*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 545*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}} 546*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 547*9880d681SAndroid Build Coastguard Workerdefine void @store_test13(i32* %p, i32 %n, i32 %i) { 548*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 10, %n 549*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add 550*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %arrayidx, align 4 551*9880d681SAndroid Build Coastguard Worker ret void 552*9880d681SAndroid Build Coastguard Worker} 553*9880d681SAndroid Build Coastguard Worker 554*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test14: 555*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32, i32{{$}} 556*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 557*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 558*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 559*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 40($pop2), $2{{$}} 560*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 561*9880d681SAndroid Build Coastguard Workerdefine void @store_test14(i32* %p, i32 %n, i32 %i) { 562*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n 563*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 564*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr1, align 4 565*9880d681SAndroid Build Coastguard Worker ret void 566*9880d681SAndroid Build Coastguard Worker} 567*9880d681SAndroid Build Coastguard Worker 568*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test15: 569*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32, i32{{$}} 570*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 571*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 572*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 573*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 574*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 575*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}} 576*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 577*9880d681SAndroid Build Coastguard Workerdefine void @store_test15(i32* %p, i32 %n, i32 %i) { 578*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 10 579*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n 580*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr1, align 4 581*9880d681SAndroid Build Coastguard Worker ret void 582*9880d681SAndroid Build Coastguard Worker} 583*9880d681SAndroid Build Coastguard Worker 584*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test16: 585*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32, i32{{$}} 586*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 587*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 588*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 589*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 590*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 591*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}} 592*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 593*9880d681SAndroid Build Coastguard Workerdefine void @store_test16(i32* %p, i32 %n, i32 %i) { 594*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 10 595*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 %n 596*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr1, align 4 597*9880d681SAndroid Build Coastguard Worker ret void 598*9880d681SAndroid Build Coastguard Worker} 599*9880d681SAndroid Build Coastguard Worker 600*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test17: 601*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32, i32{{$}} 602*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 603*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 604*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 605*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 606*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 607*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}} 608*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 609*9880d681SAndroid Build Coastguard Workerdefine void @store_test17(i32* %p, i32 %n, i32 %i) { 610*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, 10 611*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add 612*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr, align 4 613*9880d681SAndroid Build Coastguard Worker ret void 614*9880d681SAndroid Build Coastguard Worker} 615*9880d681SAndroid Build Coastguard Worker 616*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test18: 617*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32, i32{{$}} 618*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 619*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 620*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 621*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 40($pop2), $2{{$}} 622*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 623*9880d681SAndroid Build Coastguard Workerdefine void @store_test18(i32* %p, i32 %n, i32 %i) { 624*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 %n 625*9880d681SAndroid Build Coastguard Worker %add.ptr1 = getelementptr inbounds i32, i32* %add.ptr, i32 10 626*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr1, align 4 627*9880d681SAndroid Build Coastguard Worker ret void 628*9880d681SAndroid Build Coastguard Worker} 629*9880d681SAndroid Build Coastguard Worker 630*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test19: 631*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32, i32{{$}} 632*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 633*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 634*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 635*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, 40{{$}} 636*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 637*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}} 638*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 639*9880d681SAndroid Build Coastguard Workerdefine void @store_test19(i32* %p, i32 %n, i32 %i) { 640*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 10, %n 641*9880d681SAndroid Build Coastguard Worker %add.ptr = getelementptr inbounds i32, i32* %p, i32 %add 642*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %add.ptr, align 4 643*9880d681SAndroid Build Coastguard Worker ret void 644*9880d681SAndroid Build Coastguard Worker} 645*9880d681SAndroid Build Coastguard Worker 646*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test20: 647*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32{{$}} 648*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, -40{{$}} 649*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push1=, $0, $pop0{{$}} 650*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop1), $1{{$}} 651*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 652*9880d681SAndroid Build Coastguard Workerdefine void @store_test20(i32* %p, i32 %i) { 653*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 -10 654*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %arrayidx, align 4 655*9880d681SAndroid Build Coastguard Worker ret void 656*9880d681SAndroid Build Coastguard Worker} 657*9880d681SAndroid Build Coastguard Worker 658*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: store_test21: 659*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: param i32, i32, i32{{$}} 660*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push0=, 2{{$}} 661*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.shl $push1=, $1, $pop0{{$}} 662*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push2=, $0, $pop1{{$}} 663*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.const $push3=, -40{{$}} 664*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.add $push4=, $pop2, $pop3{{$}} 665*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: i32.store $drop=, 0($pop4), $2{{$}} 666*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: return{{$}} 667*9880d681SAndroid Build Coastguard Workerdefine void @store_test21(i32* %p, i32 %n, i32 %i) { 668*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, -10 669*9880d681SAndroid Build Coastguard Worker %arrayidx = getelementptr inbounds i32, i32* %p, i32 %add 670*9880d681SAndroid Build Coastguard Worker store i32 %i, i32* %arrayidx, align 4 671*9880d681SAndroid Build Coastguard Worker ret void 672*9880d681SAndroid Build Coastguard Worker} 673