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