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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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