brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.7 KiB · 019dde2 Raw
331 lines · c
1// REQUIRES: x86-registered-target2// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -O2 -emit-llvm -o - | FileCheck %s --check-prefixes=COMMON,COMMONIR,UNCONSTRAINED3// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -ffp-exception-behavior=maytrap -DSTRICT=1 -O2 -emit-llvm -o - | FileCheck %s --check-prefixes=COMMON,COMMONIR,CONSTRAINED4// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -O2 -S -o - | FileCheck %s --check-prefixes=COMMON,CHECK-ASM5// RUN: %clang_cc1 -x c -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -O2 -ffp-exception-behavior=maytrap -DSTRICT=1 -S -o - | FileCheck %s --check-prefixes=COMMON,CHECK-ASM6// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -O2 -emit-llvm -o - | FileCheck %s --check-prefixes=COMMON,COMMONIR,UNCONSTRAINED7// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -ffp-exception-behavior=maytrap -DSTRICT=1 -O2 -emit-llvm -o - | FileCheck %s --check-prefixes=COMMON,COMMONIR,CONSTRAINED8// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -O2 -S -o - | FileCheck %s --check-prefixes=COMMON,CHECK-ASM9// RUN: %clang_cc1 -x c++ -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -O2 -ffp-exception-behavior=maytrap -DSTRICT=1 -S -o - | FileCheck %s --check-prefixes=COMMON,CHECK-ASM10 11#ifdef STRICT12// Test that the constrained intrinsics are picking up the exception13// metadata from the AST instead of the global default from the command line.14 15#pragma float_control(except, on)16#endif17 18#include <immintrin.h>19 20__m128 test_mm_fmadd_ps(__m128 a, __m128 b, __m128 c) {21  // COMMON-LABEL: test_mm_fmadd_ps22  // UNCONSTRAINED: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})23  // CONSTRAINED: call {{.*}}<4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})24  // CHECK-ASM: vfmadd213ps25  return _mm_fmadd_ps(a, b, c);26}27 28__m128d test_mm_fmadd_pd(__m128d a, __m128d b, __m128d c) {29  // COMMON-LABEL: test_mm_fmadd_pd30  // UNCONSTRAINED: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})31  // CONSTRAINED: call {{.*}}<2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})32  // CHECK-ASM: vfmadd213pd33  return _mm_fmadd_pd(a, b, c);34}35 36__m128 test_mm_fmadd_ss(__m128 a, __m128 b, __m128 c) {37  // COMMON-LABEL: test_mm_fmadd_ss38  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 039  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 040  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 041  // UNCONSTRAINED: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})42  // CONSTRAINED: call float @llvm.experimental.constrained.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}, metadata !{{.*}})43  // CHECK-ASM: vfmadd213ss44  // COMMONIR: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 045  return _mm_fmadd_ss(a, b, c);46}47 48__m128d test_mm_fmadd_sd(__m128d a, __m128d b, __m128d c) {49  // COMMON-LABEL: test_mm_fmadd_sd50  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 051  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 052  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 053  // UNCONSTRAINED: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})54  // CONSTRAINED: call double @llvm.experimental.constrained.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}}, metadata !{{.*}})55  // CHECK-ASM: vfmadd213sd56  // COMMONIR: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 057  return _mm_fmadd_sd(a, b, c);58}59 60__m128 test_mm_fmsub_ps(__m128 a, __m128 b, __m128 c) {61  // COMMON-LABEL: test_mm_fmsub_ps62  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}63  // UNCONSTRAINED: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})64  // CONSTRAINED: call {{.*}}<4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})65  // CHECK-ASM: vfmsub213ps66  return _mm_fmsub_ps(a, b, c);67}68 69__m128d test_mm_fmsub_pd(__m128d a, __m128d b, __m128d c) {70  // COMMON-LABEL: test_mm_fmsub_pd71  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}72  // UNCONSTRAINED: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})73  // CONSTRAINED: call {{.*}}<2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})74  // CHECK-ASM: vfmsub213pd75  return _mm_fmsub_pd(a, b, c);76}77 78__m128 test_mm_fmsub_ss(__m128 a, __m128 b, __m128 c) {79  // COMMON-LABEL: test_mm_fmsub_ss80  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 081  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 082  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 083  // COMMONIR: [[NEG:%.+]] = fneg float %{{.+}}84  // UNCONSTRAINED: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})85  // CONSTRAINED: call float @llvm.experimental.constrained.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}, metadata !{{.*}})86  // CHECK-ASM: vfmsub213ss87  // COMMONIR: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 088  return _mm_fmsub_ss(a, b, c);89}90 91__m128d test_mm_fmsub_sd(__m128d a, __m128d b, __m128d c) {92  // COMMON-LABEL: test_mm_fmsub_sd93  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 094  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 095  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 096  // COMMONIR: [[NEG:%.+]] = fneg double %{{.+}}97  // UNCONSTRAINED: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})98  // CONSTRAINED: call double @llvm.experimental.constrained.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}}, metadata !{{.*}})99  // CHECK-ASM: vfmsub213sd100  // COMMONIR: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0101  return _mm_fmsub_sd(a, b, c);102}103 104__m128 test_mm_fnmadd_ps(__m128 a, __m128 b, __m128 c) {105  // COMMON-LABEL: test_mm_fnmadd_ps106  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}107  // UNCONSTRAINED: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})108  // CONSTRAINED: call {{.*}}<4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})109  // CHECK-ASM: vfnmadd213ps110  return _mm_fnmadd_ps(a, b, c);111}112 113__m128d test_mm_fnmadd_pd(__m128d a, __m128d b, __m128d c) {114  // COMMON-LABEL: test_mm_fnmadd_pd115  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}116  // UNCONSTRAINED: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})117  // CONSTRAINED: call {{.*}}<2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})118  // CHECK-ASM: vfnmadd213pd119  return _mm_fnmadd_pd(a, b, c);120}121 122__m128 test_mm_fnmadd_ss(__m128 a, __m128 b, __m128 c) {123  // COMMON-LABEL: test_mm_fnmadd_ss124  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0125  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0126  // COMMONIR: [[NEG:%.+]] = fneg float %{{.+}}127  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0128  // UNCONSTRAINED: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})129  // CONSTRAINED: call float @llvm.experimental.constrained.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}, metadata !{{.*}})130  // CHECK-ASM: vfnmadd213ss131  // COMMONIR: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0132  return _mm_fnmadd_ss(a, b, c);133}134 135__m128d test_mm_fnmadd_sd(__m128d a, __m128d b, __m128d c) {136  // COMMON-LABEL: test_mm_fnmadd_sd137  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0138  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0139  // COMMONIR: [[NEG:%.+]] = fneg double %{{.+}}140  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0141  // UNCONSTRAINED: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})142  // CONSTRAINED: call double @llvm.experimental.constrained.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}}, metadata !{{.*}})143  // CHECK-ASM: vfnmadd213sd144  // COMMONIR: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0145  return _mm_fnmadd_sd(a, b, c);146}147 148__m128 test_mm_fnmsub_ps(__m128 a, __m128 b, __m128 c) {149  // COMMON-LABEL: test_mm_fnmsub_ps150  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}151  // COMMONIR: [[NEG2:%.+]] = fneg <4 x float> %{{.+}}152  // UNCONSTRAINED: call {{.*}}<4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})153  // CONSTRAINED: call {{.*}}<4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})154  // CHECK-ASM: vfnmsub213ps155  return _mm_fnmsub_ps(a, b, c);156}157 158__m128d test_mm_fnmsub_pd(__m128d a, __m128d b, __m128d c) {159  // COMMON-LABEL: test_mm_fnmsub_pd160  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}161  // COMMONIR: [[NEG2:%.+]] = fneg <2 x double> %{{.+}}162  // UNCONSTRAINED: call {{.*}}<2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})163  // CONSTRAINED: call {{.*}}<2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})164  // CHECK-ASM: vfnmsub213pd165  return _mm_fnmsub_pd(a, b, c);166}167 168__m128 test_mm_fnmsub_ss(__m128 a, __m128 b, __m128 c) {169  // COMMON-LABEL: test_mm_fnmsub_ss170  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0171  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0172  // COMMONIR: [[NEG:%.+]] = fneg float %{{.+}}173  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0174  // COMMONIR: [[NEG2:%.+]] = fneg float %{{.+}}175  // UNCONSTRAINED: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})176  // CONSTRAINED: call float @llvm.experimental.constrained.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}, metadata !{{.*}})177  // CHECK-ASM: vfnmsub213ss178  // COMMONIR: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0179  return _mm_fnmsub_ss(a, b, c);180}181 182__m128d test_mm_fnmsub_sd(__m128d a, __m128d b, __m128d c) {183  // COMMON-LABEL: test_mm_fnmsub_sd184  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0185  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0186  // COMMONIR: [[NEG:%.+]] = fneg double %{{.+}}187  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0188  // COMMONIR: [[NEG2:%.+]] = fneg double %{{.+}}189  // UNCONSTRAINED: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})190  // CONSTRAINED: call double @llvm.experimental.constrained.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}}, metadata !{{.*}})191  // CHECK-ASM: vfnmsub213sd192  // COMMONIR: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0193  return _mm_fnmsub_sd(a, b, c);194}195 196__m128 test_mm_fmaddsub_ps(__m128 a, __m128 b, __m128 c) {197  // COMMON-LABEL: test_mm_fmaddsub_ps198  // COMMONIR-NOT: fneg199  // COMMONIR: tail call {{.*}}<4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})200  // CHECK-ASM: vfmaddsub213ps201  return _mm_fmaddsub_ps(a, b, c);202}203 204__m128d test_mm_fmaddsub_pd(__m128d a, __m128d b, __m128d c) {205  // COMMON-LABEL: test_mm_fmaddsub_pd206  // COMMONIR-NOT: fneg207  // COMMONIR: tail call {{.*}}<2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})208  // CHECK-ASM: vfmaddsub213pd209  return _mm_fmaddsub_pd(a, b, c);210}211 212__m128 test_mm_fmsubadd_ps(__m128 a, __m128 b, __m128 c) {213  // COMMON-LABEL: test_mm_fmsubadd_ps214  // COMMONIR: [[FNEG:%.+]] = fneg <4 x float> %{{.*}}215  // COMMONIR: tail call {{.*}}<4 x float> @llvm.x86.fma.vfmaddsub.ps(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[FNEG]])216  // CHECK-ASM: vfmsubadd213ps217  return _mm_fmsubadd_ps(a, b, c);218}219 220__m128d test_mm_fmsubadd_pd(__m128d a, __m128d b, __m128d c) {221  // COMMON-LABEL: test_mm_fmsubadd_pd222  // COMMONIR: [[FNEG:%.+]] = fneg <2 x double> %{{.*}}223  // COMMONIR: tail call {{.*}}<2 x double> @llvm.x86.fma.vfmaddsub.pd(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[FNEG]])224  // CHECK-ASM: vfmsubadd213pd225  return _mm_fmsubadd_pd(a, b, c);226}227 228__m256 test_mm256_fmadd_ps(__m256 a, __m256 b, __m256 c) {229  // COMMON-LABEL: test_mm256_fmadd_ps230  // UNCONSTRAINED: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})231  // CONSTRAINED: call {{.*}}<8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}, metadata !{{.*}})232  // CHECK-ASM: vfmadd213ps233  return _mm256_fmadd_ps(a, b, c);234}235 236__m256d test_mm256_fmadd_pd(__m256d a, __m256d b, __m256d c) {237  // COMMON-LABEL: test_mm256_fmadd_pd238  // UNCONSTRAINED: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})239  // CONSTRAINED: call {{.*}}<4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})240  // CHECK-ASM: vfmadd213pd241  return _mm256_fmadd_pd(a, b, c);242}243 244__m256 test_mm256_fmsub_ps(__m256 a, __m256 b, __m256 c) {245  // COMMON-LABEL: test_mm256_fmsub_ps246  // COMMONIR: [[NEG:%.+]] = fneg <8 x float> %{{.*}}247  // UNCONSTRAINED: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})248  // CONSTRAINED: call {{.*}}<8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}, metadata !{{.*}})249  // CHECK-ASM: vfmsub213ps250  return _mm256_fmsub_ps(a, b, c);251}252 253__m256d test_mm256_fmsub_pd(__m256d a, __m256d b, __m256d c) {254  // COMMON-LABEL: test_mm256_fmsub_pd255  // COMMONIR: [[NEG:%.+]] = fneg <4 x double> %{{.+}}256  // UNCONSTRAINED: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})257  // CONSTRAINED: call {{.*}}<4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})258  // CHECK-ASM: vfmsub213pd259  return _mm256_fmsub_pd(a, b, c);260}261 262__m256 test_mm256_fnmadd_ps(__m256 a, __m256 b, __m256 c) {263  // COMMON-LABEL: test_mm256_fnmadd_ps264  // COMMONIR: [[NEG:%.+]] = fneg <8 x float> %{{.*}}265  // UNCONSTRAINED: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})266  // CONSTRAINED: call {{.*}}<8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}, metadata !{{.*}})267  // CHECK-ASM: vfnmadd213ps268  return _mm256_fnmadd_ps(a, b, c);269}270 271__m256d test_mm256_fnmadd_pd(__m256d a, __m256d b, __m256d c) {272  // COMMON-LABEL: test_mm256_fnmadd_pd273  // COMMONIR: [[NEG:%.+]] = fneg <4 x double> %{{.+}}274  // UNCONSTRAINED: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})275  // CONSTRAINED: call {{.*}}<4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})276  // CHECK-ASM: vfnmadd213pd277  return _mm256_fnmadd_pd(a, b, c);278}279 280__m256 test_mm256_fnmsub_ps(__m256 a, __m256 b, __m256 c) {281  // COMMON-LABEL: test_mm256_fnmsub_ps282  // COMMONIR: [[NEG:%.+]] = fneg <8 x float> %{{.*}}283  // COMMONIR: [[NEG2:%.+]] = fneg <8 x float> %{{.*}}284  // UNCONSTRAINED: call {{.*}}<8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})285  // CONSTRAINED: call {{.*}}<8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}, metadata !{{.*}})286  // CHECK-ASM: vfnmsub213ps287  return _mm256_fnmsub_ps(a, b, c);288}289 290__m256d test_mm256_fnmsub_pd(__m256d a, __m256d b, __m256d c) {291  // COMMON-LABEL: test_mm256_fnmsub_pd292  // COMMONIR: [[NEG:%.+]] = fneg <4 x double> %{{.+}}293  // COMMONIR: [[NEG2:%.+]] = fneg <4 x double> %{{.+}}294  // UNCONSTRAINED: call {{.*}}<4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})295  // CONSTRAINED: call {{.*}}<4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})296  // CHECK-ASM: vfnmsub213pd297  return _mm256_fnmsub_pd(a, b, c);298}299 300__m256 test_mm256_fmaddsub_ps(__m256 a, __m256 b, __m256 c) {301  // COMMON-LABEL: test_mm256_fmaddsub_ps302  // COMMONIR-NOT: fneg303  // COMMONIR: tail call {{.*}}<8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})304  // CHECK-ASM: vfmaddsub213ps305  return _mm256_fmaddsub_ps(a, b, c);306}307 308__m256d test_mm256_fmaddsub_pd(__m256d a, __m256d b, __m256d c) {309  // COMMON-LABEL: test_mm256_fmaddsub_pd310  // COMMONIR-NOT: fneg311  // COMMONIR: tail call {{.*}}<4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})312  // CHECK-ASM: vfmaddsub213pd313  return _mm256_fmaddsub_pd(a, b, c);314}315 316__m256 test_mm256_fmsubadd_ps(__m256 a, __m256 b, __m256 c) {317  // COMMON-LABEL: test_mm256_fmsubadd_ps318  // COMMONIR: [[FNEG:%.+]] = fneg <8 x float> %{{.*}}319  // COMMONIR: tail call {{.*}}<8 x float> @llvm.x86.fma.vfmaddsub.ps.256(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> [[FNEG]])320  // CHECK-ASM: vfmsubadd213ps321  return _mm256_fmsubadd_ps(a, b, c);322}323 324__m256d test_mm256_fmsubadd_pd(__m256d a, __m256d b, __m256d c) {325  // COMMON-LABEL: test_mm256_fmsubadd_pd326  // COMMONIR: [[FNEG:%.+]] = fneg <4 x double> %{{.*}}327  // COMMONIR: tail call {{.*}}<4 x double> @llvm.x86.fma.vfmaddsub.pd.256(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> [[FNEG]])328  // CHECK-ASM: vfmsubadd213pd329  return _mm256_fmsubadd_pd(a, b, c);330}331