brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.3 KiB · daf2734 Raw
190 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve -force-streaming-compatible  < %s | FileCheck %s3; RUN: llc -mattr=+sme -force-streaming  < %s | FileCheck %s4; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE5 6target triple = "aarch64-unknown-linux-gnu"7 8define <4 x i32> @test(ptr %arg1, ptr %arg2) {9; CHECK-LABEL: test:10; CHECK:       // %bb.0: // %entry11; CHECK-NEXT:    ldp q0, q1, [x0, #32]12; CHECK-NEXT:    ldp q3, q4, [x0]13; CHECK-NEXT:    add z2.s, z0.s, z0.s14; CHECK-NEXT:    add z5.s, z1.s, z1.s15; CHECK-NEXT:    mov z0.s, z1.s[2]16; CHECK-NEXT:    add z1.s, z3.s, z3.s17; CHECK-NEXT:    add z3.s, z4.s, z4.s18; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z019; CHECK-NEXT:    stp q2, q5, [x0, #32]20; CHECK-NEXT:    stp q1, q3, [x0]21; CHECK-NEXT:    ret22;23; NONEON-NOSVE-LABEL: test:24; NONEON-NOSVE:       // %bb.0: // %entry25; NONEON-NOSVE-NEXT:    sub sp, sp, #14426; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 14427; NONEON-NOSVE-NEXT:    ldp q1, q0, [x0, #32]28; NONEON-NOSVE-NEXT:    ldp q2, q3, [x0]29; NONEON-NOSVE-NEXT:    str q1, [sp, #64]30; NONEON-NOSVE-NEXT:    stp q0, q3, [sp, #32]31; NONEON-NOSVE-NEXT:    ldr w9, [sp, #60]32; NONEON-NOSVE-NEXT:    str q2, [sp, #16]33; NONEON-NOSVE-NEXT:    ldr w8, [sp, #40]34; NONEON-NOSVE-NEXT:    add w9, w9, w935; NONEON-NOSVE-NEXT:    stp w8, w8, [sp, #8]36; NONEON-NOSVE-NEXT:    str w9, [sp, #124]37; NONEON-NOSVE-NEXT:    ldr w9, [sp, #56]38; NONEON-NOSVE-NEXT:    stp w8, w8, [sp]39; NONEON-NOSVE-NEXT:    add w8, w8, w840; NONEON-NOSVE-NEXT:    add w9, w9, w941; NONEON-NOSVE-NEXT:    ldr q0, [sp]42; NONEON-NOSVE-NEXT:    str w9, [sp, #120]43; NONEON-NOSVE-NEXT:    ldr w9, [sp, #52]44; NONEON-NOSVE-NEXT:    add w9, w9, w945; NONEON-NOSVE-NEXT:    str w9, [sp, #116]46; NONEON-NOSVE-NEXT:    ldr w9, [sp, #48]47; NONEON-NOSVE-NEXT:    add w9, w9, w948; NONEON-NOSVE-NEXT:    str w9, [sp, #112]49; NONEON-NOSVE-NEXT:    ldr w9, [sp, #28]50; NONEON-NOSVE-NEXT:    add w9, w9, w951; NONEON-NOSVE-NEXT:    str w9, [sp, #92]52; NONEON-NOSVE-NEXT:    ldr w9, [sp, #24]53; NONEON-NOSVE-NEXT:    add w9, w9, w954; NONEON-NOSVE-NEXT:    str w9, [sp, #88]55; NONEON-NOSVE-NEXT:    ldr w9, [sp, #20]56; NONEON-NOSVE-NEXT:    add w9, w9, w957; NONEON-NOSVE-NEXT:    str w9, [sp, #84]58; NONEON-NOSVE-NEXT:    ldr w9, [sp, #16]59; NONEON-NOSVE-NEXT:    add w9, w9, w960; NONEON-NOSVE-NEXT:    str w9, [sp, #80]61; NONEON-NOSVE-NEXT:    ldr w9, [sp, #44]62; NONEON-NOSVE-NEXT:    add w9, w9, w963; NONEON-NOSVE-NEXT:    stp w8, w9, [sp, #104]64; NONEON-NOSVE-NEXT:    ldr w8, [sp, #36]65; NONEON-NOSVE-NEXT:    add w8, w8, w866; NONEON-NOSVE-NEXT:    str w8, [sp, #100]67; NONEON-NOSVE-NEXT:    ldr w8, [sp, #32]68; NONEON-NOSVE-NEXT:    add w8, w8, w869; NONEON-NOSVE-NEXT:    str w8, [sp, #96]70; NONEON-NOSVE-NEXT:    ldr w8, [sp, #76]71; NONEON-NOSVE-NEXT:    ldp q4, q2, [sp, #80]72; NONEON-NOSVE-NEXT:    add w8, w8, w873; NONEON-NOSVE-NEXT:    str w8, [sp, #140]74; NONEON-NOSVE-NEXT:    ldr w8, [sp, #72]75; NONEON-NOSVE-NEXT:    add w8, w8, w876; NONEON-NOSVE-NEXT:    str w8, [sp, #136]77; NONEON-NOSVE-NEXT:    ldr w8, [sp, #68]78; NONEON-NOSVE-NEXT:    add w8, w8, w879; NONEON-NOSVE-NEXT:    str w8, [sp, #132]80; NONEON-NOSVE-NEXT:    ldr w8, [sp, #64]81; NONEON-NOSVE-NEXT:    add w8, w8, w882; NONEON-NOSVE-NEXT:    str w8, [sp, #128]83; NONEON-NOSVE-NEXT:    ldp q3, q1, [sp, #112]84; NONEON-NOSVE-NEXT:    stp q4, q3, [x0]85; NONEON-NOSVE-NEXT:    stp q1, q2, [x0, #32]86; NONEON-NOSVE-NEXT:    add sp, sp, #14487; NONEON-NOSVE-NEXT:    ret88entry:89  %0 = load <16 x i32>, ptr %arg1, align 25690  %1 = load <16 x i32>, ptr %arg2, align 25691  %shvec = shufflevector <16 x i32> %0, <16 x i32> %1, <4 x i32> <i32 14, i32 14, i32 14, i32 14>92  %2 = add <16 x i32> %0, %093  store <16 x i32> %2, ptr %arg1, align 25694  ret <4 x i32> %shvec95}96 97define <2 x i32> @test2(ptr %arg1, ptr %arg2) {98; CHECK-LABEL: test2:99; CHECK:       // %bb.0: // %entry100; CHECK-NEXT:    ldp q1, q0, [x0, #32]101; CHECK-NEXT:    ldp q3, q4, [x0]102; CHECK-NEXT:    movprfx z2, z0103; CHECK-NEXT:    ext z2.b, z2.b, z0.b, #8104; CHECK-NEXT:    add z1.s, z1.s, z1.s105; CHECK-NEXT:    add z5.s, z0.s, z0.s106; CHECK-NEXT:    mov z0.s, s2107; CHECK-NEXT:    add z2.s, z3.s, z3.s108; CHECK-NEXT:    add z3.s, z4.s, z4.s109; CHECK-NEXT:    stp q1, q5, [x0, #32]110; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0111; CHECK-NEXT:    stp q2, q3, [x0]112; CHECK-NEXT:    ret113;114; NONEON-NOSVE-LABEL: test2:115; NONEON-NOSVE:       // %bb.0: // %entry116; NONEON-NOSVE-NEXT:    sub sp, sp, #144117; NONEON-NOSVE-NEXT:    .cfi_def_cfa_offset 144118; NONEON-NOSVE-NEXT:    ldp q1, q0, [x0, #32]119; NONEON-NOSVE-NEXT:    ldp q2, q3, [x0]120; NONEON-NOSVE-NEXT:    str q1, [sp, #64]121; NONEON-NOSVE-NEXT:    stp q0, q3, [sp, #32]122; NONEON-NOSVE-NEXT:    ldr d0, [sp, #40]123; NONEON-NOSVE-NEXT:    str q2, [sp, #16]124; NONEON-NOSVE-NEXT:    str d0, [sp]125; NONEON-NOSVE-NEXT:    ldr w8, [sp]126; NONEON-NOSVE-NEXT:    stp w8, w8, [sp, #8]127; NONEON-NOSVE-NEXT:    ldr w8, [sp, #60]128; NONEON-NOSVE-NEXT:    ldr d0, [sp, #8]129; NONEON-NOSVE-NEXT:    add w8, w8, w8130; NONEON-NOSVE-NEXT:    str w8, [sp, #124]131; NONEON-NOSVE-NEXT:    ldr w8, [sp, #56]132; NONEON-NOSVE-NEXT:    add w8, w8, w8133; NONEON-NOSVE-NEXT:    str w8, [sp, #120]134; NONEON-NOSVE-NEXT:    ldr w8, [sp, #52]135; NONEON-NOSVE-NEXT:    add w8, w8, w8136; NONEON-NOSVE-NEXT:    str w8, [sp, #116]137; NONEON-NOSVE-NEXT:    ldr w8, [sp, #48]138; NONEON-NOSVE-NEXT:    add w8, w8, w8139; NONEON-NOSVE-NEXT:    str w8, [sp, #112]140; NONEON-NOSVE-NEXT:    ldr w8, [sp, #28]141; NONEON-NOSVE-NEXT:    add w8, w8, w8142; NONEON-NOSVE-NEXT:    str w8, [sp, #92]143; NONEON-NOSVE-NEXT:    ldr w8, [sp, #24]144; NONEON-NOSVE-NEXT:    add w8, w8, w8145; NONEON-NOSVE-NEXT:    str w8, [sp, #88]146; NONEON-NOSVE-NEXT:    ldr w8, [sp, #20]147; NONEON-NOSVE-NEXT:    add w8, w8, w8148; NONEON-NOSVE-NEXT:    str w8, [sp, #84]149; NONEON-NOSVE-NEXT:    ldr w8, [sp, #16]150; NONEON-NOSVE-NEXT:    add w8, w8, w8151; NONEON-NOSVE-NEXT:    str w8, [sp, #80]152; NONEON-NOSVE-NEXT:    ldr w8, [sp, #44]153; NONEON-NOSVE-NEXT:    add w8, w8, w8154; NONEON-NOSVE-NEXT:    str w8, [sp, #108]155; NONEON-NOSVE-NEXT:    ldr w8, [sp, #40]156; NONEON-NOSVE-NEXT:    add w8, w8, w8157; NONEON-NOSVE-NEXT:    str w8, [sp, #104]158; NONEON-NOSVE-NEXT:    ldr w8, [sp, #36]159; NONEON-NOSVE-NEXT:    add w8, w8, w8160; NONEON-NOSVE-NEXT:    str w8, [sp, #100]161; NONEON-NOSVE-NEXT:    ldr w8, [sp, #32]162; NONEON-NOSVE-NEXT:    add w8, w8, w8163; NONEON-NOSVE-NEXT:    str w8, [sp, #96]164; NONEON-NOSVE-NEXT:    ldr w8, [sp, #76]165; NONEON-NOSVE-NEXT:    ldp q4, q2, [sp, #80]166; NONEON-NOSVE-NEXT:    add w8, w8, w8167; NONEON-NOSVE-NEXT:    str w8, [sp, #140]168; NONEON-NOSVE-NEXT:    ldr w8, [sp, #72]169; NONEON-NOSVE-NEXT:    add w8, w8, w8170; NONEON-NOSVE-NEXT:    str w8, [sp, #136]171; NONEON-NOSVE-NEXT:    ldr w8, [sp, #68]172; NONEON-NOSVE-NEXT:    add w8, w8, w8173; NONEON-NOSVE-NEXT:    str w8, [sp, #132]174; NONEON-NOSVE-NEXT:    ldr w8, [sp, #64]175; NONEON-NOSVE-NEXT:    add w8, w8, w8176; NONEON-NOSVE-NEXT:    str w8, [sp, #128]177; NONEON-NOSVE-NEXT:    ldp q3, q1, [sp, #112]178; NONEON-NOSVE-NEXT:    stp q4, q3, [x0]179; NONEON-NOSVE-NEXT:    stp q1, q2, [x0, #32]180; NONEON-NOSVE-NEXT:    add sp, sp, #144181; NONEON-NOSVE-NEXT:    ret182entry:183  %0 = load <16 x i32>, ptr %arg1, align 256184  %1 = load <16 x i32>, ptr %arg2, align 256185  %shvec = shufflevector <16 x i32> %0, <16 x i32> %1, <2 x i32> <i32 14, i32 14>186  %2 = add <16 x i32> %0, %0187  store <16 x i32> %2, ptr %arg1, align 256188  ret <2 x i32> %shvec189}190