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