Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc -march=arm64 -aarch64-neon-syntax=apple < %s | FileCheck %s
      2 
      3 define <8 x i8> @test_vclz_u8(<8 x i8> %a) nounwind readnone ssp {
      4   ; CHECK-LABEL: test_vclz_u8:
      5   ; CHECK: clz.8b v0, v0
      6   ; CHECK-NEXT: ret
      7   %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
      8   ret <8 x i8> %vclz.i
      9 }
     10 
     11 define <8 x i8> @test_vclz_s8(<8 x i8> %a) nounwind readnone ssp {
     12   ; CHECK-LABEL: test_vclz_s8:
     13   ; CHECK: clz.8b v0, v0
     14   ; CHECK-NEXT: ret
     15   %vclz.i = tail call <8 x i8> @llvm.ctlz.v8i8(<8 x i8> %a, i1 false) nounwind
     16   ret <8 x i8> %vclz.i
     17 }
     18 
     19 define <4 x i16> @test_vclz_u16(<4 x i16> %a) nounwind readnone ssp {
     20   ; CHECK-LABEL: test_vclz_u16:
     21   ; CHECK: clz.4h v0, v0
     22   ; CHECK-NEXT: ret
     23   %vclz1.i = tail call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false) nounwind
     24   ret <4 x i16> %vclz1.i
     25 }
     26 
     27 define <4 x i16> @test_vclz_s16(<4 x i16> %a) nounwind readnone ssp {
     28   ; CHECK-LABEL: test_vclz_s16:
     29   ; CHECK: clz.4h v0, v0
     30   ; CHECK-NEXT: ret
     31   %vclz1.i = tail call <4 x i16> @llvm.ctlz.v4i16(<4 x i16> %a, i1 false) nounwind
     32   ret <4 x i16> %vclz1.i
     33 }
     34 
     35 define <2 x i32> @test_vclz_u32(<2 x i32> %a) nounwind readnone ssp {
     36   ; CHECK-LABEL: test_vclz_u32:
     37   ; CHECK: clz.2s v0, v0
     38   ; CHECK-NEXT: ret
     39   %vclz1.i = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false) nounwind
     40   ret <2 x i32> %vclz1.i
     41 }
     42 
     43 define <2 x i32> @test_vclz_s32(<2 x i32> %a) nounwind readnone ssp {
     44   ; CHECK-LABEL: test_vclz_s32:
     45   ; CHECK: clz.2s v0, v0
     46   ; CHECK-NEXT: ret
     47   %vclz1.i = tail call <2 x i32> @llvm.ctlz.v2i32(<2 x i32> %a, i1 false) nounwind
     48   ret <2 x i32> %vclz1.i
     49 }
     50 
     51 define <1 x i64> @test_vclz_u64(<1 x i64> %a) nounwind readnone ssp {
     52   ; CHECK-LABEL: test_vclz_u64:
     53   %vclz1.i = tail call <1 x i64> @llvm.ctlz.v1i64(<1 x i64> %a, i1 false) nounwind
     54   ret <1 x i64> %vclz1.i
     55 }
     56 
     57 define <1 x i64> @test_vclz_s64(<1 x i64> %a) nounwind readnone ssp {
     58   ; CHECK-LABEL: test_vclz_s64:
     59   %vclz1.i = tail call <1 x i64> @llvm.ctlz.v1i64(<1 x i64> %a, i1 false) nounwind
     60   ret <1 x i64> %vclz1.i
     61 }
     62 
     63 define <16 x i8> @test_vclzq_u8(<16 x i8> %a) nounwind readnone ssp {
     64   ; CHECK-LABEL: test_vclzq_u8:
     65   ; CHECK: clz.16b v0, v0
     66   ; CHECK-NEXT: ret
     67   %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
     68   ret <16 x i8> %vclz.i
     69 }
     70 
     71 define <16 x i8> @test_vclzq_s8(<16 x i8> %a) nounwind readnone ssp {
     72   ; CHECK-LABEL: test_vclzq_s8:
     73   ; CHECK: clz.16b v0, v0
     74   ; CHECK-NEXT: ret
     75   %vclz.i = tail call <16 x i8> @llvm.ctlz.v16i8(<16 x i8> %a, i1 false) nounwind
     76   ret <16 x i8> %vclz.i
     77 }
     78 
     79 define <8 x i16> @test_vclzq_u16(<8 x i16> %a) nounwind readnone ssp {
     80   ; CHECK-LABEL: test_vclzq_u16:
     81   ; CHECK: clz.8h v0, v0
     82   ; CHECK-NEXT: ret
     83   %vclz1.i = tail call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false) nounwind
     84   ret <8 x i16> %vclz1.i
     85 }
     86 
     87 define <8 x i16> @test_vclzq_s16(<8 x i16> %a) nounwind readnone ssp {
     88   ; CHECK-LABEL: test_vclzq_s16:
     89   ; CHECK: clz.8h v0, v0
     90   ; CHECK-NEXT: ret
     91   %vclz1.i = tail call <8 x i16> @llvm.ctlz.v8i16(<8 x i16> %a, i1 false) nounwind
     92   ret <8 x i16> %vclz1.i
     93 }
     94 
     95 define <4 x i32> @test_vclzq_u32(<4 x i32> %a) nounwind readnone ssp {
     96   ; CHECK-LABEL: test_vclzq_u32:
     97   ; CHECK: clz.4s v0, v0
     98   ; CHECK-NEXT: ret
     99   %vclz1.i = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false) nounwind
    100   ret <4 x i32> %vclz1.i
    101 }
    102 
    103 define <4 x i32> @test_vclzq_s32(<4 x i32> %a) nounwind readnone ssp {
    104   ; CHECK-LABEL: test_vclzq_s32:
    105   ; CHECK: clz.4s v0, v0
    106   ; CHECK-NEXT: ret
    107   %vclz1.i = tail call <4 x i32> @llvm.ctlz.v4i32(<4 x i32> %a, i1 false) nounwind
    108   ret <4 x i32> %vclz1.i
    109 }
    110 
    111 define <2 x i64> @test_vclzq_u64(<2 x i64> %a) nounwind readnone ssp {
    112   ; CHECK-LABEL: test_vclzq_u64:
    113   %vclz1.i = tail call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false) nounwind
    114   ret <2 x i64> %vclz1.i
    115 }
    116 
    117 define <2 x i64> @test_vclzq_s64(<2 x i64> %a) nounwind readnone ssp {
    118   ; CHECK-LABEL: test_vclzq_s64:
    119   %vclz1.i = tail call <2 x i64> @llvm.ctlz.v2i64(<2 x i64> %a, i1 false) nounwind
    120   ret <2 x i64> %vclz1.i
    121 }
    122 
    123 declare <2 x i64> @llvm.ctlz.v2i64(<2 x i64>, i1) nounwind readnone
    124 
    125 declare <4 x i32> @llvm.ctlz.v4i32(<4 x i32>, i1) nounwind readnone
    126 
    127 declare <8 x i16> @llvm.ctlz.v8i16(<8 x i16>, i1) nounwind readnone
    128 
    129 declare <16 x i8> @llvm.ctlz.v16i8(<16 x i8>, i1) nounwind readnone
    130 
    131 declare <1 x i64> @llvm.ctlz.v1i64(<1 x i64>, i1) nounwind readnone
    132 
    133 declare <2 x i32> @llvm.ctlz.v2i32(<2 x i32>, i1) nounwind readnone
    134 
    135 declare <4 x i16> @llvm.ctlz.v4i16(<4 x i16>, i1) nounwind readnone
    136 
    137 declare <8 x i8> @llvm.ctlz.v8i8(<8 x i8>, i1) nounwind readnone
    138