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