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