1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple aarch64--none-eabi -verify-machineinstrs | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr64 4*9880d681SAndroid Build Coastguard Worker; CHECK: mov x0, x1 5*9880d681SAndroid Build Coastguard Workerdefine i64 @Str64Ldr64(i64* nocapture %P, i64 %v, i64 %n) { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i64* 8*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 9*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 10*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i64, i64* %0, i64 1 11*9880d681SAndroid Build Coastguard Worker %1 = load i64, i64* %arrayidx1 12*9880d681SAndroid Build Coastguard Worker ret i64 %1 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr32_0 16*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xffffffff 17*9880d681SAndroid Build Coastguard Workerdefine i32 @Str64Ldr32_0(i64* nocapture %P, i64 %v, i64 %n) { 18*9880d681SAndroid Build Coastguard Workerentry: 19*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i32* 20*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 21*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 22*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 2 23*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %arrayidx1 24*9880d681SAndroid Build Coastguard Worker ret i32 %1 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr32_1 28*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #32 29*9880d681SAndroid Build Coastguard Workerdefine i32 @Str64Ldr32_1(i64* nocapture %P, i64 %v, i64 %n) { 30*9880d681SAndroid Build Coastguard Workerentry: 31*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i32* 32*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 33*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 34*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 3 35*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %arrayidx1 36*9880d681SAndroid Build Coastguard Worker ret i32 %1 37*9880d681SAndroid Build Coastguard Worker} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr16_0 40*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xffff 41*9880d681SAndroid Build Coastguard Workerdefine i16 @Str64Ldr16_0(i64* nocapture %P, i64 %v, i64 %n) { 42*9880d681SAndroid Build Coastguard Workerentry: 43*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i16* 44*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 45*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 46*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 4 47*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 48*9880d681SAndroid Build Coastguard Worker ret i16 %1 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr16_1 52*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #16, #16 53*9880d681SAndroid Build Coastguard Workerdefine i16 @Str64Ldr16_1(i64* nocapture %P, i64 %v, i64 %n) { 54*9880d681SAndroid Build Coastguard Workerentry: 55*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i16* 56*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 57*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 58*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 5 59*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 60*9880d681SAndroid Build Coastguard Worker ret i16 %1 61*9880d681SAndroid Build Coastguard Worker} 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr16_2 64*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #32, #16 65*9880d681SAndroid Build Coastguard Workerdefine i16 @Str64Ldr16_2(i64* nocapture %P, i64 %v, i64 %n) { 66*9880d681SAndroid Build Coastguard Workerentry: 67*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i16* 68*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 69*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 70*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 6 71*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 72*9880d681SAndroid Build Coastguard Worker ret i16 %1 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr16_3 76*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #48 77*9880d681SAndroid Build Coastguard Workerdefine i16 @Str64Ldr16_3(i64* nocapture %P, i64 %v, i64 %n) { 78*9880d681SAndroid Build Coastguard Workerentry: 79*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i16* 80*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 81*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 82*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 7 83*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 84*9880d681SAndroid Build Coastguard Worker ret i16 %1 85*9880d681SAndroid Build Coastguard Worker} 86*9880d681SAndroid Build Coastguard Worker 87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_0 88*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xff 89*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_0(i64* nocapture %P, i64 %v, i64 %n) { 90*9880d681SAndroid Build Coastguard Workerentry: 91*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 92*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 93*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 94*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 8 95*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 96*9880d681SAndroid Build Coastguard Worker ret i8 %1 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_1 100*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #8, #8 101*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_1(i64* nocapture %P, i64 %v, i64 %n) { 102*9880d681SAndroid Build Coastguard Workerentry: 103*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 104*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 105*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 106*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 9 107*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 108*9880d681SAndroid Build Coastguard Worker ret i8 %1 109*9880d681SAndroid Build Coastguard Worker} 110*9880d681SAndroid Build Coastguard Worker 111*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_2 112*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #16, #8 113*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_2(i64* nocapture %P, i64 %v, i64 %n) { 114*9880d681SAndroid Build Coastguard Workerentry: 115*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 116*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 117*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 118*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 10 119*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 120*9880d681SAndroid Build Coastguard Worker ret i8 %1 121*9880d681SAndroid Build Coastguard Worker} 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_3 124*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #24, #8 125*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_3(i64* nocapture %P, i64 %v, i64 %n) { 126*9880d681SAndroid Build Coastguard Workerentry: 127*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 128*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 129*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 130*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 11 131*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 132*9880d681SAndroid Build Coastguard Worker ret i8 %1 133*9880d681SAndroid Build Coastguard Worker} 134*9880d681SAndroid Build Coastguard Worker 135*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_4 136*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #32, #8 137*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_4(i64* nocapture %P, i64 %v, i64 %n) { 138*9880d681SAndroid Build Coastguard Workerentry: 139*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 140*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 141*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 142*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 12 143*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 144*9880d681SAndroid Build Coastguard Worker ret i8 %1 145*9880d681SAndroid Build Coastguard Worker} 146*9880d681SAndroid Build Coastguard Worker 147*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_5 148*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #40, #8 149*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_5(i64* nocapture %P, i64 %v, i64 %n) { 150*9880d681SAndroid Build Coastguard Workerentry: 151*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 152*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 153*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 154*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 13 155*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 156*9880d681SAndroid Build Coastguard Worker ret i8 %1 157*9880d681SAndroid Build Coastguard Worker} 158*9880d681SAndroid Build Coastguard Worker 159*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_6 160*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #48, #8 161*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_6(i64* nocapture %P, i64 %v, i64 %n) { 162*9880d681SAndroid Build Coastguard Workerentry: 163*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 164*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 165*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 166*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 14 167*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 168*9880d681SAndroid Build Coastguard Worker ret i8 %1 169*9880d681SAndroid Build Coastguard Worker} 170*9880d681SAndroid Build Coastguard Worker 171*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str64Ldr8_7 172*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #56 173*9880d681SAndroid Build Coastguard Workerdefine i8 @Str64Ldr8_7(i64* nocapture %P, i64 %v, i64 %n) { 174*9880d681SAndroid Build Coastguard Workerentry: 175*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 176*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 1 177*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 178*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 15 179*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 180*9880d681SAndroid Build Coastguard Worker ret i8 %1 181*9880d681SAndroid Build Coastguard Worker} 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr32 184*9880d681SAndroid Build Coastguard Worker; CHECK: mov w0, w1 185*9880d681SAndroid Build Coastguard Workerdefine i32 @Str32Ldr32(i32* nocapture %P, i32 %v, i64 %n) { 186*9880d681SAndroid Build Coastguard Workerentry: 187*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i32* 188*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 189*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 190*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 1 191*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %arrayidx1 192*9880d681SAndroid Build Coastguard Worker ret i32 %1 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr16_0 196*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xffff 197*9880d681SAndroid Build Coastguard Workerdefine i16 @Str32Ldr16_0(i32* nocapture %P, i32 %v, i64 %n) { 198*9880d681SAndroid Build Coastguard Workerentry: 199*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i16* 200*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 201*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 202*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 2 203*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 204*9880d681SAndroid Build Coastguard Worker ret i16 %1 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr16_1 208*9880d681SAndroid Build Coastguard Worker; CHECK: lsr w0, w1, #16 209*9880d681SAndroid Build Coastguard Workerdefine i16 @Str32Ldr16_1(i32* nocapture %P, i32 %v, i64 %n) { 210*9880d681SAndroid Build Coastguard Workerentry: 211*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i16* 212*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 213*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 214*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 3 215*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 216*9880d681SAndroid Build Coastguard Worker ret i16 %1 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr8_0 220*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xff 221*9880d681SAndroid Build Coastguard Workerdefine i8 @Str32Ldr8_0(i32* nocapture %P, i32 %v, i64 %n) { 222*9880d681SAndroid Build Coastguard Workerentry: 223*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i8* 224*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 225*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 226*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 4 227*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 228*9880d681SAndroid Build Coastguard Worker ret i8 %1 229*9880d681SAndroid Build Coastguard Worker} 230*9880d681SAndroid Build Coastguard Worker 231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr8_1 232*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #8, #8 233*9880d681SAndroid Build Coastguard Workerdefine i8 @Str32Ldr8_1(i32* nocapture %P, i32 %v, i64 %n) { 234*9880d681SAndroid Build Coastguard Workerentry: 235*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i8* 236*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 237*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 238*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 5 239*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 240*9880d681SAndroid Build Coastguard Worker ret i8 %1 241*9880d681SAndroid Build Coastguard Worker} 242*9880d681SAndroid Build Coastguard Worker 243*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr8_2 244*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #16, #8 245*9880d681SAndroid Build Coastguard Workerdefine i8 @Str32Ldr8_2(i32* nocapture %P, i32 %v, i64 %n) { 246*9880d681SAndroid Build Coastguard Workerentry: 247*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i8* 248*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 249*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 250*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 6 251*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 252*9880d681SAndroid Build Coastguard Worker ret i8 %1 253*9880d681SAndroid Build Coastguard Worker} 254*9880d681SAndroid Build Coastguard Worker 255*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str32Ldr8_3 256*9880d681SAndroid Build Coastguard Worker; CHECK: lsr w0, w1, #24 257*9880d681SAndroid Build Coastguard Workerdefine i8 @Str32Ldr8_3(i32* nocapture %P, i32 %v, i64 %n) { 258*9880d681SAndroid Build Coastguard Workerentry: 259*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i8* 260*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 261*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 262*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 7 263*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 264*9880d681SAndroid Build Coastguard Worker ret i8 %1 265*9880d681SAndroid Build Coastguard Worker} 266*9880d681SAndroid Build Coastguard Worker 267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str16Ldr16 268*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xffff 269*9880d681SAndroid Build Coastguard Workerdefine i16 @Str16Ldr16(i16* nocapture %P, i16 %v, i64 %n) { 270*9880d681SAndroid Build Coastguard Workerentry: 271*9880d681SAndroid Build Coastguard Worker %0 = bitcast i16* %P to i16* 272*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 1 273*9880d681SAndroid Build Coastguard Worker store i16 %v, i16* %arrayidx0 274*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 1 275*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 276*9880d681SAndroid Build Coastguard Worker ret i16 %1 277*9880d681SAndroid Build Coastguard Worker} 278*9880d681SAndroid Build Coastguard Worker 279*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str16Ldr8_0 280*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xff 281*9880d681SAndroid Build Coastguard Workerdefine i8 @Str16Ldr8_0(i16* nocapture %P, i16 %v, i64 %n) { 282*9880d681SAndroid Build Coastguard Workerentry: 283*9880d681SAndroid Build Coastguard Worker %0 = bitcast i16* %P to i8* 284*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 1 285*9880d681SAndroid Build Coastguard Worker store i16 %v, i16* %arrayidx0 286*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 2 287*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 288*9880d681SAndroid Build Coastguard Worker ret i8 %1 289*9880d681SAndroid Build Coastguard Worker} 290*9880d681SAndroid Build Coastguard Worker 291*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Str16Ldr8_1 292*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #8, #8 293*9880d681SAndroid Build Coastguard Workerdefine i8 @Str16Ldr8_1(i16* nocapture %P, i16 %v, i64 %n) { 294*9880d681SAndroid Build Coastguard Workerentry: 295*9880d681SAndroid Build Coastguard Worker %0 = bitcast i16* %P to i8* 296*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 1 297*9880d681SAndroid Build Coastguard Worker store i16 %v, i16* %arrayidx0 298*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 3 299*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 300*9880d681SAndroid Build Coastguard Worker ret i8 %1 301*9880d681SAndroid Build Coastguard Worker} 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard Worker 304*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr64 305*9880d681SAndroid Build Coastguard Worker; CHECK: mov x0, x1 306*9880d681SAndroid Build Coastguard Workerdefine i64 @Unscaled_Str64Ldr64(i64* nocapture %P, i64 %v, i64 %n) { 307*9880d681SAndroid Build Coastguard Workerentry: 308*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i64* 309*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 310*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 311*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i64, i64* %0, i64 -1 312*9880d681SAndroid Build Coastguard Worker %1 = load i64, i64* %arrayidx1 313*9880d681SAndroid Build Coastguard Worker ret i64 %1 314*9880d681SAndroid Build Coastguard Worker} 315*9880d681SAndroid Build Coastguard Worker 316*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr32_0 317*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xffffffff 318*9880d681SAndroid Build Coastguard Workerdefine i32 @Unscaled_Str64Ldr32_0(i64* nocapture %P, i64 %v, i64 %n) { 319*9880d681SAndroid Build Coastguard Workerentry: 320*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i32* 321*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 322*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 323*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 -2 324*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %arrayidx1 325*9880d681SAndroid Build Coastguard Worker ret i32 %1 326*9880d681SAndroid Build Coastguard Worker} 327*9880d681SAndroid Build Coastguard Worker 328*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr32_1 329*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #32 330*9880d681SAndroid Build Coastguard Workerdefine i32 @Unscaled_Str64Ldr32_1(i64* nocapture %P, i64 %v, i64 %n) { 331*9880d681SAndroid Build Coastguard Workerentry: 332*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i32* 333*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 334*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 335*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 -1 336*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %arrayidx1 337*9880d681SAndroid Build Coastguard Worker ret i32 %1 338*9880d681SAndroid Build Coastguard Worker} 339*9880d681SAndroid Build Coastguard Worker 340*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr16_0 341*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xffff 342*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str64Ldr16_0(i64* nocapture %P, i64 %v, i64 %n) { 343*9880d681SAndroid Build Coastguard Workerentry: 344*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i16* 345*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 346*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 347*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -4 348*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 349*9880d681SAndroid Build Coastguard Worker ret i16 %1 350*9880d681SAndroid Build Coastguard Worker} 351*9880d681SAndroid Build Coastguard Worker 352*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr16_1 353*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #16, #16 354*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str64Ldr16_1(i64* nocapture %P, i64 %v, i64 %n) { 355*9880d681SAndroid Build Coastguard Workerentry: 356*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i16* 357*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 358*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 359*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -3 360*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 361*9880d681SAndroid Build Coastguard Worker ret i16 %1 362*9880d681SAndroid Build Coastguard Worker} 363*9880d681SAndroid Build Coastguard Worker 364*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr16_2 365*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #32, #16 366*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str64Ldr16_2(i64* nocapture %P, i64 %v, i64 %n) { 367*9880d681SAndroid Build Coastguard Workerentry: 368*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i16* 369*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 370*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 371*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -2 372*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 373*9880d681SAndroid Build Coastguard Worker ret i16 %1 374*9880d681SAndroid Build Coastguard Worker} 375*9880d681SAndroid Build Coastguard Worker 376*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr16_3 377*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #48 378*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str64Ldr16_3(i64* nocapture %P, i64 %v, i64 %n) { 379*9880d681SAndroid Build Coastguard Workerentry: 380*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i16* 381*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 382*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 383*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -1 384*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 385*9880d681SAndroid Build Coastguard Worker ret i16 %1 386*9880d681SAndroid Build Coastguard Worker} 387*9880d681SAndroid Build Coastguard Worker 388*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_0 389*9880d681SAndroid Build Coastguard Worker; CHECK: and x0, x1, #0xff 390*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_0(i64* nocapture %P, i64 %v, i64 %n) { 391*9880d681SAndroid Build Coastguard Workerentry: 392*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 393*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 394*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 395*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -8 396*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 397*9880d681SAndroid Build Coastguard Worker ret i8 %1 398*9880d681SAndroid Build Coastguard Worker} 399*9880d681SAndroid Build Coastguard Worker 400*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_1 401*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #8, #8 402*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_1(i64* nocapture %P, i64 %v, i64 %n) { 403*9880d681SAndroid Build Coastguard Workerentry: 404*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 405*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 406*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 407*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -7 408*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 409*9880d681SAndroid Build Coastguard Worker ret i8 %1 410*9880d681SAndroid Build Coastguard Worker} 411*9880d681SAndroid Build Coastguard Worker 412*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_2 413*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #16, #8 414*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_2(i64* nocapture %P, i64 %v, i64 %n) { 415*9880d681SAndroid Build Coastguard Workerentry: 416*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 417*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 418*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 419*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -6 420*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 421*9880d681SAndroid Build Coastguard Worker ret i8 %1 422*9880d681SAndroid Build Coastguard Worker} 423*9880d681SAndroid Build Coastguard Worker 424*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_3 425*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #24, #8 426*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_3(i64* nocapture %P, i64 %v, i64 %n) { 427*9880d681SAndroid Build Coastguard Workerentry: 428*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 429*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 430*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 431*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -5 432*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 433*9880d681SAndroid Build Coastguard Worker ret i8 %1 434*9880d681SAndroid Build Coastguard Worker} 435*9880d681SAndroid Build Coastguard Worker 436*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_4 437*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #32, #8 438*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_4(i64* nocapture %P, i64 %v, i64 %n) { 439*9880d681SAndroid Build Coastguard Workerentry: 440*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 441*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 442*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 443*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -4 444*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 445*9880d681SAndroid Build Coastguard Worker ret i8 %1 446*9880d681SAndroid Build Coastguard Worker} 447*9880d681SAndroid Build Coastguard Worker 448*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_5 449*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #40, #8 450*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_5(i64* nocapture %P, i64 %v, i64 %n) { 451*9880d681SAndroid Build Coastguard Workerentry: 452*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 453*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 454*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 455*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -3 456*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 457*9880d681SAndroid Build Coastguard Worker ret i8 %1 458*9880d681SAndroid Build Coastguard Worker} 459*9880d681SAndroid Build Coastguard Worker 460*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_6 461*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx x0, x1, #48, #8 462*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_6(i64* nocapture %P, i64 %v, i64 %n) { 463*9880d681SAndroid Build Coastguard Workerentry: 464*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 465*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 466*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 467*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -2 468*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 469*9880d681SAndroid Build Coastguard Worker ret i8 %1 470*9880d681SAndroid Build Coastguard Worker} 471*9880d681SAndroid Build Coastguard Worker 472*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str64Ldr8_7 473*9880d681SAndroid Build Coastguard Worker; CHECK: lsr x0, x1, #56 474*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str64Ldr8_7(i64* nocapture %P, i64 %v, i64 %n) { 475*9880d681SAndroid Build Coastguard Workerentry: 476*9880d681SAndroid Build Coastguard Worker %0 = bitcast i64* %P to i8* 477*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i64, i64* %P, i64 -1 478*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %arrayidx0 479*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -1 480*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 481*9880d681SAndroid Build Coastguard Worker ret i8 %1 482*9880d681SAndroid Build Coastguard Worker} 483*9880d681SAndroid Build Coastguard Worker 484*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr32 485*9880d681SAndroid Build Coastguard Worker; CHECK: mov w0, w1 486*9880d681SAndroid Build Coastguard Workerdefine i32 @Unscaled_Str32Ldr32(i32* nocapture %P, i32 %v, i64 %n) { 487*9880d681SAndroid Build Coastguard Workerentry: 488*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i32* 489*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1 490*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 491*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i32, i32* %0, i64 -1 492*9880d681SAndroid Build Coastguard Worker %1 = load i32, i32* %arrayidx1 493*9880d681SAndroid Build Coastguard Worker ret i32 %1 494*9880d681SAndroid Build Coastguard Worker} 495*9880d681SAndroid Build Coastguard Worker 496*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr16_0 497*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xffff 498*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str32Ldr16_0(i32* nocapture %P, i32 %v, i64 %n) { 499*9880d681SAndroid Build Coastguard Workerentry: 500*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i16* 501*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1 502*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 503*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -2 504*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 505*9880d681SAndroid Build Coastguard Worker ret i16 %1 506*9880d681SAndroid Build Coastguard Worker} 507*9880d681SAndroid Build Coastguard Worker 508*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr16_1 509*9880d681SAndroid Build Coastguard Worker; CHECK: lsr w0, w1, #16 510*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str32Ldr16_1(i32* nocapture %P, i32 %v, i64 %n) { 511*9880d681SAndroid Build Coastguard Workerentry: 512*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i16* 513*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1 514*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 515*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -1 516*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 517*9880d681SAndroid Build Coastguard Worker ret i16 %1 518*9880d681SAndroid Build Coastguard Worker} 519*9880d681SAndroid Build Coastguard Worker 520*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr8_0 521*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xff 522*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str32Ldr8_0(i32* nocapture %P, i32 %v, i64 %n) { 523*9880d681SAndroid Build Coastguard Workerentry: 524*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i8* 525*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1 526*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 527*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -4 528*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 529*9880d681SAndroid Build Coastguard Worker ret i8 %1 530*9880d681SAndroid Build Coastguard Worker} 531*9880d681SAndroid Build Coastguard Worker 532*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr8_1 533*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #8, #8 534*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str32Ldr8_1(i32* nocapture %P, i32 %v, i64 %n) { 535*9880d681SAndroid Build Coastguard Workerentry: 536*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i8* 537*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1 538*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 539*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -3 540*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 541*9880d681SAndroid Build Coastguard Worker ret i8 %1 542*9880d681SAndroid Build Coastguard Worker} 543*9880d681SAndroid Build Coastguard Worker 544*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr8_2 545*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #16, #8 546*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str32Ldr8_2(i32* nocapture %P, i32 %v, i64 %n) { 547*9880d681SAndroid Build Coastguard Workerentry: 548*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i8* 549*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1 550*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 551*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -2 552*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 553*9880d681SAndroid Build Coastguard Worker ret i8 %1 554*9880d681SAndroid Build Coastguard Worker} 555*9880d681SAndroid Build Coastguard Worker 556*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str32Ldr8_3 557*9880d681SAndroid Build Coastguard Worker; CHECK: lsr w0, w1, #24 558*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str32Ldr8_3(i32* nocapture %P, i32 %v, i64 %n) { 559*9880d681SAndroid Build Coastguard Workerentry: 560*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i8* 561*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1 562*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 563*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -1 564*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 565*9880d681SAndroid Build Coastguard Worker ret i8 %1 566*9880d681SAndroid Build Coastguard Worker} 567*9880d681SAndroid Build Coastguard Worker 568*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str16Ldr16 569*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xffff 570*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_Str16Ldr16(i16* nocapture %P, i16 %v, i64 %n) { 571*9880d681SAndroid Build Coastguard Workerentry: 572*9880d681SAndroid Build Coastguard Worker %0 = bitcast i16* %P to i16* 573*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 -1 574*9880d681SAndroid Build Coastguard Worker store i16 %v, i16* %arrayidx0 575*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -1 576*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 577*9880d681SAndroid Build Coastguard Worker ret i16 %1 578*9880d681SAndroid Build Coastguard Worker} 579*9880d681SAndroid Build Coastguard Worker 580*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str16Ldr8_0 581*9880d681SAndroid Build Coastguard Worker; CHECK: and w0, w1, #0xff 582*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str16Ldr8_0(i16* nocapture %P, i16 %v, i64 %n) { 583*9880d681SAndroid Build Coastguard Workerentry: 584*9880d681SAndroid Build Coastguard Worker %0 = bitcast i16* %P to i8* 585*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 -1 586*9880d681SAndroid Build Coastguard Worker store i16 %v, i16* %arrayidx0 587*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -2 588*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 589*9880d681SAndroid Build Coastguard Worker ret i8 %1 590*9880d681SAndroid Build Coastguard Worker} 591*9880d681SAndroid Build Coastguard Worker 592*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_Str16Ldr8_1 593*9880d681SAndroid Build Coastguard Worker; CHECK: ubfx w0, w1, #8, #8 594*9880d681SAndroid Build Coastguard Workerdefine i8 @Unscaled_Str16Ldr8_1(i16* nocapture %P, i16 %v, i64 %n) { 595*9880d681SAndroid Build Coastguard Workerentry: 596*9880d681SAndroid Build Coastguard Worker %0 = bitcast i16* %P to i8* 597*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i16, i16* %P, i64 -1 598*9880d681SAndroid Build Coastguard Worker store i16 %v, i16* %arrayidx0 599*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i8, i8* %0, i64 -1 600*9880d681SAndroid Build Coastguard Worker %1 = load i8, i8* %arrayidx1 601*9880d681SAndroid Build Coastguard Worker ret i8 %1 602*9880d681SAndroid Build Coastguard Worker} 603*9880d681SAndroid Build Coastguard Worker 604*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: StrVolatileLdr 605*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh 606*9880d681SAndroid Build Coastguard Workerdefine i16 @StrVolatileLdr(i32* nocapture %P, i32 %v, i64 %n) { 607*9880d681SAndroid Build Coastguard Workerentry: 608*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i16* 609*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 610*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 611*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 2 612*9880d681SAndroid Build Coastguard Worker %1 = load volatile i16, i16* %arrayidx1 613*9880d681SAndroid Build Coastguard Worker ret i16 %1 614*9880d681SAndroid Build Coastguard Worker} 615*9880d681SAndroid Build Coastguard Worker 616*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: StrNotInRangeLdr 617*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh 618*9880d681SAndroid Build Coastguard Workerdefine i16 @StrNotInRangeLdr(i32* nocapture %P, i32 %v, i64 %n) { 619*9880d681SAndroid Build Coastguard Workerentry: 620*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i16* 621*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 622*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 623*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 1 624*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 625*9880d681SAndroid Build Coastguard Worker ret i16 %1 626*9880d681SAndroid Build Coastguard Worker} 627*9880d681SAndroid Build Coastguard Worker 628*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: Unscaled_StrNotInRangeLdr 629*9880d681SAndroid Build Coastguard Worker; CHECK: ldurh 630*9880d681SAndroid Build Coastguard Workerdefine i16 @Unscaled_StrNotInRangeLdr(i32* nocapture %P, i32 %v, i64 %n) { 631*9880d681SAndroid Build Coastguard Workerentry: 632*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i16* 633*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 -1 634*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 635*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 -3 636*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 637*9880d681SAndroid Build Coastguard Worker ret i16 %1 638*9880d681SAndroid Build Coastguard Worker} 639*9880d681SAndroid Build Coastguard Worker 640*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: StrCallLdr 641*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh 642*9880d681SAndroid Build Coastguard Workerdefine i16 @StrCallLdr(i32* nocapture %P, i32 %v, i64 %n) { 643*9880d681SAndroid Build Coastguard Workerentry: 644*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i16* 645*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 646*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 647*9880d681SAndroid Build Coastguard Worker %c = call i1 @test_dummy() 648*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 1 649*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 650*9880d681SAndroid Build Coastguard Worker ret i16 %1 651*9880d681SAndroid Build Coastguard Worker} 652*9880d681SAndroid Build Coastguard Worker 653*9880d681SAndroid Build Coastguard Workerdeclare i1 @test_dummy() 654*9880d681SAndroid Build Coastguard Worker 655*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: StrStrLdr 656*9880d681SAndroid Build Coastguard Worker; CHECK: ldrh 657*9880d681SAndroid Build Coastguard Workerdefine i16 @StrStrLdr(i32 %v, i32* %P, i32* %P2, i32 %n) { 658*9880d681SAndroid Build Coastguard Workerentry: 659*9880d681SAndroid Build Coastguard Worker %0 = bitcast i32* %P to i16* 660*9880d681SAndroid Build Coastguard Worker %arrayidx0 = getelementptr inbounds i32, i32* %P, i64 1 661*9880d681SAndroid Build Coastguard Worker store i32 %v, i32* %arrayidx0 662*9880d681SAndroid Build Coastguard Worker store i32 %n, i32* %P2 663*9880d681SAndroid Build Coastguard Worker %arrayidx1 = getelementptr inbounds i16, i16* %0, i64 2 664*9880d681SAndroid Build Coastguard Worker %1 = load i16, i16* %arrayidx1 665*9880d681SAndroid Build Coastguard Worker ret i16 %1 666*9880d681SAndroid Build Coastguard Worker} 667