1*9880d681SAndroid Build Coastguard Worker; Test the handling of base + 12-bit displacement addresses for large frames, 2*9880d681SAndroid Build Coastguard Worker; in cases where no 20-bit form exists. The tests here assume z10 register 3*9880d681SAndroid Build Coastguard Worker; pressure, without the high words being available. 4*9880d681SAndroid Build Coastguard Worker; 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | \ 6*9880d681SAndroid Build Coastguard Worker; RUN: FileCheck -check-prefix=CHECK-NOFP %s 7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 -disable-fp-elim | \ 8*9880d681SAndroid Build Coastguard Worker; RUN: FileCheck -check-prefix=CHECK-FP %s 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Worker; This file tests what happens when a displacement is converted from 11*9880d681SAndroid Build Coastguard Worker; being relative to the start of a frame object to being relative to 12*9880d681SAndroid Build Coastguard Worker; the frame itself. In some cases the test is only possible if two 13*9880d681SAndroid Build Coastguard Worker; objects are allocated. 14*9880d681SAndroid Build Coastguard Worker; 15*9880d681SAndroid Build Coastguard Worker; Rather than rely on a particular order for those objects, the tests 16*9880d681SAndroid Build Coastguard Worker; instead allocate two objects of the same size and apply the test to 17*9880d681SAndroid Build Coastguard Worker; both of them. For consistency, all tests follow this model, even if 18*9880d681SAndroid Build Coastguard Worker; one object would actually be enough. 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker; First check the highest in-range offset after conversion, which is 4092 21*9880d681SAndroid Build Coastguard Worker; for word-addressing instructions like MVHI. 22*9880d681SAndroid Build Coastguard Worker; 23*9880d681SAndroid Build Coastguard Worker; The last in-range doubleword offset is 4088. Since the frame has two 24*9880d681SAndroid Build Coastguard Worker; emergency spill slots at 160(%r15), the amount that we need to allocate 25*9880d681SAndroid Build Coastguard Worker; in order to put another object at offset 4088 is (4088 - 176) / 4 = 978 26*9880d681SAndroid Build Coastguard Worker; words. 27*9880d681SAndroid Build Coastguard Workerdefine void @f1() { 28*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f1: 29*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 4092(%r15), 42 30*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 31*9880d681SAndroid Build Coastguard Worker; 32*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f1: 33*9880d681SAndroid Build Coastguard Worker; CHECK-FP: mvhi 4092(%r11), 42 34*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 35*9880d681SAndroid Build Coastguard Worker %region1 = alloca [978 x i32], align 8 36*9880d681SAndroid Build Coastguard Worker %region2 = alloca [978 x i32], align 8 37*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [978 x i32], [978 x i32]* %region1, i64 0, i64 1 38*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [978 x i32], [978 x i32]* %region2, i64 0, i64 1 39*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 40*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 41*9880d681SAndroid Build Coastguard Worker ret void 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; Test the first out-of-range offset. We cannot use an index register here. 45*9880d681SAndroid Build Coastguard Workerdefine void @f2() { 46*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f2: 47*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lay %r1, 4096(%r15) 48*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 0(%r1), 42 49*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 50*9880d681SAndroid Build Coastguard Worker; 51*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f2: 52*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lay %r1, 4096(%r11) 53*9880d681SAndroid Build Coastguard Worker; CHECK-FP: mvhi 0(%r1), 42 54*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 55*9880d681SAndroid Build Coastguard Worker %region1 = alloca [978 x i32], align 8 56*9880d681SAndroid Build Coastguard Worker %region2 = alloca [978 x i32], align 8 57*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [978 x i32], [978 x i32]* %region1, i64 0, i64 2 58*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [978 x i32], [978 x i32]* %region2, i64 0, i64 2 59*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 60*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 61*9880d681SAndroid Build Coastguard Worker ret void 62*9880d681SAndroid Build Coastguard Worker} 63*9880d681SAndroid Build Coastguard Worker 64*9880d681SAndroid Build Coastguard Worker; Test the next offset after that. 65*9880d681SAndroid Build Coastguard Workerdefine void @f3() { 66*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f3: 67*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lay %r1, 4096(%r15) 68*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 4(%r1), 42 69*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 70*9880d681SAndroid Build Coastguard Worker; 71*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f3: 72*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lay %r1, 4096(%r11) 73*9880d681SAndroid Build Coastguard Worker; CHECK-FP: mvhi 4(%r1), 42 74*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 75*9880d681SAndroid Build Coastguard Worker %region1 = alloca [978 x i32], align 8 76*9880d681SAndroid Build Coastguard Worker %region2 = alloca [978 x i32], align 8 77*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [978 x i32], [978 x i32]* %region1, i64 0, i64 3 78*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [978 x i32], [978 x i32]* %region2, i64 0, i64 3 79*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 80*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 81*9880d681SAndroid Build Coastguard Worker ret void 82*9880d681SAndroid Build Coastguard Worker} 83*9880d681SAndroid Build Coastguard Worker 84*9880d681SAndroid Build Coastguard Worker; Add 4096 bytes (1024 words) to the size of each object and repeat. 85*9880d681SAndroid Build Coastguard Workerdefine void @f4() { 86*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f4: 87*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lay %r1, 4096(%r15) 88*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 4092(%r1), 42 89*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 90*9880d681SAndroid Build Coastguard Worker; 91*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f4: 92*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lay %r1, 4096(%r11) 93*9880d681SAndroid Build Coastguard Worker; CHECK-FP: mvhi 4092(%r1), 42 94*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 95*9880d681SAndroid Build Coastguard Worker %region1 = alloca [2002 x i32], align 8 96*9880d681SAndroid Build Coastguard Worker %region2 = alloca [2002 x i32], align 8 97*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [2002 x i32], [2002 x i32]* %region1, i64 0, i64 1 98*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [2002 x i32], [2002 x i32]* %region2, i64 0, i64 1 99*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 100*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 101*9880d681SAndroid Build Coastguard Worker ret void 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Worker; ...as above. 105*9880d681SAndroid Build Coastguard Workerdefine void @f5() { 106*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f5: 107*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lay %r1, 8192(%r15) 108*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 0(%r1), 42 109*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 110*9880d681SAndroid Build Coastguard Worker; 111*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f5: 112*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lay %r1, 8192(%r11) 113*9880d681SAndroid Build Coastguard Worker; CHECK-FP: mvhi 0(%r1), 42 114*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 115*9880d681SAndroid Build Coastguard Worker %region1 = alloca [2002 x i32], align 8 116*9880d681SAndroid Build Coastguard Worker %region2 = alloca [2002 x i32], align 8 117*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [2002 x i32], [2002 x i32]* %region1, i64 0, i64 2 118*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [2002 x i32], [2002 x i32]* %region2, i64 0, i64 2 119*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 120*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 121*9880d681SAndroid Build Coastguard Worker ret void 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker; ...as above. 125*9880d681SAndroid Build Coastguard Workerdefine void @f6() { 126*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f6: 127*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lay %r1, 8192(%r15) 128*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 4(%r1), 42 129*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 130*9880d681SAndroid Build Coastguard Worker; 131*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f6: 132*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lay %r1, 8192(%r11) 133*9880d681SAndroid Build Coastguard Worker; CHECK-FP: mvhi 4(%r1), 42 134*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 135*9880d681SAndroid Build Coastguard Worker %region1 = alloca [2002 x i32], align 8 136*9880d681SAndroid Build Coastguard Worker %region2 = alloca [2002 x i32], align 8 137*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [2002 x i32], [2002 x i32]* %region1, i64 0, i64 3 138*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [2002 x i32], [2002 x i32]* %region2, i64 0, i64 3 139*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 140*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 141*9880d681SAndroid Build Coastguard Worker ret void 142*9880d681SAndroid Build Coastguard Worker} 143*9880d681SAndroid Build Coastguard Worker 144*9880d681SAndroid Build Coastguard Worker; Now try an offset of 4092 from the start of the object, with the object 145*9880d681SAndroid Build Coastguard Worker; being at offset 8192. This time we need objects of (8192 - 176) / 4 = 2004 146*9880d681SAndroid Build Coastguard Worker; words. 147*9880d681SAndroid Build Coastguard Workerdefine void @f7() { 148*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f7: 149*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lay %r1, 8192(%r15) 150*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 4092(%r1), 42 151*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 152*9880d681SAndroid Build Coastguard Worker; 153*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f7: 154*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lay %r1, 8192(%r11) 155*9880d681SAndroid Build Coastguard Worker; CHECK-FP: mvhi 4092(%r1), 42 156*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 157*9880d681SAndroid Build Coastguard Worker %region1 = alloca [2004 x i32], align 8 158*9880d681SAndroid Build Coastguard Worker %region2 = alloca [2004 x i32], align 8 159*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [2004 x i32], [2004 x i32]* %region1, i64 0, i64 1023 160*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [2004 x i32], [2004 x i32]* %region2, i64 0, i64 1023 161*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 162*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 163*9880d681SAndroid Build Coastguard Worker ret void 164*9880d681SAndroid Build Coastguard Worker} 165*9880d681SAndroid Build Coastguard Worker 166*9880d681SAndroid Build Coastguard Worker; Keep the object-relative offset the same but bump the size of the 167*9880d681SAndroid Build Coastguard Worker; objects by one doubleword. 168*9880d681SAndroid Build Coastguard Workerdefine void @f8() { 169*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f8: 170*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lay %r1, 12288(%r15) 171*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 4(%r1), 42 172*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 173*9880d681SAndroid Build Coastguard Worker; 174*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f8: 175*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lay %r1, 12288(%r11) 176*9880d681SAndroid Build Coastguard Worker; CHECK-FP: mvhi 4(%r1), 42 177*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 178*9880d681SAndroid Build Coastguard Worker %region1 = alloca [2006 x i32], align 8 179*9880d681SAndroid Build Coastguard Worker %region2 = alloca [2006 x i32], align 8 180*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [2006 x i32], [2006 x i32]* %region1, i64 0, i64 1023 181*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [2006 x i32], [2006 x i32]* %region2, i64 0, i64 1023 182*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 183*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 184*9880d681SAndroid Build Coastguard Worker ret void 185*9880d681SAndroid Build Coastguard Worker} 186*9880d681SAndroid Build Coastguard Worker 187*9880d681SAndroid Build Coastguard Worker; Check a case where the original displacement is out of range. The backend 188*9880d681SAndroid Build Coastguard Worker; should force STY to be used instead. 189*9880d681SAndroid Build Coastguard Workerdefine void @f9() { 190*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f9: 191*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lhi [[TMP:%r[0-5]]], 42 192*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: sty [[TMP]], 12296(%r15) 193*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 194*9880d681SAndroid Build Coastguard Worker; 195*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f9: 196*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lhi [[TMP:%r[0-5]]], 42 197*9880d681SAndroid Build Coastguard Worker; CHECK-FP: sty [[TMP]], 12296(%r11) 198*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 199*9880d681SAndroid Build Coastguard Worker %region1 = alloca [2006 x i32], align 8 200*9880d681SAndroid Build Coastguard Worker %region2 = alloca [2006 x i32], align 8 201*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [2006 x i32], [2006 x i32]* %region1, i64 0, i64 1024 202*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [2006 x i32], [2006 x i32]* %region2, i64 0, i64 1024 203*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 204*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 205*9880d681SAndroid Build Coastguard Worker ret void 206*9880d681SAndroid Build Coastguard Worker} 207*9880d681SAndroid Build Coastguard Worker 208*9880d681SAndroid Build Coastguard Worker; Repeat f2 in a case that needs the emergency spill slots (because all 209*9880d681SAndroid Build Coastguard Worker; call-clobbered registers are live and no call-saved ones have been 210*9880d681SAndroid Build Coastguard Worker; allocated). 211*9880d681SAndroid Build Coastguard Workerdefine void @f10(i32 *%vptr) { 212*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f10: 213*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: stg [[REGISTER:%r[1-9][0-4]?]], [[OFFSET:160|168]](%r15) 214*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lay [[REGISTER]], 4096(%r15) 215*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 0([[REGISTER]]), 42 216*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lg [[REGISTER]], [[OFFSET]](%r15) 217*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 218*9880d681SAndroid Build Coastguard Worker; 219*9880d681SAndroid Build Coastguard Worker; CHECK-FP-LABEL: f10: 220*9880d681SAndroid Build Coastguard Worker; CHECK-FP: stg [[REGISTER:%r[1-9][0-4]?]], [[OFFSET:160|168]](%r11) 221*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lay [[REGISTER]], 4096(%r11) 222*9880d681SAndroid Build Coastguard Worker; CHECK-FP: mvhi 0([[REGISTER]]), 42 223*9880d681SAndroid Build Coastguard Worker; CHECK-FP: lg [[REGISTER]], [[OFFSET]](%r11) 224*9880d681SAndroid Build Coastguard Worker; CHECK-FP: br %r14 225*9880d681SAndroid Build Coastguard Worker %i0 = load volatile i32 , i32 *%vptr 226*9880d681SAndroid Build Coastguard Worker %i1 = load volatile i32 , i32 *%vptr 227*9880d681SAndroid Build Coastguard Worker %i3 = load volatile i32 , i32 *%vptr 228*9880d681SAndroid Build Coastguard Worker %i4 = load volatile i32 , i32 *%vptr 229*9880d681SAndroid Build Coastguard Worker %i5 = load volatile i32 , i32 *%vptr 230*9880d681SAndroid Build Coastguard Worker %region1 = alloca [978 x i32], align 8 231*9880d681SAndroid Build Coastguard Worker %region2 = alloca [978 x i32], align 8 232*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [978 x i32], [978 x i32]* %region1, i64 0, i64 2 233*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [978 x i32], [978 x i32]* %region2, i64 0, i64 2 234*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 235*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 236*9880d681SAndroid Build Coastguard Worker store volatile i32 %i0, i32 *%vptr 237*9880d681SAndroid Build Coastguard Worker store volatile i32 %i1, i32 *%vptr 238*9880d681SAndroid Build Coastguard Worker store volatile i32 %i3, i32 *%vptr 239*9880d681SAndroid Build Coastguard Worker store volatile i32 %i4, i32 *%vptr 240*9880d681SAndroid Build Coastguard Worker store volatile i32 %i5, i32 *%vptr 241*9880d681SAndroid Build Coastguard Worker ret void 242*9880d681SAndroid Build Coastguard Worker} 243*9880d681SAndroid Build Coastguard Worker 244*9880d681SAndroid Build Coastguard Worker; And again with maximum register pressure. The only spill slots that the 245*9880d681SAndroid Build Coastguard Worker; NOFP case needs are the emergency ones, so the offsets are the same as for f2. 246*9880d681SAndroid Build Coastguard Worker; The FP case needs to spill an extra register and is too dependent on 247*9880d681SAndroid Build Coastguard Worker; register allocation heuristics for a stable test. 248*9880d681SAndroid Build Coastguard Workerdefine void @f11(i32 *%vptr) { 249*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP-LABEL: f11: 250*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: stmg %r6, %r15, 251*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: stg [[REGISTER:%r[1-9][0-4]?]], [[OFFSET:160|168]](%r15) 252*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lay [[REGISTER]], 4096(%r15) 253*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: mvhi 0([[REGISTER]]), 42 254*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lg [[REGISTER]], [[OFFSET]](%r15) 255*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: lmg %r6, %r15, 256*9880d681SAndroid Build Coastguard Worker; CHECK-NOFP: br %r14 257*9880d681SAndroid Build Coastguard Worker %i0 = load volatile i32 , i32 *%vptr 258*9880d681SAndroid Build Coastguard Worker %i1 = load volatile i32 , i32 *%vptr 259*9880d681SAndroid Build Coastguard Worker %i3 = load volatile i32 , i32 *%vptr 260*9880d681SAndroid Build Coastguard Worker %i4 = load volatile i32 , i32 *%vptr 261*9880d681SAndroid Build Coastguard Worker %i5 = load volatile i32 , i32 *%vptr 262*9880d681SAndroid Build Coastguard Worker %i6 = load volatile i32 , i32 *%vptr 263*9880d681SAndroid Build Coastguard Worker %i7 = load volatile i32 , i32 *%vptr 264*9880d681SAndroid Build Coastguard Worker %i8 = load volatile i32 , i32 *%vptr 265*9880d681SAndroid Build Coastguard Worker %i9 = load volatile i32 , i32 *%vptr 266*9880d681SAndroid Build Coastguard Worker %i10 = load volatile i32 , i32 *%vptr 267*9880d681SAndroid Build Coastguard Worker %i11 = load volatile i32 , i32 *%vptr 268*9880d681SAndroid Build Coastguard Worker %i12 = load volatile i32 , i32 *%vptr 269*9880d681SAndroid Build Coastguard Worker %i13 = load volatile i32 , i32 *%vptr 270*9880d681SAndroid Build Coastguard Worker %i14 = load volatile i32 , i32 *%vptr 271*9880d681SAndroid Build Coastguard Worker %region1 = alloca [978 x i32], align 8 272*9880d681SAndroid Build Coastguard Worker %region2 = alloca [978 x i32], align 8 273*9880d681SAndroid Build Coastguard Worker %ptr1 = getelementptr inbounds [978 x i32], [978 x i32]* %region1, i64 0, i64 2 274*9880d681SAndroid Build Coastguard Worker %ptr2 = getelementptr inbounds [978 x i32], [978 x i32]* %region2, i64 0, i64 2 275*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr1 276*9880d681SAndroid Build Coastguard Worker store volatile i32 42, i32 *%ptr2 277*9880d681SAndroid Build Coastguard Worker store volatile i32 %i0, i32 *%vptr 278*9880d681SAndroid Build Coastguard Worker store volatile i32 %i1, i32 *%vptr 279*9880d681SAndroid Build Coastguard Worker store volatile i32 %i3, i32 *%vptr 280*9880d681SAndroid Build Coastguard Worker store volatile i32 %i4, i32 *%vptr 281*9880d681SAndroid Build Coastguard Worker store volatile i32 %i5, i32 *%vptr 282*9880d681SAndroid Build Coastguard Worker store volatile i32 %i6, i32 *%vptr 283*9880d681SAndroid Build Coastguard Worker store volatile i32 %i7, i32 *%vptr 284*9880d681SAndroid Build Coastguard Worker store volatile i32 %i8, i32 *%vptr 285*9880d681SAndroid Build Coastguard Worker store volatile i32 %i9, i32 *%vptr 286*9880d681SAndroid Build Coastguard Worker store volatile i32 %i10, i32 *%vptr 287*9880d681SAndroid Build Coastguard Worker store volatile i32 %i11, i32 *%vptr 288*9880d681SAndroid Build Coastguard Worker store volatile i32 %i12, i32 *%vptr 289*9880d681SAndroid Build Coastguard Worker store volatile i32 %i13, i32 *%vptr 290*9880d681SAndroid Build Coastguard Worker store volatile i32 %i14, i32 *%vptr 291*9880d681SAndroid Build Coastguard Worker ret void 292*9880d681SAndroid Build Coastguard Worker} 293