Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc -o - %s -verify-machineinstrs -mtriple=aarch64-linux-gnu -mattr=+neon | FileCheck %s
      2 
      3 
      4 define <2 x float> @test_cos_v2f64(<2 x double> %v1) {
      5 ; CHECK-LABEL: test_cos_v2f64:
      6 ; CHECK: bl cos
      7 ; CHECK: bl cos
      8   %1 = call <2 x double> @llvm.cos.v2f64(<2 x double> %v1)
      9   %2 = fptrunc <2 x double> %1 to <2 x float>
     10   ret <2 x float> %2
     11 }
     12 
     13 define <2 x float> @test_sin_v2f64(<2 x double> %v1) {
     14 ; CHECK-LABEL: test_sin_v2f64:
     15 ; CHECK: bl sin
     16 ; CHECK: bl sin
     17   %1 = call <2 x double> @llvm.sin.v2f64(<2 x double> %v1)
     18   %2 = fptrunc <2 x double> %1 to <2 x float>
     19   ret <2 x float> %2
     20 }
     21 
     22 define <2 x float> @test_pow_v2f64(<2 x double> %v1, <2 x double> %v2) {
     23 ; CHECK-LABEL: test_pow_v2f64:
     24 ; CHECK: bl pow
     25 ; CHECK: bl pow
     26   %1 = call <2 x double> @llvm.pow.v2f64(<2 x double> %v1, <2 x double> %v2)
     27   %2 = fptrunc <2 x double> %1 to <2 x float>
     28   ret <2 x float> %2
     29 }
     30 
     31 declare <2 x double> @llvm.cos.v2f64(<2 x double>)
     32 declare <2 x double> @llvm.sin.v2f64(<2 x double>)
     33 declare <2 x double> @llvm.pow.v2f64(<2 x double>, <2 x double>)
     34 
     35 define <2 x float> @test_cos_v2f32(<2 x float> %v1) {
     36 ; CHECK-LABEL: test_cos_v2f32:
     37 ; CHECK: bl cos
     38 ; CHECK: bl cos
     39   %1 = call <2 x float> @llvm.cos.v2f32(<2 x float> %v1)
     40   ret <2 x float> %1
     41 }
     42 
     43 define <2 x float> @test_sin_v2f32(<2 x float> %v1) {
     44 ; CHECK-LABEL: test_sin_v2f32:
     45 ; CHECK: bl sin
     46 ; CHECK: bl sin
     47   %1 = call <2 x float> @llvm.sin.v2f32(<2 x float> %v1)
     48   ret <2 x float> %1
     49 }
     50 
     51 define <2 x float> @test_pow_v2f32(<2 x float> %v1, <2 x float> %v2) {
     52 ; CHECK-LABEL: test_pow_v2f32:
     53 ; CHECK: bl pow
     54 ; CHECK: bl pow
     55   %1 = call <2 x float> @llvm.pow.v2f32(<2 x float> %v1, <2 x float> %v2)
     56   ret <2 x float> %1
     57 }
     58 
     59 declare <2 x float> @llvm.cos.v2f32(<2 x float>)
     60 declare <2 x float> @llvm.sin.v2f32(<2 x float>)
     61 declare <2 x float> @llvm.pow.v2f32(<2 x float>, <2 x float>)
     62 
     63 define <4 x float> @test_cos_v4f32(<4 x float> %v1) {
     64 ; CHECK-LABEL: test_cos_v4f32:
     65 ; CHECK: bl cos
     66 ; CHECK: bl cos
     67 ; CHECK: bl cos
     68 ; CHECK: bl cos
     69   %1 = call <4 x float> @llvm.cos.v4f32(<4 x float> %v1)
     70   ret <4 x float> %1
     71 }
     72 
     73 define <4 x float> @test_sin_v4f32(<4 x float> %v1) {
     74 ; CHECK-LABEL: test_sin_v4f32:
     75 ; CHECK: bl sin
     76 ; CHECK: bl sin
     77 ; CHECK: bl sin
     78 ; CHECK: bl sin
     79   %1 = call <4 x float> @llvm.sin.v4f32(<4 x float> %v1)
     80   ret <4 x float> %1
     81 }
     82 
     83 define <4 x float> @test_pow_v4f32(<4 x float> %v1, <4 x float> %v2) {
     84 ; CHECK-LABEL: test_pow_v4f32:
     85 ; CHECK: bl pow
     86 ; CHECK: bl pow
     87 ; CHECK: bl pow
     88 ; CHECK: bl pow
     89   %1 = call <4 x float> @llvm.pow.v4f32(<4 x float> %v1, <4 x float> %v2)
     90   ret <4 x float> %1
     91 }
     92 
     93 declare <4 x float> @llvm.cos.v4f32(<4 x float>)
     94 declare <4 x float> @llvm.sin.v4f32(<4 x float>)
     95 declare <4 x float> @llvm.pow.v4f32(<4 x float>, <4 x float>)
     96 
     97