xref: /llvm-project/llvm/test/CodeGen/ARM/vector-trunc.ll (revision 99b862efba9c2db5ec0aa32f62b5bc78df61d7a4)
1*99b862efSOliver Stannard; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2*99b862efSOliver Stannard; RUN: llc -mtriple=armv7-unknown-none-eabihf -mattr=+neon < %s | FileCheck %s --check-prefix=LE
3*99b862efSOliver Stannard; RUN: llc -mtriple=armebv7-unknown-none-eabihf -mattr=+neon < %s | FileCheck %s --check-prefix=BE
4*99b862efSOliver Stannard
5*99b862efSOliver Stannarddefine i32 @test(i64 %arg1) {
6*99b862efSOliver Stannard; LE-LABEL: test:
7*99b862efSOliver Stannard; LE:       @ %bb.0: @ %entry
8*99b862efSOliver Stannard; LE-NEXT:    subs r0, r0, #1
9*99b862efSOliver Stannard; LE-NEXT:    mov r2, #0
10*99b862efSOliver Stannard; LE-NEXT:    sbcs r0, r1, #0
11*99b862efSOliver Stannard; LE-NEXT:    vldr s0, .LCPI0_0
12*99b862efSOliver Stannard; LE-NEXT:    movwhs r2, #1
13*99b862efSOliver Stannard; LE-NEXT:    cmp r2, #0
14*99b862efSOliver Stannard; LE-NEXT:    mvnne r2, #0
15*99b862efSOliver Stannard; LE-NEXT:    vmov s1, r2
16*99b862efSOliver Stannard; LE-NEXT:    vmovn.i32 d16, q0
17*99b862efSOliver Stannard; LE-NEXT:    vmovn.i16 d16, q8
18*99b862efSOliver Stannard; LE-NEXT:    vmov.u8 r0, d16[0]
19*99b862efSOliver Stannard; LE-NEXT:    and r0, r0, #1
20*99b862efSOliver Stannard; LE-NEXT:    bx lr
21*99b862efSOliver Stannard; LE-NEXT:    .p2align 2
22*99b862efSOliver Stannard; LE-NEXT:  @ %bb.1:
23*99b862efSOliver Stannard; LE-NEXT:  .LCPI0_0:
24*99b862efSOliver Stannard; LE-NEXT:    .long 0xffffffff @ float NaN
25*99b862efSOliver Stannard;
26*99b862efSOliver Stannard; BE-LABEL: test:
27*99b862efSOliver Stannard; BE:       @ %bb.0: @ %entry
28*99b862efSOliver Stannard; BE-NEXT:    subs r1, r1, #1
29*99b862efSOliver Stannard; BE-NEXT:    mov r2, #0
30*99b862efSOliver Stannard; BE-NEXT:    sbcs r0, r0, #0
31*99b862efSOliver Stannard; BE-NEXT:    vldr s0, .LCPI0_0
32*99b862efSOliver Stannard; BE-NEXT:    movwhs r2, #1
33*99b862efSOliver Stannard; BE-NEXT:    cmp r2, #0
34*99b862efSOliver Stannard; BE-NEXT:    mvnne r2, #0
35*99b862efSOliver Stannard; BE-NEXT:    vmov s1, r2
36*99b862efSOliver Stannard; BE-NEXT:    vmovn.i32 d16, q0
37*99b862efSOliver Stannard; BE-NEXT:    vmovn.i16 d16, q8
38*99b862efSOliver Stannard; BE-NEXT:    vmov.u8 r0, d16[0]
39*99b862efSOliver Stannard; BE-NEXT:    and r0, r0, #1
40*99b862efSOliver Stannard; BE-NEXT:    bx lr
41*99b862efSOliver Stannard; BE-NEXT:    .p2align 2
42*99b862efSOliver Stannard; BE-NEXT:  @ %bb.1:
43*99b862efSOliver Stannard; BE-NEXT:  .LCPI0_0:
44*99b862efSOliver Stannard; BE-NEXT:    .long 0xffffffff @ float NaN
45*99b862efSOliver Stannardentry:
46*99b862efSOliver Stannard  %insert_zero = insertelement <8 x i64> poison, i64 %arg1, i64 0
47*99b862efSOliver Stannard  %splat_zero = shufflevector <8 x i64> %insert_zero, <8 x i64> poison, <8 x i32> zeroinitializer
48*99b862efSOliver Stannard  %cmp_vec = icmp ule <8 x i64> <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7>, %splat_zero
49*99b862efSOliver Stannard  %first_cmp = extractelement <8 x i1> %cmp_vec, i32 0
50*99b862efSOliver Stannard  %ext = zext i1 %first_cmp to i32
51*99b862efSOliver Stannard  ret i32 %ext
52*99b862efSOliver Stannard}
53