brintos

brintos / llvm-project-archived public Read only

0
0
Text · 25.0 KiB · 61746e6 Raw
799 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple aarch64 | FileCheck %s --check-prefixes=CHECK-LE3; RUN: llc < %s -mtriple aarch64_be | FileCheck %s --check-prefixes=CHECK-BE4 5define void @test_stnp_v4i64(ptr %p, <4 x i64> %v) #0 {6; CHECK-LE-LABEL: test_stnp_v4i64:7; CHECK-LE:       // %bb.0:8; CHECK-LE-NEXT:    stnp q0, q1, [x0]9; CHECK-LE-NEXT:    ret10;11; CHECK-BE-LABEL: test_stnp_v4i64:12; CHECK-BE:       // %bb.0:13; CHECK-BE-NEXT:    stp q0, q1, [x0]14; CHECK-BE-NEXT:    ret15  store <4 x i64> %v, ptr %p, align 1, !nontemporal !016  ret void17}18 19define void @test_stnp_v4i32(ptr %p, <4 x i32> %v) #0 {20; CHECK-LE-LABEL: test_stnp_v4i32:21; CHECK-LE:       // %bb.0:22; CHECK-LE-NEXT:    mov d1, v0.d[1]23; CHECK-LE-NEXT:    stnp d0, d1, [x0]24; CHECK-LE-NEXT:    ret25;26; CHECK-BE-LABEL: test_stnp_v4i32:27; CHECK-BE:       // %bb.0:28; CHECK-BE-NEXT:    str q0, [x0]29; CHECK-BE-NEXT:    ret30  store <4 x i32> %v, ptr %p, align 1, !nontemporal !031  ret void32}33 34define void @test_stnp_v8i16(ptr %p, <8 x i16> %v) #0 {35; CHECK-LE-LABEL: test_stnp_v8i16:36; CHECK-LE:       // %bb.0:37; CHECK-LE-NEXT:    mov d1, v0.d[1]38; CHECK-LE-NEXT:    stnp d0, d1, [x0]39; CHECK-LE-NEXT:    ret40;41; CHECK-BE-LABEL: test_stnp_v8i16:42; CHECK-BE:       // %bb.0:43; CHECK-BE-NEXT:    str q0, [x0]44; CHECK-BE-NEXT:    ret45  store <8 x i16> %v, ptr %p, align 1, !nontemporal !046  ret void47}48 49define void @test_stnp_v16i8(ptr %p, <16 x i8> %v) #0 {50; CHECK-LE-LABEL: test_stnp_v16i8:51; CHECK-LE:       // %bb.0:52; CHECK-LE-NEXT:    mov d1, v0.d[1]53; CHECK-LE-NEXT:    stnp d0, d1, [x0]54; CHECK-LE-NEXT:    ret55;56; CHECK-BE-LABEL: test_stnp_v16i8:57; CHECK-BE:       // %bb.0:58; CHECK-BE-NEXT:    str q0, [x0]59; CHECK-BE-NEXT:    ret60  store <16 x i8> %v, ptr %p, align 1, !nontemporal !061  ret void62}63 64define void @test_stnp_v2i32(ptr %p, <2 x i32> %v) #0 {65; CHECK-LE-LABEL: test_stnp_v2i32:66; CHECK-LE:       // %bb.0:67; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q068; CHECK-LE-NEXT:    mov s1, v0.s[1]69; CHECK-LE-NEXT:    stnp s0, s1, [x0]70; CHECK-LE-NEXT:    ret71;72; CHECK-BE-LABEL: test_stnp_v2i32:73; CHECK-BE:       // %bb.0:74; CHECK-BE-NEXT:    str d0, [x0]75; CHECK-BE-NEXT:    ret76  store <2 x i32> %v, ptr %p, align 1, !nontemporal !077  ret void78}79 80define void @test_stnp_v4i16(ptr %p, <4 x i16> %v) #0 {81; CHECK-LE-LABEL: test_stnp_v4i16:82; CHECK-LE:       // %bb.0:83; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q084; CHECK-LE-NEXT:    mov s1, v0.s[1]85; CHECK-LE-NEXT:    stnp s0, s1, [x0]86; CHECK-LE-NEXT:    ret87;88; CHECK-BE-LABEL: test_stnp_v4i16:89; CHECK-BE:       // %bb.0:90; CHECK-BE-NEXT:    str d0, [x0]91; CHECK-BE-NEXT:    ret92  store <4 x i16> %v, ptr %p, align 1, !nontemporal !093  ret void94}95 96define void @test_stnp_v8i8(ptr %p, <8 x i8> %v) #0 {97; CHECK-LE-LABEL: test_stnp_v8i8:98; CHECK-LE:       // %bb.0:99; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0100; CHECK-LE-NEXT:    mov s1, v0.s[1]101; CHECK-LE-NEXT:    stnp s0, s1, [x0]102; CHECK-LE-NEXT:    ret103;104; CHECK-BE-LABEL: test_stnp_v8i8:105; CHECK-BE:       // %bb.0:106; CHECK-BE-NEXT:    str d0, [x0]107; CHECK-BE-NEXT:    ret108  store <8 x i8> %v, ptr %p, align 1, !nontemporal !0109  ret void110}111 112define void @test_stnp_v2f64(ptr %p, <2 x double> %v) #0 {113; CHECK-LE-LABEL: test_stnp_v2f64:114; CHECK-LE:       // %bb.0:115; CHECK-LE-NEXT:    mov d1, v0.d[1]116; CHECK-LE-NEXT:    stnp d0, d1, [x0]117; CHECK-LE-NEXT:    ret118;119; CHECK-BE-LABEL: test_stnp_v2f64:120; CHECK-BE:       // %bb.0:121; CHECK-BE-NEXT:    str q0, [x0]122; CHECK-BE-NEXT:    ret123  store <2 x double> %v, ptr %p, align 1, !nontemporal !0124  ret void125}126 127define void @test_stnp_v4f32(ptr %p, <4 x float> %v) #0 {128; CHECK-LE-LABEL: test_stnp_v4f32:129; CHECK-LE:       // %bb.0:130; CHECK-LE-NEXT:    mov d1, v0.d[1]131; CHECK-LE-NEXT:    stnp d0, d1, [x0]132; CHECK-LE-NEXT:    ret133;134; CHECK-BE-LABEL: test_stnp_v4f32:135; CHECK-BE:       // %bb.0:136; CHECK-BE-NEXT:    str q0, [x0]137; CHECK-BE-NEXT:    ret138  store <4 x float> %v, ptr %p, align 1, !nontemporal !0139  ret void140}141 142define void @test_stnp_v2f32(ptr %p, <2 x float> %v) #0 {143; CHECK-LE-LABEL: test_stnp_v2f32:144; CHECK-LE:       // %bb.0:145; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0146; CHECK-LE-NEXT:    mov s1, v0.s[1]147; CHECK-LE-NEXT:    stnp s0, s1, [x0]148; CHECK-LE-NEXT:    ret149;150; CHECK-BE-LABEL: test_stnp_v2f32:151; CHECK-BE:       // %bb.0:152; CHECK-BE-NEXT:    str d0, [x0]153; CHECK-BE-NEXT:    ret154  store <2 x float> %v, ptr %p, align 1, !nontemporal !0155  ret void156}157 158define void @test_stnp_v1f64(ptr %p, <1 x double> %v) #0 {159; CHECK-LE-LABEL: test_stnp_v1f64:160; CHECK-LE:       // %bb.0:161; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0162; CHECK-LE-NEXT:    mov s1, v0.s[1]163; CHECK-LE-NEXT:    stnp s0, s1, [x0]164; CHECK-LE-NEXT:    ret165;166; CHECK-BE-LABEL: test_stnp_v1f64:167; CHECK-BE:       // %bb.0:168; CHECK-BE-NEXT:    str d0, [x0]169; CHECK-BE-NEXT:    ret170  store <1 x double> %v, ptr %p, align 1, !nontemporal !0171  ret void172}173 174define void @test_stnp_v1i64(ptr %p, <1 x i64> %v) #0 {175; CHECK-LE-LABEL: test_stnp_v1i64:176; CHECK-LE:       // %bb.0:177; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0178; CHECK-LE-NEXT:    mov s1, v0.s[1]179; CHECK-LE-NEXT:    stnp s0, s1, [x0]180; CHECK-LE-NEXT:    ret181;182; CHECK-BE-LABEL: test_stnp_v1i64:183; CHECK-BE:       // %bb.0:184; CHECK-BE-NEXT:    str d0, [x0]185; CHECK-BE-NEXT:    ret186  store <1 x i64> %v, ptr %p, align 1, !nontemporal !0187  ret void188}189 190define void @test_stnp_i64(ptr %p, i64 %v) #0 {191; CHECK-LE-LABEL: test_stnp_i64:192; CHECK-LE:       // %bb.0:193; CHECK-LE-NEXT:    lsr x8, x1, #32194; CHECK-LE-NEXT:    stnp w1, w8, [x0]195; CHECK-LE-NEXT:    ret196;197; CHECK-BE-LABEL: test_stnp_i64:198; CHECK-BE:       // %bb.0:199; CHECK-BE-NEXT:    str x1, [x0]200; CHECK-BE-NEXT:    ret201  store i64 %v, ptr %p, align 1, !nontemporal !0202  ret void203}204 205 206define void @test_stnp_v2f64_offset(ptr %p, <2 x double> %v) #0 {207; CHECK-LE-LABEL: test_stnp_v2f64_offset:208; CHECK-LE:       // %bb.0:209; CHECK-LE-NEXT:    mov d1, v0.d[1]210; CHECK-LE-NEXT:    stnp d0, d1, [x0, #16]211; CHECK-LE-NEXT:    ret212;213; CHECK-BE-LABEL: test_stnp_v2f64_offset:214; CHECK-BE:       // %bb.0:215; CHECK-BE-NEXT:    str q0, [x0, #16]216; CHECK-BE-NEXT:    ret217  %tmp0 = getelementptr <2 x double>, ptr %p, i32 1218  store <2 x double> %v, ptr %tmp0, align 1, !nontemporal !0219  ret void220}221 222define void @test_stnp_v2f64_offset_neg(ptr %p, <2 x double> %v) #0 {223; CHECK-LE-LABEL: test_stnp_v2f64_offset_neg:224; CHECK-LE:       // %bb.0:225; CHECK-LE-NEXT:    mov d1, v0.d[1]226; CHECK-LE-NEXT:    stnp d0, d1, [x0, #-16]227; CHECK-LE-NEXT:    ret228;229; CHECK-BE-LABEL: test_stnp_v2f64_offset_neg:230; CHECK-BE:       // %bb.0:231; CHECK-BE-NEXT:    stur q0, [x0, #-16]232; CHECK-BE-NEXT:    ret233  %tmp0 = getelementptr <2 x double>, ptr %p, i32 -1234  store <2 x double> %v, ptr %tmp0, align 1, !nontemporal !0235  ret void236}237 238define void @test_stnp_v2f32_offset(ptr %p, <2 x float> %v) #0 {239; CHECK-LE-LABEL: test_stnp_v2f32_offset:240; CHECK-LE:       // %bb.0:241; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0242; CHECK-LE-NEXT:    mov s1, v0.s[1]243; CHECK-LE-NEXT:    stnp s0, s1, [x0, #8]244; CHECK-LE-NEXT:    ret245;246; CHECK-BE-LABEL: test_stnp_v2f32_offset:247; CHECK-BE:       // %bb.0:248; CHECK-BE-NEXT:    str d0, [x0, #8]249; CHECK-BE-NEXT:    ret250  %tmp0 = getelementptr <2 x float>, ptr %p, i32 1251  store <2 x float> %v, ptr %tmp0, align 1, !nontemporal !0252  ret void253}254 255define void @test_stnp_v2f32_offset_neg(ptr %p, <2 x float> %v) #0 {256; CHECK-LE-LABEL: test_stnp_v2f32_offset_neg:257; CHECK-LE:       // %bb.0:258; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0259; CHECK-LE-NEXT:    mov s1, v0.s[1]260; CHECK-LE-NEXT:    stnp s0, s1, [x0, #-8]261; CHECK-LE-NEXT:    ret262;263; CHECK-BE-LABEL: test_stnp_v2f32_offset_neg:264; CHECK-BE:       // %bb.0:265; CHECK-BE-NEXT:    stur d0, [x0, #-8]266; CHECK-BE-NEXT:    ret267  %tmp0 = getelementptr <2 x float>, ptr %p, i32 -1268  store <2 x float> %v, ptr %tmp0, align 1, !nontemporal !0269  ret void270}271 272define void @test_stnp_i64_offset(ptr %p, i64 %v) #0 {273; CHECK-LE-LABEL: test_stnp_i64_offset:274; CHECK-LE:       // %bb.0:275; CHECK-LE-NEXT:    lsr x8, x1, #32276; CHECK-LE-NEXT:    stnp w1, w8, [x0, #8]277; CHECK-LE-NEXT:    ret278;279; CHECK-BE-LABEL: test_stnp_i64_offset:280; CHECK-BE:       // %bb.0:281; CHECK-BE-NEXT:    str x1, [x0, #8]282; CHECK-BE-NEXT:    ret283  %tmp0 = getelementptr i64, ptr %p, i32 1284  store i64 %v, ptr %tmp0, align 1, !nontemporal !0285  ret void286}287 288define void @test_stnp_i64_offset_neg(ptr %p, i64 %v) #0 {289; CHECK-LE-LABEL: test_stnp_i64_offset_neg:290; CHECK-LE:       // %bb.0:291; CHECK-LE-NEXT:    lsr x8, x1, #32292; CHECK-LE-NEXT:    stnp w1, w8, [x0, #-8]293; CHECK-LE-NEXT:    ret294;295; CHECK-BE-LABEL: test_stnp_i64_offset_neg:296; CHECK-BE:       // %bb.0:297; CHECK-BE-NEXT:    stur x1, [x0, #-8]298; CHECK-BE-NEXT:    ret299  %tmp0 = getelementptr i64, ptr %p, i32 -1300  store i64 %v, ptr %tmp0, align 1, !nontemporal !0301  ret void302}303 304define void @test_stnp_v4f32_invalid_offset_4(ptr %p, <4 x float> %v) #0 {305; CHECK-LE-LABEL: test_stnp_v4f32_invalid_offset_4:306; CHECK-LE:       // %bb.0:307; CHECK-LE-NEXT:    mov d1, v0.d[1]308; CHECK-LE-NEXT:    add x8, x0, #4309; CHECK-LE-NEXT:    stnp d0, d1, [x8]310; CHECK-LE-NEXT:    ret311;312; CHECK-BE-LABEL: test_stnp_v4f32_invalid_offset_4:313; CHECK-BE:       // %bb.0:314; CHECK-BE-NEXT:    stur q0, [x0, #4]315; CHECK-BE-NEXT:    ret316  %tmp0 = getelementptr i8, ptr %p, i32 4317  store <4 x float> %v, ptr %tmp0, align 1, !nontemporal !0318  ret void319}320 321define void @test_stnp_v4f32_invalid_offset_neg_4(ptr %p, <4 x float> %v) #0 {322; CHECK-LE-LABEL: test_stnp_v4f32_invalid_offset_neg_4:323; CHECK-LE:       // %bb.0:324; CHECK-LE-NEXT:    mov d1, v0.d[1]325; CHECK-LE-NEXT:    sub x8, x0, #4326; CHECK-LE-NEXT:    stnp d0, d1, [x8]327; CHECK-LE-NEXT:    ret328;329; CHECK-BE-LABEL: test_stnp_v4f32_invalid_offset_neg_4:330; CHECK-BE:       // %bb.0:331; CHECK-BE-NEXT:    stur q0, [x0, #-4]332; CHECK-BE-NEXT:    ret333  %tmp0 = getelementptr i8, ptr %p, i32 -4334  store <4 x float> %v, ptr %tmp0, align 1, !nontemporal !0335  ret void336}337 338define void @test_stnp_v4f32_invalid_offset_512(ptr %p, <4 x float> %v) #0 {339; CHECK-LE-LABEL: test_stnp_v4f32_invalid_offset_512:340; CHECK-LE:       // %bb.0:341; CHECK-LE-NEXT:    mov d1, v0.d[1]342; CHECK-LE-NEXT:    add x8, x0, #512343; CHECK-LE-NEXT:    stnp d0, d1, [x8]344; CHECK-LE-NEXT:    ret345;346; CHECK-BE-LABEL: test_stnp_v4f32_invalid_offset_512:347; CHECK-BE:       // %bb.0:348; CHECK-BE-NEXT:    str q0, [x0, #512]349; CHECK-BE-NEXT:    ret350  %tmp0 = getelementptr i8, ptr %p, i32 512351  store <4 x float> %v, ptr %tmp0, align 1, !nontemporal !0352  ret void353}354 355define void @test_stnp_v4f32_offset_504(ptr %p, <4 x float> %v) #0 {356; CHECK-LE-LABEL: test_stnp_v4f32_offset_504:357; CHECK-LE:       // %bb.0:358; CHECK-LE-NEXT:    mov d1, v0.d[1]359; CHECK-LE-NEXT:    stnp d0, d1, [x0, #504]360; CHECK-LE-NEXT:    ret361;362; CHECK-BE-LABEL: test_stnp_v4f32_offset_504:363; CHECK-BE:       // %bb.0:364; CHECK-BE-NEXT:    add x8, x0, #504365; CHECK-BE-NEXT:    str q0, [x8]366; CHECK-BE-NEXT:    ret367  %tmp0 = getelementptr i8, ptr %p, i32 504368  store <4 x float> %v, ptr %tmp0, align 1, !nontemporal !0369  ret void370}371 372define void @test_stnp_v4f32_invalid_offset_508(ptr %p, <4 x float> %v) #0 {373; CHECK-LE-LABEL: test_stnp_v4f32_invalid_offset_508:374; CHECK-LE:       // %bb.0:375; CHECK-LE-NEXT:    mov d1, v0.d[1]376; CHECK-LE-NEXT:    add x8, x0, #508377; CHECK-LE-NEXT:    stnp d0, d1, [x8]378; CHECK-LE-NEXT:    ret379;380; CHECK-BE-LABEL: test_stnp_v4f32_invalid_offset_508:381; CHECK-BE:       // %bb.0:382; CHECK-BE-NEXT:    add x8, x0, #508383; CHECK-BE-NEXT:    str q0, [x8]384; CHECK-BE-NEXT:    ret385  %tmp0 = getelementptr i8, ptr %p, i32 508386  store <4 x float> %v, ptr %tmp0, align 1, !nontemporal !0387  ret void388}389 390define void @test_stnp_v4f32_invalid_offset_neg_520(ptr %p, <4 x float> %v) #0 {391; CHECK-LE-LABEL: test_stnp_v4f32_invalid_offset_neg_520:392; CHECK-LE:       // %bb.0:393; CHECK-LE-NEXT:    mov d1, v0.d[1]394; CHECK-LE-NEXT:    sub x8, x0, #520395; CHECK-LE-NEXT:    stnp d0, d1, [x8]396; CHECK-LE-NEXT:    ret397;398; CHECK-BE-LABEL: test_stnp_v4f32_invalid_offset_neg_520:399; CHECK-BE:       // %bb.0:400; CHECK-BE-NEXT:    sub x8, x0, #520401; CHECK-BE-NEXT:    str q0, [x8]402; CHECK-BE-NEXT:    ret403  %tmp0 = getelementptr i8, ptr %p, i32 -520404  store <4 x float> %v, ptr %tmp0, align 1, !nontemporal !0405  ret void406}407 408define void @test_stnp_v4f32_offset_neg_512(ptr %p, <4 x float> %v) #0 {409; CHECK-LE-LABEL: test_stnp_v4f32_offset_neg_512:410; CHECK-LE:       // %bb.0:411; CHECK-LE-NEXT:    mov d1, v0.d[1]412; CHECK-LE-NEXT:    stnp d0, d1, [x0, #-512]413; CHECK-LE-NEXT:    ret414;415; CHECK-BE-LABEL: test_stnp_v4f32_offset_neg_512:416; CHECK-BE:       // %bb.0:417; CHECK-BE-NEXT:    sub x8, x0, #512418; CHECK-BE-NEXT:    str q0, [x8]419; CHECK-BE-NEXT:    ret420  %tmp0 = getelementptr i8, ptr %p, i32 -512421  store <4 x float> %v, ptr %tmp0, align 1, !nontemporal !0422  ret void423}424 425 426define void @test_stnp_v2f32_invalid_offset_256(ptr %p, <2 x float> %v) #0 {427; CHECK-LE-LABEL: test_stnp_v2f32_invalid_offset_256:428; CHECK-LE:       // %bb.0:429; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0430; CHECK-LE-NEXT:    mov s1, v0.s[1]431; CHECK-LE-NEXT:    add x8, x0, #256432; CHECK-LE-NEXT:    stnp s0, s1, [x8]433; CHECK-LE-NEXT:    ret434;435; CHECK-BE-LABEL: test_stnp_v2f32_invalid_offset_256:436; CHECK-BE:       // %bb.0:437; CHECK-BE-NEXT:    str d0, [x0, #256]438; CHECK-BE-NEXT:    ret439  %tmp0 = getelementptr i8, ptr %p, i32 256440  store <2 x float> %v, ptr %tmp0, align 1, !nontemporal !0441  ret void442}443 444define void @test_stnp_v2f32_offset_252(ptr %p, <2 x float> %v) #0 {445; CHECK-LE-LABEL: test_stnp_v2f32_offset_252:446; CHECK-LE:       // %bb.0:447; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0448; CHECK-LE-NEXT:    mov s1, v0.s[1]449; CHECK-LE-NEXT:    stnp s0, s1, [x0, #252]450; CHECK-LE-NEXT:    ret451;452; CHECK-BE-LABEL: test_stnp_v2f32_offset_252:453; CHECK-BE:       // %bb.0:454; CHECK-BE-NEXT:    stur d0, [x0, #252]455; CHECK-BE-NEXT:    ret456  %tmp0 = getelementptr i8, ptr %p, i32 252457  store <2 x float> %v, ptr %tmp0, align 1, !nontemporal !0458  ret void459}460 461define void @test_stnp_v2f32_invalid_offset_neg_260(ptr %p, <2 x float> %v) #0 {462; CHECK-LE-LABEL: test_stnp_v2f32_invalid_offset_neg_260:463; CHECK-LE:       // %bb.0:464; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0465; CHECK-LE-NEXT:    mov s1, v0.s[1]466; CHECK-LE-NEXT:    sub x8, x0, #260467; CHECK-LE-NEXT:    stnp s0, s1, [x8]468; CHECK-LE-NEXT:    ret469;470; CHECK-BE-LABEL: test_stnp_v2f32_invalid_offset_neg_260:471; CHECK-BE:       // %bb.0:472; CHECK-BE-NEXT:    sub x8, x0, #260473; CHECK-BE-NEXT:    str d0, [x8]474; CHECK-BE-NEXT:    ret475  %tmp0 = getelementptr i8, ptr %p, i32 -260476  store <2 x float> %v, ptr %tmp0, align 1, !nontemporal !0477  ret void478}479 480define void @test_stnp_v2f32_offset_neg_256(ptr %p, <2 x float> %v) #0 {481; CHECK-LE-LABEL: test_stnp_v2f32_offset_neg_256:482; CHECK-LE:       // %bb.0:483; CHECK-LE-NEXT:    // kill: def $d0 killed $d0 def $q0484; CHECK-LE-NEXT:    mov s1, v0.s[1]485; CHECK-LE-NEXT:    stnp s0, s1, [x0, #-256]486; CHECK-LE-NEXT:    ret487;488; CHECK-BE-LABEL: test_stnp_v2f32_offset_neg_256:489; CHECK-BE:       // %bb.0:490; CHECK-BE-NEXT:    stur d0, [x0, #-256]491; CHECK-BE-NEXT:    ret492  %tmp0 = getelementptr i8, ptr %p, i32 -256493  store <2 x float> %v, ptr %tmp0, align 1, !nontemporal !0494  ret void495}496 497declare void @dummy(ptr)498 499define void @test_stnp_v4f32_offset_alloca(<4 x float> %v) #0 {500; CHECK-LE-LABEL: test_stnp_v4f32_offset_alloca:501; CHECK-LE:       // %bb.0:502; CHECK-LE-NEXT:    sub sp, sp, #32503; CHECK-LE-NEXT:    mov d1, v0.d[1]504; CHECK-LE-NEXT:    mov x0, sp505; CHECK-LE-NEXT:    str x30, [sp, #16] // 8-byte Spill506; CHECK-LE-NEXT:    stnp d0, d1, [sp]507; CHECK-LE-NEXT:    bl dummy508; CHECK-LE-NEXT:    ldr x30, [sp, #16] // 8-byte Reload509; CHECK-LE-NEXT:    add sp, sp, #32510; CHECK-LE-NEXT:    ret511;512; CHECK-BE-LABEL: test_stnp_v4f32_offset_alloca:513; CHECK-BE:       // %bb.0:514; CHECK-BE-NEXT:    sub sp, sp, #32515; CHECK-BE-NEXT:    mov x0, sp516; CHECK-BE-NEXT:    str x30, [sp, #16] // 8-byte Spill517; CHECK-BE-NEXT:    str q0, [sp]518; CHECK-BE-NEXT:    bl dummy519; CHECK-BE-NEXT:    ldr x30, [sp, #16] // 8-byte Reload520; CHECK-BE-NEXT:    add sp, sp, #32521; CHECK-BE-NEXT:    ret522  %tmp0 = alloca <4 x float>523  store <4 x float> %v, ptr %tmp0, align 1, !nontemporal !0524  call void @dummy(ptr %tmp0)525  ret void526}527 528define void @test_stnp_v4f32_offset_alloca_2(<4 x float> %v) #0 {529; CHECK-LE-LABEL: test_stnp_v4f32_offset_alloca_2:530; CHECK-LE:       // %bb.0:531; CHECK-LE-NEXT:    sub sp, sp, #48532; CHECK-LE-NEXT:    mov d1, v0.d[1]533; CHECK-LE-NEXT:    mov x0, sp534; CHECK-LE-NEXT:    str x30, [sp, #32] // 8-byte Spill535; CHECK-LE-NEXT:    stnp d0, d1, [sp, #16]536; CHECK-LE-NEXT:    bl dummy537; CHECK-LE-NEXT:    ldr x30, [sp, #32] // 8-byte Reload538; CHECK-LE-NEXT:    add sp, sp, #48539; CHECK-LE-NEXT:    ret540;541; CHECK-BE-LABEL: test_stnp_v4f32_offset_alloca_2:542; CHECK-BE:       // %bb.0:543; CHECK-BE-NEXT:    sub sp, sp, #48544; CHECK-BE-NEXT:    mov x0, sp545; CHECK-BE-NEXT:    str x30, [sp, #32] // 8-byte Spill546; CHECK-BE-NEXT:    str q0, [sp, #16]547; CHECK-BE-NEXT:    bl dummy548; CHECK-BE-NEXT:    ldr x30, [sp, #32] // 8-byte Reload549; CHECK-BE-NEXT:    add sp, sp, #48550; CHECK-BE-NEXT:    ret551  %tmp0 = alloca <4 x float>, i32 2552  %tmp1 = getelementptr <4 x float>, ptr %tmp0, i32 1553  store <4 x float> %v, ptr %tmp1, align 1, !nontemporal !0554  call void @dummy(ptr %tmp0)555  ret void556}557 558define void @test_stnp_v32i8(<32 x i8> %v, ptr %ptr) {559; CHECK-LE-LABEL: test_stnp_v32i8:560; CHECK-LE:       // %bb.0: // %entry561; CHECK-LE-NEXT:    stnp q0, q1, [x0]562; CHECK-LE-NEXT:    ret563;564; CHECK-BE-LABEL: test_stnp_v32i8:565; CHECK-BE:       // %bb.0: // %entry566; CHECK-BE-NEXT:    stp q0, q1, [x0]567; CHECK-BE-NEXT:    ret568entry:569  store <32 x i8> %v, ptr %ptr, align 4, !nontemporal !0570  ret void571}572 573define void @test_stnp_v32i16(<32 x i16> %v, ptr %ptr) {574; CHECK-LE-LABEL: test_stnp_v32i16:575; CHECK-LE:       // %bb.0: // %entry576; CHECK-LE-NEXT:    stnp q2, q3, [x0, #32]577; CHECK-LE-NEXT:    stnp q0, q1, [x0]578; CHECK-LE-NEXT:    ret579;580; CHECK-BE-LABEL: test_stnp_v32i16:581; CHECK-BE:       // %bb.0: // %entry582; CHECK-BE-NEXT:    stp q0, q1, [x0]583; CHECK-BE-NEXT:    stp q2, q3, [x0, #32]584; CHECK-BE-NEXT:    ret585entry:586  store <32 x i16> %v, ptr %ptr, align 4, !nontemporal !0587  ret void588}589 590define void @test_stnp_v32f16(<32 x half> %v, ptr %ptr) {591; CHECK-LE-LABEL: test_stnp_v32f16:592; CHECK-LE:       // %bb.0: // %entry593; CHECK-LE-NEXT:    stnp q2, q3, [x0, #32]594; CHECK-LE-NEXT:    stnp q0, q1, [x0]595; CHECK-LE-NEXT:    ret596;597; CHECK-BE-LABEL: test_stnp_v32f16:598; CHECK-BE:       // %bb.0: // %entry599; CHECK-BE-NEXT:    stp q0, q1, [x0]600; CHECK-BE-NEXT:    stp q2, q3, [x0, #32]601; CHECK-BE-NEXT:    ret602entry:603  store <32 x half> %v, ptr %ptr, align 4, !nontemporal !0604  ret void605}606 607define void @test_stnp_v16i32(<16 x i32> %v, ptr %ptr) {608; CHECK-LE-LABEL: test_stnp_v16i32:609; CHECK-LE:       // %bb.0: // %entry610; CHECK-LE-NEXT:    stnp q2, q3, [x0, #32]611; CHECK-LE-NEXT:    stnp q0, q1, [x0]612; CHECK-LE-NEXT:    ret613;614; CHECK-BE-LABEL: test_stnp_v16i32:615; CHECK-BE:       // %bb.0: // %entry616; CHECK-BE-NEXT:    stp q0, q1, [x0]617; CHECK-BE-NEXT:    stp q2, q3, [x0, #32]618; CHECK-BE-NEXT:    ret619entry:620  store <16 x i32> %v, ptr %ptr, align 4, !nontemporal !0621  ret void622}623 624define void @test_stnp_v16f32(<16 x float> %v, ptr %ptr) {625; CHECK-LE-LABEL: test_stnp_v16f32:626; CHECK-LE:       // %bb.0: // %entry627; CHECK-LE-NEXT:    stnp q2, q3, [x0, #32]628; CHECK-LE-NEXT:    stnp q0, q1, [x0]629; CHECK-LE-NEXT:    ret630;631; CHECK-BE-LABEL: test_stnp_v16f32:632; CHECK-BE:       // %bb.0: // %entry633; CHECK-BE-NEXT:    stp q0, q1, [x0]634; CHECK-BE-NEXT:    stp q2, q3, [x0, #32]635; CHECK-BE-NEXT:    ret636entry:637  store <16 x float> %v, ptr %ptr, align 4, !nontemporal !0638  ret void639}640 641define void @test_stnp_v17f32(<17 x float> %v, ptr %ptr) {642; CHECK-LE-LABEL: test_stnp_v17f32:643; CHECK-LE:       // %bb.0: // %entry644; CHECK-LE-NEXT:    // kill: def $s4 killed $s4 def $q4645; CHECK-LE-NEXT:    // kill: def $s0 killed $s0 def $q0646; CHECK-LE-NEXT:    ldr s16, [sp, #32]647; CHECK-LE-NEXT:    // kill: def $s5 killed $s5 def $q5648; CHECK-LE-NEXT:    // kill: def $s1 killed $s1 def $q1649; CHECK-LE-NEXT:    add x8, sp, #40650; CHECK-LE-NEXT:    // kill: def $s6 killed $s6 def $q6651; CHECK-LE-NEXT:    // kill: def $s2 killed $s2 def $q2652; CHECK-LE-NEXT:    // kill: def $s7 killed $s7 def $q7653; CHECK-LE-NEXT:    // kill: def $s3 killed $s3 def $q3654; CHECK-LE-NEXT:    mov v4.s[1], v5.s[0]655; CHECK-LE-NEXT:    mov v0.s[1], v1.s[0]656; CHECK-LE-NEXT:    ldr s5, [sp]657; CHECK-LE-NEXT:    ld1 { v16.s }[1], [x8]658; CHECK-LE-NEXT:    add x8, sp, #8659; CHECK-LE-NEXT:    ld1 { v5.s }[1], [x8]660; CHECK-LE-NEXT:    add x8, sp, #48661; CHECK-LE-NEXT:    mov v4.s[2], v6.s[0]662; CHECK-LE-NEXT:    ld1 { v16.s }[2], [x8]663; CHECK-LE-NEXT:    mov v0.s[2], v2.s[0]664; CHECK-LE-NEXT:    add x8, sp, #16665; CHECK-LE-NEXT:    ld1 { v5.s }[2], [x8]666; CHECK-LE-NEXT:    add x8, sp, #56667; CHECK-LE-NEXT:    ld1 { v16.s }[3], [x8]668; CHECK-LE-NEXT:    add x8, sp, #24669; CHECK-LE-NEXT:    mov v4.s[3], v7.s[0]670; CHECK-LE-NEXT:    mov v0.s[3], v3.s[0]671; CHECK-LE-NEXT:    ld1 { v5.s }[3], [x8]672; CHECK-LE-NEXT:    mov d1, v16.d[1]673; CHECK-LE-NEXT:    mov d2, v5.d[1]674; CHECK-LE-NEXT:    mov d3, v4.d[1]675; CHECK-LE-NEXT:    mov d6, v0.d[1]676; CHECK-LE-NEXT:    stnp d16, d1, [x0, #48]677; CHECK-LE-NEXT:    ldr s1, [sp, #64]678; CHECK-LE-NEXT:    stnp d5, d2, [x0, #32]679; CHECK-LE-NEXT:    stnp d4, d3, [x0, #16]680; CHECK-LE-NEXT:    stnp d0, d6, [x0]681; CHECK-LE-NEXT:    str s1, [x0, #64]682; CHECK-LE-NEXT:    ret683;684; CHECK-BE-LABEL: test_stnp_v17f32:685; CHECK-BE:       // %bb.0: // %entry686; CHECK-BE-NEXT:    // kill: def $s1 killed $s1 def $q1687; CHECK-BE-NEXT:    // kill: def $s0 killed $s0 def $q0688; CHECK-BE-NEXT:    // kill: def $s4 killed $s4 def $q4689; CHECK-BE-NEXT:    // kill: def $s5 killed $s5 def $q5690; CHECK-BE-NEXT:    add x8, sp, #12691; CHECK-BE-NEXT:    add x9, sp, #20692; CHECK-BE-NEXT:    ldr s16, [sp, #36]693; CHECK-BE-NEXT:    mov v0.s[1], v1.s[0]694; CHECK-BE-NEXT:    ldr s1, [sp, #4]695; CHECK-BE-NEXT:    mov v4.s[1], v5.s[0]696; CHECK-BE-NEXT:    add x10, sp, #52697; CHECK-BE-NEXT:    // kill: def $s6 killed $s6 def $q6698; CHECK-BE-NEXT:    // kill: def $s2 killed $s2 def $q2699; CHECK-BE-NEXT:    // kill: def $s7 killed $s7 def $q7700; CHECK-BE-NEXT:    // kill: def $s3 killed $s3 def $q3701; CHECK-BE-NEXT:    ld1 { v1.s }[1], [x8]702; CHECK-BE-NEXT:    ldr s5, [x9]703; CHECK-BE-NEXT:    add x8, sp, #28704; CHECK-BE-NEXT:    add x9, sp, #44705; CHECK-BE-NEXT:    ld1 { v5.s }[1], [x8]706; CHECK-BE-NEXT:    ld1 { v16.s }[1], [x9]707; CHECK-BE-NEXT:    ldr s17, [x10]708; CHECK-BE-NEXT:    add x8, sp, #60709; CHECK-BE-NEXT:    mov v4.s[2], v6.s[0]710; CHECK-BE-NEXT:    mov v0.s[2], v2.s[0]711; CHECK-BE-NEXT:    ld1 { v17.s }[1], [x8]712; CHECK-BE-NEXT:    ldr s2, [sp, #68]713; CHECK-BE-NEXT:    add x8, x0, #32714; CHECK-BE-NEXT:    zip1 v1.2d, v1.2d, v5.2d715; CHECK-BE-NEXT:    add x9, x0, #48716; CHECK-BE-NEXT:    str s2, [x0, #64]717; CHECK-BE-NEXT:    zip1 v5.2d, v16.2d, v17.2d718; CHECK-BE-NEXT:    mov v4.s[3], v7.s[0]719; CHECK-BE-NEXT:    mov v0.s[3], v3.s[0]720; CHECK-BE-NEXT:    st1 { v1.4s }, [x8]721; CHECK-BE-NEXT:    add x8, x0, #16722; CHECK-BE-NEXT:    st1 { v5.4s }, [x9]723; CHECK-BE-NEXT:    st1 { v4.4s }, [x8]724; CHECK-BE-NEXT:    st1 { v0.4s }, [x0]725; CHECK-BE-NEXT:    ret726entry:727  store <17 x float> %v, ptr %ptr, align 4, !nontemporal !0728  ret void729}730define void @test_stnp_v16i32_invalid_offset(<16 x i32> %v, ptr %ptr) {731; CHECK-LE-LABEL: test_stnp_v16i32_invalid_offset:732; CHECK-LE:       // %bb.0: // %entry733; CHECK-LE-NEXT:    mov w8, #32032 // =0x7d20734; CHECK-LE-NEXT:    mov w9, #32000 // =0x7d00735; CHECK-LE-NEXT:    add x8, x0, x8736; CHECK-LE-NEXT:    add x9, x0, x9737; CHECK-LE-NEXT:    stnp q2, q3, [x8]738; CHECK-LE-NEXT:    stnp q0, q1, [x9]739; CHECK-LE-NEXT:    ret740;741; CHECK-BE-LABEL: test_stnp_v16i32_invalid_offset:742; CHECK-BE:       // %bb.0: // %entry743; CHECK-BE-NEXT:    str q3, [x0, #32048]744; CHECK-BE-NEXT:    str q2, [x0, #32032]745; CHECK-BE-NEXT:    str q1, [x0, #32016]746; CHECK-BE-NEXT:    str q0, [x0, #32000]747; CHECK-BE-NEXT:    ret748entry:749  %gep = getelementptr <16 x i32>, ptr %ptr, i32 500750  store <16 x i32> %v, ptr %gep, align 4, !nontemporal !0751  ret void752}753 754define void @test_stnp_v16f64(<16 x double> %v, ptr %ptr) {755; CHECK-LE-LABEL: test_stnp_v16f64:756; CHECK-LE:       // %bb.0: // %entry757; CHECK-LE-NEXT:    stnp q6, q7, [x0, #96]758; CHECK-LE-NEXT:    stnp q4, q5, [x0, #64]759; CHECK-LE-NEXT:    stnp q2, q3, [x0, #32]760; CHECK-LE-NEXT:    stnp q0, q1, [x0]761; CHECK-LE-NEXT:    ret762;763; CHECK-BE-LABEL: test_stnp_v16f64:764; CHECK-BE:       // %bb.0: // %entry765; CHECK-BE-NEXT:    stp q0, q1, [x0]766; CHECK-BE-NEXT:    stp q2, q3, [x0, #32]767; CHECK-BE-NEXT:    stp q4, q5, [x0, #64]768; CHECK-BE-NEXT:    stp q6, q7, [x0, #96]769; CHECK-BE-NEXT:    ret770entry:771  store <16 x double> %v, ptr %ptr, align 4, !nontemporal !0772  ret void773}774 775define void @test_stnp_v16i64(<16 x i64> %v, ptr %ptr) {776; CHECK-LE-LABEL: test_stnp_v16i64:777; CHECK-LE:       // %bb.0: // %entry778; CHECK-LE-NEXT:    stnp q6, q7, [x0, #96]779; CHECK-LE-NEXT:    stnp q4, q5, [x0, #64]780; CHECK-LE-NEXT:    stnp q2, q3, [x0, #32]781; CHECK-LE-NEXT:    stnp q0, q1, [x0]782; CHECK-LE-NEXT:    ret783;784; CHECK-BE-LABEL: test_stnp_v16i64:785; CHECK-BE:       // %bb.0: // %entry786; CHECK-BE-NEXT:    stp q0, q1, [x0]787; CHECK-BE-NEXT:    stp q2, q3, [x0, #32]788; CHECK-BE-NEXT:    stp q4, q5, [x0, #64]789; CHECK-BE-NEXT:    stp q6, q7, [x0, #96]790; CHECK-BE-NEXT:    ret791entry:792  store <16 x i64> %v, ptr %ptr, align 4, !nontemporal !0793  ret void794}795 796!0 = !{ i32 1 }797 798attributes #0 = { nounwind }799