1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple aarch64-apple-darwin -asm-verbose=false -disable-post-ra | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4i64(<4 x i64>* %p, <4 x i64> %v) #0 { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4i64: 5*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI1:[0-9]+]], v1[1] 6*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI0:[0-9]+]], v0[1] 7*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d1, d[[HI1]], [x0, #16] 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI0]], [x0] 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 10*9880d681SAndroid Build Coastguard Worker store <4 x i64> %v, <4 x i64>* %p, align 1, !nontemporal !0 11*9880d681SAndroid Build Coastguard Worker ret void 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4i32(<4 x i32>* %p, <4 x i32> %v) #0 { 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4i32: 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x0] 18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 19*9880d681SAndroid Build Coastguard Worker store <4 x i32> %v, <4 x i32>* %p, align 1, !nontemporal !0 20*9880d681SAndroid Build Coastguard Worker ret void 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v8i16(<8 x i16>* %p, <8 x i16> %v) #0 { 24*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v8i16: 25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x0] 27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 28*9880d681SAndroid Build Coastguard Worker store <8 x i16> %v, <8 x i16>* %p, align 1, !nontemporal !0 29*9880d681SAndroid Build Coastguard Worker ret void 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v16i8(<16 x i8>* %p, <16 x i8> %v) #0 { 33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v16i8: 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x0] 36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 37*9880d681SAndroid Build Coastguard Worker store <16 x i8> %v, <16 x i8>* %p, align 1, !nontemporal !0 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2i32(<2 x i32>* %p, <2 x i32> %v) #0 { 42*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2i32: 43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0] 45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 46*9880d681SAndroid Build Coastguard Worker store <2 x i32> %v, <2 x i32>* %p, align 1, !nontemporal !0 47*9880d681SAndroid Build Coastguard Worker ret void 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4i16(<4 x i16>* %p, <4 x i16> %v) #0 { 51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4i16: 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0] 54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 55*9880d681SAndroid Build Coastguard Worker store <4 x i16> %v, <4 x i16>* %p, align 1, !nontemporal !0 56*9880d681SAndroid Build Coastguard Worker ret void 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v8i8(<8 x i8>* %p, <8 x i8> %v) #0 { 60*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v8i8: 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 62*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0] 63*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 64*9880d681SAndroid Build Coastguard Worker store <8 x i8> %v, <8 x i8>* %p, align 1, !nontemporal !0 65*9880d681SAndroid Build Coastguard Worker ret void 66*9880d681SAndroid Build Coastguard Worker} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f64(<2 x double>* %p, <2 x double> %v) #0 { 69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f64: 70*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 71*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x0] 72*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 73*9880d681SAndroid Build Coastguard Worker store <2 x double> %v, <2 x double>* %p, align 1, !nontemporal !0 74*9880d681SAndroid Build Coastguard Worker ret void 75*9880d681SAndroid Build Coastguard Worker} 76*9880d681SAndroid Build Coastguard Worker 77*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32(<4 x float>* %p, <4 x float> %v) #0 { 78*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32: 79*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 80*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x0] 81*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 82*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %p, align 1, !nontemporal !0 83*9880d681SAndroid Build Coastguard Worker ret void 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f32(<2 x float>* %p, <2 x float> %v) #0 { 87*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f32: 88*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 89*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0] 90*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 91*9880d681SAndroid Build Coastguard Worker store <2 x float> %v, <2 x float>* %p, align 1, !nontemporal !0 92*9880d681SAndroid Build Coastguard Worker ret void 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v1f64(<1 x double>* %p, <1 x double> %v) #0 { 96*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v1f64: 97*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 98*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0] 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 100*9880d681SAndroid Build Coastguard Worker store <1 x double> %v, <1 x double>* %p, align 1, !nontemporal !0 101*9880d681SAndroid Build Coastguard Worker ret void 102*9880d681SAndroid Build Coastguard Worker} 103*9880d681SAndroid Build Coastguard Worker 104*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v1i64(<1 x i64>* %p, <1 x i64> %v) #0 { 105*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v1i64: 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0] 108*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 109*9880d681SAndroid Build Coastguard Worker store <1 x i64> %v, <1 x i64>* %p, align 1, !nontemporal !0 110*9880d681SAndroid Build Coastguard Worker ret void 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_i64(i64* %p, i64 %v) #0 { 114*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_i64: 115*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: lsr x[[HI:[0-9]+]], x1, #32 116*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp w1, w[[HI]], [x0] 117*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 118*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %p, align 1, !nontemporal !0 119*9880d681SAndroid Build Coastguard Worker ret void 120*9880d681SAndroid Build Coastguard Worker} 121*9880d681SAndroid Build Coastguard Worker 122*9880d681SAndroid Build Coastguard Worker 123*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f64_offset(<2 x double>* %p, <2 x double> %v) #0 { 124*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f64_offset: 125*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x0, #16] 127*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 128*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr <2 x double>, <2 x double>* %p, i32 1 129*9880d681SAndroid Build Coastguard Worker store <2 x double> %v, <2 x double>* %tmp0, align 1, !nontemporal !0 130*9880d681SAndroid Build Coastguard Worker ret void 131*9880d681SAndroid Build Coastguard Worker} 132*9880d681SAndroid Build Coastguard Worker 133*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f64_offset_neg(<2 x double>* %p, <2 x double> %v) #0 { 134*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f64_offset_neg: 135*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 136*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x0, #-16] 137*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 138*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr <2 x double>, <2 x double>* %p, i32 -1 139*9880d681SAndroid Build Coastguard Worker store <2 x double> %v, <2 x double>* %tmp0, align 1, !nontemporal !0 140*9880d681SAndroid Build Coastguard Worker ret void 141*9880d681SAndroid Build Coastguard Worker} 142*9880d681SAndroid Build Coastguard Worker 143*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f32_offset(<2 x float>* %p, <2 x float> %v) #0 { 144*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f32_offset: 145*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 146*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0, #8] 147*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 148*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr <2 x float>, <2 x float>* %p, i32 1 149*9880d681SAndroid Build Coastguard Worker store <2 x float> %v, <2 x float>* %tmp0, align 1, !nontemporal !0 150*9880d681SAndroid Build Coastguard Worker ret void 151*9880d681SAndroid Build Coastguard Worker} 152*9880d681SAndroid Build Coastguard Worker 153*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f32_offset_neg(<2 x float>* %p, <2 x float> %v) #0 { 154*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f32_offset_neg: 155*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 156*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0, #-8] 157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 158*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr <2 x float>, <2 x float>* %p, i32 -1 159*9880d681SAndroid Build Coastguard Worker store <2 x float> %v, <2 x float>* %tmp0, align 1, !nontemporal !0 160*9880d681SAndroid Build Coastguard Worker ret void 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_i64_offset(i64* %p, i64 %v) #0 { 164*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_i64_offset: 165*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: lsr x[[HI:[0-9]+]], x1, #32 166*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp w1, w[[HI]], [x0, #8] 167*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 168*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i64, i64* %p, i32 1 169*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %tmp0, align 1, !nontemporal !0 170*9880d681SAndroid Build Coastguard Worker ret void 171*9880d681SAndroid Build Coastguard Worker} 172*9880d681SAndroid Build Coastguard Worker 173*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_i64_offset_neg(i64* %p, i64 %v) #0 { 174*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_i64_offset_neg: 175*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: lsr x[[HI:[0-9]+]], x1, #32 176*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp w1, w[[HI]], [x0, #-8] 177*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 178*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i64, i64* %p, i32 -1 179*9880d681SAndroid Build Coastguard Worker store i64 %v, i64* %tmp0, align 1, !nontemporal !0 180*9880d681SAndroid Build Coastguard Worker ret void 181*9880d681SAndroid Build Coastguard Worker} 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32_invalid_offset_4(i8* %p, <4 x float> %v) #0 { 184*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32_invalid_offset_4: 185*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: add x[[PTR:[0-9]+]], x0, #4 186*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 187*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x[[PTR]]] 188*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 189*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 4 190*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <4 x float>* 191*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %tmp1, align 1, !nontemporal !0 192*9880d681SAndroid Build Coastguard Worker ret void 193*9880d681SAndroid Build Coastguard Worker} 194*9880d681SAndroid Build Coastguard Worker 195*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32_invalid_offset_neg_4(i8* %p, <4 x float> %v) #0 { 196*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32_invalid_offset_neg_4: 197*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sub x[[PTR:[0-9]+]], x0, #4 198*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 199*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x[[PTR]]] 200*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 201*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 -4 202*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <4 x float>* 203*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %tmp1, align 1, !nontemporal !0 204*9880d681SAndroid Build Coastguard Worker ret void 205*9880d681SAndroid Build Coastguard Worker} 206*9880d681SAndroid Build Coastguard Worker 207*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32_invalid_offset_512(i8* %p, <4 x float> %v) #0 { 208*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32_invalid_offset_512: 209*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: add x[[PTR:[0-9]+]], x0, #512 210*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 211*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x[[PTR]]] 212*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 213*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 512 214*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <4 x float>* 215*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %tmp1, align 1, !nontemporal !0 216*9880d681SAndroid Build Coastguard Worker ret void 217*9880d681SAndroid Build Coastguard Worker} 218*9880d681SAndroid Build Coastguard Worker 219*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32_offset_504(i8* %p, <4 x float> %v) #0 { 220*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32_offset_504: 221*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 222*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x0, #504] 223*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 224*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 504 225*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <4 x float>* 226*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %tmp1, align 1, !nontemporal !0 227*9880d681SAndroid Build Coastguard Worker ret void 228*9880d681SAndroid Build Coastguard Worker} 229*9880d681SAndroid Build Coastguard Worker 230*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32_invalid_offset_508(i8* %p, <4 x float> %v) #0 { 231*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32_invalid_offset_508: 232*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: add x[[PTR:[0-9]+]], x0, #508 233*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 234*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x[[PTR]]] 235*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 236*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 508 237*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <4 x float>* 238*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %tmp1, align 1, !nontemporal !0 239*9880d681SAndroid Build Coastguard Worker ret void 240*9880d681SAndroid Build Coastguard Worker} 241*9880d681SAndroid Build Coastguard Worker 242*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32_invalid_offset_neg_520(i8* %p, <4 x float> %v) #0 { 243*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32_invalid_offset_neg_520: 244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sub x[[PTR:[0-9]+]], x0, #520 245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 246*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x[[PTR]]] 247*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 248*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 -520 249*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <4 x float>* 250*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %tmp1, align 1, !nontemporal !0 251*9880d681SAndroid Build Coastguard Worker ret void 252*9880d681SAndroid Build Coastguard Worker} 253*9880d681SAndroid Build Coastguard Worker 254*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32_offset_neg_512(i8* %p, <4 x float> %v) #0 { 255*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32_offset_neg_512: 256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov d[[HI:[0-9]+]], v0[1] 257*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp d0, d[[HI]], [x0, #-512] 258*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 259*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 -512 260*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <4 x float>* 261*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %tmp1, align 1, !nontemporal !0 262*9880d681SAndroid Build Coastguard Worker ret void 263*9880d681SAndroid Build Coastguard Worker} 264*9880d681SAndroid Build Coastguard Worker 265*9880d681SAndroid Build Coastguard Worker 266*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f32_invalid_offset_256(i8* %p, <2 x float> %v) #0 { 267*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f32_invalid_offset_256: 268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: add x[[PTR:[0-9]+]], x0, #256 269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 270*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x[[PTR]]] 271*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 272*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 256 273*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <2 x float>* 274*9880d681SAndroid Build Coastguard Worker store <2 x float> %v, <2 x float>* %tmp1, align 1, !nontemporal !0 275*9880d681SAndroid Build Coastguard Worker ret void 276*9880d681SAndroid Build Coastguard Worker} 277*9880d681SAndroid Build Coastguard Worker 278*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f32_offset_252(i8* %p, <2 x float> %v) #0 { 279*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f32_offset_252: 280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0, #252] 282*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 283*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 252 284*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <2 x float>* 285*9880d681SAndroid Build Coastguard Worker store <2 x float> %v, <2 x float>* %tmp1, align 1, !nontemporal !0 286*9880d681SAndroid Build Coastguard Worker ret void 287*9880d681SAndroid Build Coastguard Worker} 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f32_invalid_offset_neg_260(i8* %p, <2 x float> %v) #0 { 290*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f32_invalid_offset_neg_260: 291*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: sub x[[PTR:[0-9]+]], x0, #260 292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x[[PTR]]] 294*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 295*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 -260 296*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <2 x float>* 297*9880d681SAndroid Build Coastguard Worker store <2 x float> %v, <2 x float>* %tmp1, align 1, !nontemporal !0 298*9880d681SAndroid Build Coastguard Worker ret void 299*9880d681SAndroid Build Coastguard Worker} 300*9880d681SAndroid Build Coastguard Worker 301*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v2f32_offset_neg_256(i8* %p, <2 x float> %v) #0 { 302*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v2f32_offset_neg_256: 303*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov s[[HI:[0-9]+]], v0[1] 304*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: stnp s0, s[[HI]], [x0, #-256] 305*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret 306*9880d681SAndroid Build Coastguard Worker %tmp0 = getelementptr i8, i8* %p, i32 -256 307*9880d681SAndroid Build Coastguard Worker %tmp1 = bitcast i8* %tmp0 to <2 x float>* 308*9880d681SAndroid Build Coastguard Worker store <2 x float> %v, <2 x float>* %tmp1, align 1, !nontemporal !0 309*9880d681SAndroid Build Coastguard Worker ret void 310*9880d681SAndroid Build Coastguard Worker} 311*9880d681SAndroid Build Coastguard Worker 312*9880d681SAndroid Build Coastguard Workerdeclare void @dummy(<4 x float>*) 313*9880d681SAndroid Build Coastguard Worker 314*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32_offset_alloca(<4 x float> %v) #0 { 315*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32_offset_alloca: 316*9880d681SAndroid Build Coastguard Worker; CHECK: stnp d0, d{{.*}}, [sp] 317*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x0, sp 318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl _dummy 319*9880d681SAndroid Build Coastguard Worker %tmp0 = alloca <4 x float> 320*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %tmp0, align 1, !nontemporal !0 321*9880d681SAndroid Build Coastguard Worker call void @dummy(<4 x float>* %tmp0) 322*9880d681SAndroid Build Coastguard Worker ret void 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Workerdefine void @test_stnp_v4f32_offset_alloca_2(<4 x float> %v) #0 { 326*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test_stnp_v4f32_offset_alloca_2: 327*9880d681SAndroid Build Coastguard Worker; CHECK: stnp d0, d{{.*}}, [sp, #16] 328*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov x0, sp 329*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bl _dummy 330*9880d681SAndroid Build Coastguard Worker %tmp0 = alloca <4 x float>, i32 2 331*9880d681SAndroid Build Coastguard Worker %tmp1 = getelementptr <4 x float>, <4 x float>* %tmp0, i32 1 332*9880d681SAndroid Build Coastguard Worker store <4 x float> %v, <4 x float>* %tmp1, align 1, !nontemporal !0 333*9880d681SAndroid Build Coastguard Worker call void @dummy(<4 x float>* %tmp0) 334*9880d681SAndroid Build Coastguard Worker ret void 335*9880d681SAndroid Build Coastguard Worker} 336*9880d681SAndroid Build Coastguard Worker 337*9880d681SAndroid Build Coastguard Worker!0 = !{ i32 1 } 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind } 340