brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.6 KiB · 8fa8c6c Raw
149 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s3 4define arm_aapcs_vfpcc <4 x i32> @concat_v2i1(i32 %a, i32 %b, <4 x i32> %c) {5; CHECK-LABEL: concat_v2i1:6; CHECK:       @ %bb.0: @ %entry7; CHECK-NEXT:    vmsr p0, r18; CHECK-NEXT:    vmov.i8 q1, #0x09; CHECK-NEXT:    vmov.i8 q2, #0xff10; CHECK-NEXT:    vpsel q3, q2, q111; CHECK-NEXT:    vmsr p0, r012; CHECK-NEXT:    vpsel q1, q2, q113; CHECK-NEXT:    vmov r1, s1214; CHECK-NEXT:    vmov r0, s415; CHECK-NEXT:    vmov q2[2], q2[0], r0, r116; CHECK-NEXT:    vmov r1, s617; CHECK-NEXT:    vmov r0, s1418; CHECK-NEXT:    vmov.i32 q1, #0x019; CHECK-NEXT:    vmov q2[3], q2[1], r1, r020; CHECK-NEXT:    vcmp.i32 ne, q2, zr21; CHECK-NEXT:    vpsel q0, q0, q122; CHECK-NEXT:    bx lr23entry:24  %ai = call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 %a)25  %bi = call <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32 %b)26  %s = shufflevector <2 x i1> %ai, <2 x i1> %bi, <4 x i32> <i32 0, i32 1, i32 2, i32 3>27  %ci = select <4 x i1> %s, <4 x i32> %c, <4 x i32> zeroinitializer28  ret <4 x i32> %ci29}30 31declare <2 x i1> @llvm.arm.mve.pred.i2v.v2i1(i32)32 33 34define arm_aapcs_vfpcc <8 x i16> @concat_v4i1(<4 x i32> %a, <4 x i32> %b, <8 x i16> %c) {35; CHECK-LABEL: concat_v4i1:36; CHECK:       @ %bb.0: @ %entry37; CHECK-NEXT:    .vsave {d8, d9}38; CHECK-NEXT:    vpush {d8, d9}39; CHECK-NEXT:    .pad #1640; CHECK-NEXT:    sub sp, #1641; CHECK-NEXT:    vmov.i8 q3, #0x042; CHECK-NEXT:    vmov.i8 q4, #0xff43; CHECK-NEXT:    vcmp.s32 lt, q1, zr44; CHECK-NEXT:    mov r0, sp45; CHECK-NEXT:    vpsel q1, q4, q346; CHECK-NEXT:    vcmp.s32 lt, q0, zr47; CHECK-NEXT:    vpsel q0, q4, q348; CHECK-NEXT:    vstrh.32 q1, [r0, #8]49; CHECK-NEXT:    vstrh.32 q0, [r0]50; CHECK-NEXT:    vmov.i32 q0, #0x051; CHECK-NEXT:    vldrw.u32 q1, [r0]52; CHECK-NEXT:    vcmp.i16 ne, q1, zr53; CHECK-NEXT:    vpsel q0, q2, q054; CHECK-NEXT:    add sp, #1655; CHECK-NEXT:    vpop {d8, d9}56; CHECK-NEXT:    bx lr57entry:58  %ai = icmp slt <4 x i32> %a, zeroinitializer59  %bi = icmp slt <4 x i32> %b, zeroinitializer60  %s = shufflevector <4 x i1> %ai, <4 x i1> %bi, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>61  %ci = select <8 x i1> %s, <8 x i16> %c, <8 x i16> zeroinitializer62  ret <8 x i16> %ci63}64 65define arm_aapcs_vfpcc <16 x i8> @concat_v8i1(<8 x i16> %a, <8 x i16> %b, <16 x i8> %c) {66; CHECK-LABEL: concat_v8i1:67; CHECK:       @ %bb.0: @ %entry68; CHECK-NEXT:    .vsave {d8, d9}69; CHECK-NEXT:    vpush {d8, d9}70; CHECK-NEXT:    .pad #1671; CHECK-NEXT:    sub sp, #1672; CHECK-NEXT:    vmov.i8 q3, #0x073; CHECK-NEXT:    vmov.i8 q4, #0xff74; CHECK-NEXT:    vcmp.s16 lt, q1, zr75; CHECK-NEXT:    mov r0, sp76; CHECK-NEXT:    vpsel q1, q4, q377; CHECK-NEXT:    vcmp.s16 lt, q0, zr78; CHECK-NEXT:    vpsel q0, q4, q379; CHECK-NEXT:    vstrb.16 q1, [r0, #8]80; CHECK-NEXT:    vstrb.16 q0, [r0]81; CHECK-NEXT:    vmov.i32 q0, #0x082; CHECK-NEXT:    vldrw.u32 q1, [r0]83; CHECK-NEXT:    vcmp.i8 ne, q1, zr84; CHECK-NEXT:    vpsel q0, q2, q085; CHECK-NEXT:    add sp, #1686; CHECK-NEXT:    vpop {d8, d9}87; CHECK-NEXT:    bx lr88entry:89  %ai = icmp slt <8 x i16> %a, zeroinitializer90  %bi = icmp slt <8 x i16> %b, zeroinitializer91  %s = shufflevector <8 x i1> %ai, <8 x i1> %bi, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>92  %ci = select <16 x i1> %s, <16 x i8> %c, <16 x i8> zeroinitializer93  ret <16 x i8> %ci94}95 96 97define arm_aapcs_vfpcc <16 x i8> @concat_v48i1(<4 x i32> %a, <4 x i32> %b, <4 x i32> %d, <4 x i32> %e, <16 x i8> %c) {98; CHECK-LABEL: concat_v48i1:99; CHECK:       @ %bb.0: @ %entry100; CHECK-NEXT:    .vsave {d8, d9, d10, d11}101; CHECK-NEXT:    vpush {d8, d9, d10, d11}102; CHECK-NEXT:    .pad #48103; CHECK-NEXT:    sub sp, #48104; CHECK-NEXT:    vmov.i8 q4, #0x0105; CHECK-NEXT:    vmov.i8 q5, #0xff106; CHECK-NEXT:    vcmp.s32 lt, q3, zr107; CHECK-NEXT:    add r0, sp, #16108; CHECK-NEXT:    vpsel q3, q5, q4109; CHECK-NEXT:    vcmp.s32 lt, q2, zr110; CHECK-NEXT:    vpsel q2, q5, q4111; CHECK-NEXT:    vcmp.s32 lt, q1, zr112; CHECK-NEXT:    vpsel q1, q5, q4113; CHECK-NEXT:    vcmp.s32 lt, q0, zr114; CHECK-NEXT:    mov r1, sp115; CHECK-NEXT:    vpsel q0, q5, q4116; CHECK-NEXT:    vstrh.32 q3, [r0, #8]117; CHECK-NEXT:    vstrh.32 q2, [r0]118; CHECK-NEXT:    vstrh.32 q1, [r1, #8]119; CHECK-NEXT:    vstrh.32 q0, [r1]120; CHECK-NEXT:    vldrw.u32 q0, [r0]121; CHECK-NEXT:    add r0, sp, #32122; CHECK-NEXT:    vcmp.i16 ne, q0, zr123; CHECK-NEXT:    vpsel q0, q5, q4124; CHECK-NEXT:    vstrb.16 q0, [r0, #8]125; CHECK-NEXT:    vldrw.u32 q0, [r1]126; CHECK-NEXT:    add r1, sp, #80127; CHECK-NEXT:    vldrw.u32 q1, [r1]128; CHECK-NEXT:    vcmp.i16 ne, q0, zr129; CHECK-NEXT:    vpsel q0, q5, q4130; CHECK-NEXT:    vstrb.16 q0, [r0]131; CHECK-NEXT:    vmov.i32 q0, #0x0132; CHECK-NEXT:    vldrw.u32 q2, [r0]133; CHECK-NEXT:    vcmp.i8 ne, q2, zr134; CHECK-NEXT:    vpsel q0, q1, q0135; CHECK-NEXT:    add sp, #48136; CHECK-NEXT:    vpop {d8, d9, d10, d11}137; CHECK-NEXT:    bx lr138entry:139  %ai = icmp slt <4 x i32> %a, zeroinitializer140  %bi = icmp slt <4 x i32> %b, zeroinitializer141  %di = icmp slt <4 x i32> %d, zeroinitializer142  %ei = icmp slt <4 x i32> %e, zeroinitializer143  %s1 = shufflevector <4 x i1> %ai, <4 x i1> %bi, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>144  %s2 = shufflevector <4 x i1> %di, <4 x i1> %ei, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>145  %s = shufflevector <8 x i1> %s1, <8 x i1> %s2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>146  %ci = select <16 x i1> %s, <16 x i8> %c, <16 x i8> zeroinitializer147  ret <16 x i8> %ci148}149