197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper// RUN: %clang_cc1 %s -O3 -triple=x86_64-apple-darwin -target-feature +fma -emit-llvm -o - | FileCheck %s
297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper// Don't include mm_malloc.h, it's system specific.
497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper#define __MM_MALLOC_H
597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper#include <immintrin.h>
797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fmadd_ps(__m128 a, __m128 b, __m128 c) {
997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmadd.ps
1097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmadd_ps(a, b, c);
1197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
1297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
1397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fmadd_pd(__m128d a, __m128d b, __m128d c) {
1497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmadd.pd
1597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmadd_pd(a, b, c);
1697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
1797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
1897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fmadd_ss(__m128 a, __m128 b, __m128 c) {
1997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmadd.ss
2097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmadd_ss(a, b, c);
2197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
2297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
2397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fmadd_sd(__m128d a, __m128d b, __m128d c) {
2497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmadd.sd
2597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmadd_sd(a, b, c);
2697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
2797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
2897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fmsub_ps(__m128 a, __m128 b, __m128 c) {
2997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsub.ps
3097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmsub_ps(a, b, c);
3197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
3297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
3397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fmsub_pd(__m128d a, __m128d b, __m128d c) {
3497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsub.pd
3597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmsub_pd(a, b, c);
3697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
3797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
3897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fmsub_ss(__m128 a, __m128 b, __m128 c) {
3997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsub.ss
4097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmsub_ss(a, b, c);
4197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
4297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
4397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fmsub_sd(__m128d a, __m128d b, __m128d c) {
4497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsub.sd
4597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmsub_sd(a, b, c);
4697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
4797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
4897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fnmadd_ps(__m128 a, __m128 b, __m128 c) {
4997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmadd.ps
5097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fnmadd_ps(a, b, c);
5197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
5297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
5397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fnmadd_pd(__m128d a, __m128d b, __m128d c) {
5497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmadd.pd
5597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fnmadd_pd(a, b, c);
5697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
5797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
5897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fnmadd_ss(__m128 a, __m128 b, __m128 c) {
5997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmadd.ss
6097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fnmadd_ss(a, b, c);
6197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
6297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
6397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fnmadd_sd(__m128d a, __m128d b, __m128d c) {
6497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmadd.sd
6597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fnmadd_sd(a, b, c);
6697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
6797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
6897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fnmsub_ps(__m128 a, __m128 b, __m128 c) {
6997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmsub.ps
7097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fnmsub_ps(a, b, c);
7197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
7297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
7397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fnmsub_pd(__m128d a, __m128d b, __m128d c) {
7497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmsub.pd
7597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fnmsub_pd(a, b, c);
7697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
7797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
7897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fnmsub_ss(__m128 a, __m128 b, __m128 c) {
7997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmsub.ss
8097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fnmsub_ss(a, b, c);
8197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
8297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
8397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fnmsub_sd(__m128d a, __m128d b, __m128d c) {
8497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmsub.sd
8597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fnmsub_sd(a, b, c);
8697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
8797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
8897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fmaddsub_ps(__m128 a, __m128 b, __m128 c) {
8997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmaddsub.ps
9097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmaddsub_ps(a, b, c);
9197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
9297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
9397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fmaddsub_pd(__m128d a, __m128d b, __m128d c) {
9497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmaddsub.pd
9597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmaddsub_pd(a, b, c);
9697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
9797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
9897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128 test_mm_fmsubadd_ps(__m128 a, __m128 b, __m128 c) {
9997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsubadd.ps
10097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmsubadd_ps(a, b, c);
10197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
10297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
10397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m128d test_mm_fmsubadd_pd(__m128d a, __m128d b, __m128d c) {
10497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsubadd.pd
10597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm_fmsubadd_pd(a, b, c);
10697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
10797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
10897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256 test_mm256_fmadd_ps(__m256 a, __m256 b, __m256 c) {
10997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmadd.ps.256
11097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fmadd_ps(a, b, c);
11197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
11297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
11397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256d test_mm256_fmadd_pd(__m256d a, __m256d b, __m256d c) {
11497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmadd.pd.256
11597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fmadd_pd(a, b, c);
11697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
11797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
11897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256 test_mm256_fmsub_ps(__m256 a, __m256 b, __m256 c) {
11997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsub.ps.256
12097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fmsub_ps(a, b, c);
12197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
12297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
12397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256d test_mm256_fmsub_pd(__m256d a, __m256d b, __m256d c) {
12497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsub.pd.256
12597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fmsub_pd(a, b, c);
12697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
12797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
12897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256 test_mm256_fnmadd_ps(__m256 a, __m256 b, __m256 c) {
12997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmadd.ps.256
13097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fnmadd_ps(a, b, c);
13197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
13297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
13397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256d test_mm256_fnmadd_pd(__m256d a, __m256d b, __m256d c) {
13497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmadd.pd.256
13597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fnmadd_pd(a, b, c);
13697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
13797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
13897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256 test_mm256_fnmsub_ps(__m256 a, __m256 b, __m256 c) {
13997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmsub.ps.256
14097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fnmsub_ps(a, b, c);
14197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
14297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
14397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256d test_mm256_fnmsub_pd(__m256d a, __m256d b, __m256d c) {
14497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfnmsub.pd.256
14597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fnmsub_pd(a, b, c);
14697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
14797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
14897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256 test_mm256_fmaddsub_ps(__m256 a, __m256 b, __m256 c) {
14997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmaddsub.ps.256
15097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fmaddsub_ps(a, b, c);
15197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
15297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
15397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256d test_mm256_fmaddsub_pd(__m256d a, __m256d b, __m256d c) {
15497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmaddsub.pd.256
15597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fmaddsub_pd(a, b, c);
15697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
15797075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
15897075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256 test_mm256_fmsubadd_ps(__m256 a, __m256 b, __m256 c) {
15997075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsubadd.ps.256
16097075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fmsubadd_ps(a, b, c);
16197075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
16297075fb073ffc40aef4c2fdef393b715e514301eCraig Topper
16397075fb073ffc40aef4c2fdef393b715e514301eCraig Topper__m256d test_mm256_fmsubadd_pd(__m256d a, __m256d b, __m256d c) {
16497075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  // CHECK: @llvm.x86.fma.vfmsubadd.pd.256
16597075fb073ffc40aef4c2fdef393b715e514301eCraig Topper  return _mm256_fmsubadd_pd(a, b, c);
16697075fb073ffc40aef4c2fdef393b715e514301eCraig Topper}
167