1 // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin -target-feature +fma4 -emit-llvm -o - -Werror | FileCheck %s
2 
3 // Don't include mm_malloc.h, it's system specific.
4 #define __MM_MALLOC_H
5 
6 #include <x86intrin.h>
7 
test_mm_macc_ps(__m128 a,__m128 b,__m128 c)8 __m128 test_mm_macc_ps(__m128 a, __m128 b, __m128 c) {
9   // CHECK-LABEL: test_mm_macc_ps
10   // CHECK: @llvm.x86.fma.vfmadd.ps
11   return _mm_macc_ps(a, b, c);
12 }
13 
test_mm_macc_pd(__m128d a,__m128d b,__m128d c)14 __m128d test_mm_macc_pd(__m128d a, __m128d b, __m128d c) {
15   // CHECK-LABEL: test_mm_macc_pd
16   // CHECK: @llvm.x86.fma.vfmadd.pd
17   return _mm_macc_pd(a, b, c);
18 }
19 
test_mm_macc_ss(__m128 a,__m128 b,__m128 c)20 __m128 test_mm_macc_ss(__m128 a, __m128 b, __m128 c) {
21   // CHECK-LABEL: test_mm_macc_ss
22   // CHECK: @llvm.x86.fma.vfmadd.ss
23   return _mm_macc_ss(a, b, c);
24 }
25 
test_mm_macc_sd(__m128d a,__m128d b,__m128d c)26 __m128d test_mm_macc_sd(__m128d a, __m128d b, __m128d c) {
27   // CHECK-LABEL: test_mm_macc_sd
28   // CHECK: @llvm.x86.fma.vfmadd.sd
29   return _mm_macc_sd(a, b, c);
30 }
31 
test_mm_msub_ps(__m128 a,__m128 b,__m128 c)32 __m128 test_mm_msub_ps(__m128 a, __m128 b, __m128 c) {
33   // CHECK-LABEL: test_mm_msub_ps
34   // CHECK: @llvm.x86.fma.vfmsub.ps
35   return _mm_msub_ps(a, b, c);
36 }
37 
test_mm_msub_pd(__m128d a,__m128d b,__m128d c)38 __m128d test_mm_msub_pd(__m128d a, __m128d b, __m128d c) {
39   // CHECK-LABEL: test_mm_msub_pd
40   // CHECK: @llvm.x86.fma.vfmsub.pd
41   return _mm_msub_pd(a, b, c);
42 }
43 
test_mm_msub_ss(__m128 a,__m128 b,__m128 c)44 __m128 test_mm_msub_ss(__m128 a, __m128 b, __m128 c) {
45   // CHECK-LABEL: test_mm_msub_ss
46   // CHECK: @llvm.x86.fma.vfmsub.ss
47   return _mm_msub_ss(a, b, c);
48 }
49 
test_mm_msub_sd(__m128d a,__m128d b,__m128d c)50 __m128d test_mm_msub_sd(__m128d a, __m128d b, __m128d c) {
51   // CHECK-LABEL: test_mm_msub_sd
52   // CHECK: @llvm.x86.fma.vfmsub.sd
53   return _mm_msub_sd(a, b, c);
54 }
55 
test_mm_nmacc_ps(__m128 a,__m128 b,__m128 c)56 __m128 test_mm_nmacc_ps(__m128 a, __m128 b, __m128 c) {
57   // CHECK-LABEL: test_mm_nmacc_ps
58   // CHECK: @llvm.x86.fma.vfnmadd.ps
59   return _mm_nmacc_ps(a, b, c);
60 }
61 
test_mm_nmacc_pd(__m128d a,__m128d b,__m128d c)62 __m128d test_mm_nmacc_pd(__m128d a, __m128d b, __m128d c) {
63   // CHECK-LABEL: test_mm_nmacc_pd
64   // CHECK: @llvm.x86.fma.vfnmadd.pd
65   return _mm_nmacc_pd(a, b, c);
66 }
67 
test_mm_nmacc_ss(__m128 a,__m128 b,__m128 c)68 __m128 test_mm_nmacc_ss(__m128 a, __m128 b, __m128 c) {
69   // CHECK-LABEL: test_mm_nmacc_ss
70   // CHECK: @llvm.x86.fma.vfnmadd.ss
71   return _mm_nmacc_ss(a, b, c);
72 }
73 
test_mm_nmacc_sd(__m128d a,__m128d b,__m128d c)74 __m128d test_mm_nmacc_sd(__m128d a, __m128d b, __m128d c) {
75   // CHECK-LABEL: test_mm_nmacc_sd
76   // CHECK: @llvm.x86.fma.vfnmadd.sd
77   return _mm_nmacc_sd(a, b, c);
78 }
79 
test_mm_nmsub_ps(__m128 a,__m128 b,__m128 c)80 __m128 test_mm_nmsub_ps(__m128 a, __m128 b, __m128 c) {
81   // CHECK-LABEL: test_mm_nmsub_ps
82   // CHECK: @llvm.x86.fma.vfnmsub.ps
83   return _mm_nmsub_ps(a, b, c);
84 }
85 
test_mm_nmsub_pd(__m128d a,__m128d b,__m128d c)86 __m128d test_mm_nmsub_pd(__m128d a, __m128d b, __m128d c) {
87   // CHECK-LABEL: test_mm_nmsub_pd
88   // CHECK: @llvm.x86.fma.vfnmsub.pd
89   return _mm_nmsub_pd(a, b, c);
90 }
91 
test_mm_nmsub_ss(__m128 a,__m128 b,__m128 c)92 __m128 test_mm_nmsub_ss(__m128 a, __m128 b, __m128 c) {
93   // CHECK-LABEL: test_mm_nmsub_ss
94   // CHECK: @llvm.x86.fma.vfnmsub.ss
95   return _mm_nmsub_ss(a, b, c);
96 }
97 
test_mm_nmsub_sd(__m128d a,__m128d b,__m128d c)98 __m128d test_mm_nmsub_sd(__m128d a, __m128d b, __m128d c) {
99   // CHECK-LABEL: test_mm_nmsub_sd
100   // CHECK: @llvm.x86.fma.vfnmsub.sd
101   return _mm_nmsub_sd(a, b, c);
102 }
103 
test_mm_maddsub_ps(__m128 a,__m128 b,__m128 c)104 __m128 test_mm_maddsub_ps(__m128 a, __m128 b, __m128 c) {
105   // CHECK-LABEL: test_mm_maddsub_ps
106   // CHECK: @llvm.x86.fma.vfmaddsub.ps
107   return _mm_maddsub_ps(a, b, c);
108 }
109 
test_mm_maddsub_pd(__m128d a,__m128d b,__m128d c)110 __m128d test_mm_maddsub_pd(__m128d a, __m128d b, __m128d c) {
111   // CHECK-LABEL: test_mm_maddsub_pd
112   // CHECK: @llvm.x86.fma.vfmaddsub.pd
113   return _mm_maddsub_pd(a, b, c);
114 }
115 
test_mm_msubadd_ps(__m128 a,__m128 b,__m128 c)116 __m128 test_mm_msubadd_ps(__m128 a, __m128 b, __m128 c) {
117   // CHECK-LABEL: test_mm_msubadd_ps
118   // CHECK: @llvm.x86.fma.vfmsubadd.ps
119   return _mm_msubadd_ps(a, b, c);
120 }
121 
test_mm_msubadd_pd(__m128d a,__m128d b,__m128d c)122 __m128d test_mm_msubadd_pd(__m128d a, __m128d b, __m128d c) {
123   // CHECK-LABEL: test_mm_msubadd_pd
124   // CHECK: @llvm.x86.fma.vfmsubadd.pd
125   return _mm_msubadd_pd(a, b, c);
126 }
127 
test_mm256_macc_ps(__m256 a,__m256 b,__m256 c)128 __m256 test_mm256_macc_ps(__m256 a, __m256 b, __m256 c) {
129   // CHECK-LABEL: test_mm256_macc_ps
130   // CHECK: @llvm.x86.fma.vfmadd.ps.256
131   return _mm256_macc_ps(a, b, c);
132 }
133 
test_mm256_macc_pd(__m256d a,__m256d b,__m256d c)134 __m256d test_mm256_macc_pd(__m256d a, __m256d b, __m256d c) {
135   // CHECK-LABEL: test_mm256_macc_pd
136   // CHECK: @llvm.x86.fma.vfmadd.pd.256
137   return _mm256_macc_pd(a, b, c);
138 }
139 
test_mm256_msub_ps(__m256 a,__m256 b,__m256 c)140 __m256 test_mm256_msub_ps(__m256 a, __m256 b, __m256 c) {
141   // CHECK-LABEL: test_mm256_msub_ps
142   // CHECK: @llvm.x86.fma.vfmsub.ps.256
143   return _mm256_msub_ps(a, b, c);
144 }
145 
test_mm256_msub_pd(__m256d a,__m256d b,__m256d c)146 __m256d test_mm256_msub_pd(__m256d a, __m256d b, __m256d c) {
147   // CHECK-LABEL: test_mm256_msub_pd
148   // CHECK: @llvm.x86.fma.vfmsub.pd.256
149   return _mm256_msub_pd(a, b, c);
150 }
151 
test_mm256_nmacc_ps(__m256 a,__m256 b,__m256 c)152 __m256 test_mm256_nmacc_ps(__m256 a, __m256 b, __m256 c) {
153   // CHECK-LABEL: test_mm256_nmacc_ps
154   // CHECK: @llvm.x86.fma.vfnmadd.ps.256
155   return _mm256_nmacc_ps(a, b, c);
156 }
157 
test_mm256_nmacc_pd(__m256d a,__m256d b,__m256d c)158 __m256d test_mm256_nmacc_pd(__m256d a, __m256d b, __m256d c) {
159   // CHECK-LABEL: test_mm256_nmacc_pd
160   // CHECK: @llvm.x86.fma.vfnmadd.pd.256
161   return _mm256_nmacc_pd(a, b, c);
162 }
163 
test_mm256_nmsub_ps(__m256 a,__m256 b,__m256 c)164 __m256 test_mm256_nmsub_ps(__m256 a, __m256 b, __m256 c) {
165   // CHECK-LABEL: test_mm256_nmsub_ps
166   // CHECK: @llvm.x86.fma.vfnmsub.ps.256
167   return _mm256_nmsub_ps(a, b, c);
168 }
169 
test_mm256_nmsub_pd(__m256d a,__m256d b,__m256d c)170 __m256d test_mm256_nmsub_pd(__m256d a, __m256d b, __m256d c) {
171   // CHECK-LABEL: test_mm256_nmsub_pd
172   // CHECK: @llvm.x86.fma.vfnmsub.pd.256
173   return _mm256_nmsub_pd(a, b, c);
174 }
175 
test_mm256_maddsub_ps(__m256 a,__m256 b,__m256 c)176 __m256 test_mm256_maddsub_ps(__m256 a, __m256 b, __m256 c) {
177   // CHECK-LABEL: test_mm256_maddsub_ps
178   // CHECK: @llvm.x86.fma.vfmaddsub.ps.256
179   return _mm256_maddsub_ps(a, b, c);
180 }
181 
test_mm256_maddsub_pd(__m256d a,__m256d b,__m256d c)182 __m256d test_mm256_maddsub_pd(__m256d a, __m256d b, __m256d c) {
183   // CHECK-LABEL: test_mm256_maddsub_pd
184   // CHECK: @llvm.x86.fma.vfmaddsub.pd.256
185   return _mm256_maddsub_pd(a, b, c);
186 }
187 
test_mm256_msubadd_ps(__m256 a,__m256 b,__m256 c)188 __m256 test_mm256_msubadd_ps(__m256 a, __m256 b, __m256 c) {
189   // CHECK-LABEL: test_mm256_msubadd_ps
190   // CHECK: @llvm.x86.fma.vfmsubadd.ps.256
191   return _mm256_msubadd_ps(a, b, c);
192 }
193 
test_mm256_msubadd_pd(__m256d a,__m256d b,__m256d c)194 __m256d test_mm256_msubadd_pd(__m256d a, __m256d b, __m256d c) {
195   // CHECK-LABEL: test_mm256_msubadd_pd
196   // CHECK: @llvm.x86.fma.vfmsubadd.pd.256
197   return _mm256_msubadd_pd(a, b, c);
198 }
199