Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s
      2 
      3 define <2 x i64> @test_v2f32_to_signed_v2i64(<2 x float> %in) {
      4 ; CHECK-LABEL: test_v2f32_to_signed_v2i64:
      5 ; CHECK: fcvtl [[VAL64:v[0-9]+]].2d, v0.2s
      6 ; CHECK: fcvtzs.2d v0, [[VAL64]]
      7 
      8   %val = fptosi <2 x float> %in to <2 x i64>
      9   ret <2 x i64> %val
     10 }
     11 
     12 define <2 x i64> @test_v2f32_to_unsigned_v2i64(<2 x float> %in) {
     13 ; CHECK-LABEL: test_v2f32_to_unsigned_v2i64:
     14 ; CHECK: fcvtl [[VAL64:v[0-9]+]].2d, v0.2s
     15 ; CHECK: fcvtzu.2d v0, [[VAL64]]
     16 
     17   %val = fptoui <2 x float> %in to <2 x i64>
     18   ret <2 x i64> %val
     19 }
     20 
     21 define <2 x i16> @test_v2f32_to_signed_v2i16(<2 x float> %in) {
     22 ; CHECK-LABEL: test_v2f32_to_signed_v2i16:
     23 ; CHECK: fcvtzs.2s v0, v0
     24 
     25   %val = fptosi <2 x float> %in to <2 x i16>
     26   ret <2 x i16> %val
     27 }
     28 
     29 define <2 x i16> @test_v2f32_to_unsigned_v2i16(<2 x float> %in) {
     30 ; CHECK-LABEL: test_v2f32_to_unsigned_v2i16:
     31 ; CHECK: fcvtzs.2s v0, v0
     32 
     33   %val = fptoui <2 x float> %in to <2 x i16>
     34   ret <2 x i16> %val
     35 }
     36 
     37 define <2 x i8> @test_v2f32_to_signed_v2i8(<2 x float> %in) {
     38 ; CHECK-LABEL: test_v2f32_to_signed_v2i8:
     39 ; CHECK: fcvtzs.2s v0, v0
     40 
     41   %val = fptosi <2 x float> %in to <2 x i8>
     42   ret <2 x i8> %val
     43 }
     44 
     45 define <2 x i8> @test_v2f32_to_unsigned_v2i8(<2 x float> %in) {
     46 ; CHECK-LABEL: test_v2f32_to_unsigned_v2i8:
     47 ; CHECK: fcvtzs.2s v0, v0
     48 
     49   %val = fptoui <2 x float> %in to <2 x i8>
     50   ret <2 x i8> %val
     51 }
     52 
     53 define <4 x i16> @test_v4f32_to_signed_v4i16(<4 x float> %in) {
     54 ; CHECK-LABEL: test_v4f32_to_signed_v4i16:
     55 ; CHECK: fcvtzs.4s [[VAL64:v[0-9]+]], v0
     56 ; CHECK: xtn.4h v0, [[VAL64]]
     57 
     58   %val = fptosi <4 x float> %in to <4 x i16>
     59   ret <4 x i16> %val
     60 }
     61 
     62 define <4 x i16> @test_v4f32_to_unsigned_v4i16(<4 x float> %in) {
     63 ; CHECK-LABEL: test_v4f32_to_unsigned_v4i16:
     64 ; CHECK: fcvtzu.4s [[VAL64:v[0-9]+]], v0
     65 ; CHECK: xtn.4h v0, [[VAL64]]
     66 
     67   %val = fptoui <4 x float> %in to <4 x i16>
     68   ret <4 x i16> %val
     69 }
     70 
     71 define <4 x i8> @test_v4f32_to_signed_v4i8(<4 x float> %in) {
     72 ; CHECK-LABEL: test_v4f32_to_signed_v4i8:
     73 ; CHECK: fcvtzs.4s [[VAL64:v[0-9]+]], v0
     74 ; CHECK: xtn.4h v0, [[VAL64]]
     75 
     76   %val = fptosi <4 x float> %in to <4 x i8>
     77   ret <4 x i8> %val
     78 }
     79 
     80 define <4 x i8> @test_v4f32_to_unsigned_v4i8(<4 x float> %in) {
     81 ; CHECK-LABEL: test_v4f32_to_unsigned_v4i8:
     82 ; CHECK: fcvtzs.4s [[VAL64:v[0-9]+]], v0
     83 ; CHECK: xtn.4h v0, [[VAL64]]
     84 
     85   %val = fptoui <4 x float> %in to <4 x i8>
     86   ret <4 x i8> %val
     87 }
     88 
     89 define <2 x i32> @test_v2f64_to_signed_v2i32(<2 x double> %in) {
     90 ; CHECK-LABEL: test_v2f64_to_signed_v2i32:
     91 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
     92 ; CHECK: xtn.2s v0, [[VAL64]]
     93 
     94   %val = fptosi <2 x double> %in to <2 x i32>
     95   ret <2 x i32> %val
     96 }
     97 
     98 define <2 x i32> @test_v2f64_to_unsigned_v2i32(<2 x double> %in) {
     99 ; CHECK-LABEL: test_v2f64_to_unsigned_v2i32:
    100 ; CHECK: fcvtzu.2d [[VAL64:v[0-9]+]], v0
    101 ; CHECK: xtn.2s v0, [[VAL64]]
    102 
    103   %val = fptoui <2 x double> %in to <2 x i32>
    104   ret <2 x i32> %val
    105 }
    106 
    107 define <2 x i16> @test_v2f64_to_signed_v2i16(<2 x double> %in) {
    108 ; CHECK-LABEL: test_v2f64_to_signed_v2i16:
    109 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
    110 ; CHECK: xtn.2s v0, [[VAL64]]
    111 
    112   %val = fptosi <2 x double> %in to <2 x i16>
    113   ret <2 x i16> %val
    114 }
    115 
    116 define <2 x i16> @test_v2f64_to_unsigned_v2i16(<2 x double> %in) {
    117 ; CHECK-LABEL: test_v2f64_to_unsigned_v2i16:
    118 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
    119 ; CHECK: xtn.2s v0, [[VAL64]]
    120 
    121   %val = fptoui <2 x double> %in to <2 x i16>
    122   ret <2 x i16> %val
    123 }
    124 
    125 define <2 x i8> @test_v2f64_to_signed_v2i8(<2 x double> %in) {
    126 ; CHECK-LABEL: test_v2f64_to_signed_v2i8:
    127 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
    128 ; CHECK: xtn.2s v0, [[VAL64]]
    129 
    130   %val = fptosi <2 x double> %in to <2 x i8>
    131   ret <2 x i8> %val
    132 }
    133 
    134 define <2 x i8> @test_v2f64_to_unsigned_v2i8(<2 x double> %in) {
    135 ; CHECK-LABEL: test_v2f64_to_unsigned_v2i8:
    136 ; CHECK: fcvtzs.2d [[VAL64:v[0-9]+]], v0
    137 ; CHECK: xtn.2s v0, [[VAL64]]
    138 
    139   %val = fptoui <2 x double> %in to <2 x i8>
    140   ret <2 x i8> %val
    141 }
    142