1 // RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon \
2 // RUN: -target-feature +v8.3a -target-feature +fullfp16 -S -emit-llvm -o - %s \
3 // RUN: | FileCheck %s
4
5 #include <arm_neon.h>
6
foo16x4_rot90(float16x4_t a,float16x4_t b)7 void foo16x4_rot90(float16x4_t a, float16x4_t b)
8 {
9 // CHECK: call <4 x half> @llvm.aarch64.neon.vcadd.rot90.v4f16
10 float16x4_t result = vcadd_rot90_f16(a, b);
11 }
12
foo32x2_rot90(float32x2_t a,float32x2_t b)13 void foo32x2_rot90(float32x2_t a, float32x2_t b)
14 {
15 // CHECK: call <2 x float> @llvm.aarch64.neon.vcadd.rot90.v2f32
16 float32x2_t result = vcadd_rot90_f32(a, b);
17 }
18
foo16x8_rot90(float16x8_t a,float16x8_t b)19 void foo16x8_rot90(float16x8_t a, float16x8_t b)
20 {
21 // CHECK: call <8 x half> @llvm.aarch64.neon.vcadd.rot90.v8f16
22 float16x8_t result = vcaddq_rot90_f16(a, b);
23 }
24
foo32x4_rot90(float32x4_t a,float32x4_t b)25 void foo32x4_rot90(float32x4_t a, float32x4_t b)
26 {
27 // CHECK: call <4 x float> @llvm.aarch64.neon.vcadd.rot90.v4f32
28 float32x4_t result = vcaddq_rot90_f32(a, b);
29 }
30
foo64x2_rot90(float64x2_t a,float64x2_t b)31 void foo64x2_rot90(float64x2_t a, float64x2_t b)
32 {
33 // CHECK: call <2 x double> @llvm.aarch64.neon.vcadd.rot90.v2f64
34 float64x2_t result = vcaddq_rot90_f64(a, b);
35 }
36
foo16x4_rot270(float16x4_t a,float16x4_t b)37 void foo16x4_rot270(float16x4_t a, float16x4_t b)
38 {
39 // CHECK: call <4 x half> @llvm.aarch64.neon.vcadd.rot270.v4f16
40 float16x4_t result = vcadd_rot270_f16(a, b);
41 }
42
foo32x2_rot270(float32x2_t a,float32x2_t b)43 void foo32x2_rot270(float32x2_t a, float32x2_t b)
44 {
45 // CHECK: call <2 x float> @llvm.aarch64.neon.vcadd.rot270.v2f32
46 float32x2_t result = vcadd_rot270_f32(a, b);
47 }
48
foo16x8_rot270(float16x8_t a,float16x8_t b)49 void foo16x8_rot270(float16x8_t a, float16x8_t b)
50 {
51 // CHECK: call <8 x half> @llvm.aarch64.neon.vcadd.rot270.v8f16
52 float16x8_t result = vcaddq_rot270_f16(a, b);
53 }
54
foo32x4_rot270(float32x4_t a,float32x4_t b)55 void foo32x4_rot270(float32x4_t a, float32x4_t b)
56 {
57 // CHECK: call <4 x float> @llvm.aarch64.neon.vcadd.rot270.v4f32
58 float32x4_t result = vcaddq_rot270_f32(a, b);
59 }
60
foo64x2_rot270(float64x2_t a,float64x2_t b)61 void foo64x2_rot270(float64x2_t a, float64x2_t b)
62 {
63 // CHECK: call <2 x double> @llvm.aarch64.neon.vcadd.rot270.v2f64
64 float64x2_t result = vcaddq_rot270_f64(a, b);
65 }
66