<div dir="ltr">You can't generate assembly from a frontend test unless you also put "REQUIRES: x86-registered-target" in the test<div><br clear="all"><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">~Craig</div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Feb 6, 2020 at 4:17 PM Kevin P. Neal via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Kevin P. Neal<br>
Date: 2020-02-06T19:17:14-05:00<br>
New Revision: ad0e03fd4c8066843f4138e44661ee0287ceb631<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/ad0e03fd4c8066843f4138e44661ee0287ceb631" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/ad0e03fd4c8066843f4138e44661ee0287ceb631</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/ad0e03fd4c8066843f4138e44661ee0287ceb631.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/ad0e03fd4c8066843f4138e44661ee0287ceb631.diff</a><br>
<br>
LOG: Revert "[FPEnv][X86] Platform-specific builtin constrained FP enablement"<br>
<br>
This reverts commit 208470dd5d0a46bc3c24b66489b687eda4954262.<br>
<br>
Tests fail:<br>
error: unable to create target: 'No available targets are compatible with triple "x86_64-apple-darwin"'<br>
<br>
This happens on clang-hexagon-elf, clang-cmake-armv7-quick, and<br>
clang-cmake-armv7-quick bots.<br>
<br>
If anyone has any suggestions on why then I'm all ears.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D73570" rel="noreferrer" target="_blank">https://reviews.llvm.org/D73570</a><br>
<br>
Revert "[FPEnv][X86] Speculative fix for failures introduced by eda495426."<br>
<br>
This reverts commit 80e17e5fcc09dc5baa940022e6988fcb08c5d92d.<br>
<br>
The speculative fix didn't solve the test failures on Hexagon, ARMv6, and<br>
MSVC AArch64.<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    clang/lib/CodeGen/CGBuiltin.cpp<br>
<br>
Removed: <br>
    clang/test/CodeGen/avx512f-builtins-constrained.c<br>
    clang/test/CodeGen/fma-builtins-constrained.c<br>
    clang/test/CodeGen/sse-builtins-constrained.c<br>
<br>
<br>
################################################################################<br>
diff  --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp<br>
index ca41413ae278..44947b4b1d64 100644<br>
--- a/clang/lib/CodeGen/CGBuiltin.cpp<br>
+++ b/clang/lib/CodeGen/CGBuiltin.cpp<br>
@@ -10094,14 +10094,8 @@ static Value *EmitX86FMAExpr(CodeGenFunction &CGF, ArrayRef<Value *> Ops,<br>
     Res = CGF.Builder.CreateCall(Intr, {A, B, C, Ops.back() });<br>
   } else {<br>
     llvm::Type *Ty = A->getType();<br>
-    Function *FMA;<br>
-    if (CGF.Builder.getIsFPConstrained()) {<br>
-      FMA = CGF.CGM.getIntrinsic(Intrinsic::experimental_constrained_fma, Ty);<br>
-      Res = CGF.Builder.CreateConstrainedFPCall(FMA, {A, B, C});<br>
-    } else {<br>
-      FMA = CGF.CGM.getIntrinsic(Intrinsic::fma, Ty);<br>
-      Res = CGF.Builder.CreateCall(FMA, {A, B, C});<br>
-    }<br>
+    Function *FMA = CGF.CGM.getIntrinsic(Intrinsic::fma, Ty);<br>
+    Res = CGF.Builder.CreateCall(FMA, {A, B, C} );<br>
<br>
     if (IsAddSub) {<br>
       // Negate even elts in C using a mask.<br>
@@ -10111,11 +10105,7 @@ static Value *EmitX86FMAExpr(CodeGenFunction &CGF, ArrayRef<Value *> Ops,<br>
         Indices[i] = i + (i % 2) * NumElts;<br>
<br>
       Value *NegC = CGF.Builder.CreateFNeg(C);<br>
-      Value *FMSub;<br>
-      if (CGF.Builder.getIsFPConstrained())<br>
-        FMSub = CGF.Builder.CreateConstrainedFPCall(FMA, {A, B, NegC} );<br>
-      else<br>
-        FMSub = CGF.Builder.CreateCall(FMA, {A, B, NegC} );<br>
+      Value *FMSub = CGF.Builder.CreateCall(FMA, {A, B, NegC} );<br>
       Res = CGF.Builder.CreateShuffleVector(FMSub, Res, Indices);<br>
     }<br>
   }<br>
@@ -10174,10 +10164,6 @@ EmitScalarFMAExpr(CodeGenFunction &CGF, MutableArrayRef<Value *> Ops,<br>
                         Intrinsic::x86_avx512_vfmadd_f64;<br>
     Res = CGF.Builder.CreateCall(CGF.CGM.getIntrinsic(IID),<br>
                                  {Ops[0], Ops[1], Ops[2], Ops[4]});<br>
-  } else if (CGF.Builder.getIsFPConstrained()) {<br>
-    Function *FMA = CGF.CGM.getIntrinsic(<br>
-        Intrinsic::experimental_constrained_fma, Ops[0]->getType());<br>
-    Res = CGF.Builder.CreateConstrainedFPCall(FMA, Ops.slice(0, 3));<br>
   } else {<br>
     Function *FMA = CGF.CGM.getIntrinsic(Intrinsic::fma, Ops[0]->getType());<br>
     Res = CGF.Builder.CreateCall(FMA, Ops.slice(0, 3));<br>
@@ -11906,15 +11892,8 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,<br>
   case X86::BI__builtin_ia32_sqrtss:<br>
   case X86::BI__builtin_ia32_sqrtsd: {<br>
     Value *A = Builder.CreateExtractElement(Ops[0], (uint64_t)0);<br>
-    Function *F;<br>
-    if (Builder.getIsFPConstrained()) {<br>
-      F = CGM.getIntrinsic(Intrinsic::experimental_constrained_sqrt,<br>
-                           A->getType());<br>
-      A = Builder.CreateConstrainedFPCall(F, {A});<br>
-    } else {<br>
-      F = CGM.getIntrinsic(Intrinsic::sqrt, A->getType());<br>
-      A = Builder.CreateCall(F, {A});<br>
-    }<br>
+    Function *F = CGM.getIntrinsic(Intrinsic::sqrt, A->getType());<br>
+    A = Builder.CreateCall(F, {A});<br>
     return Builder.CreateInsertElement(Ops[0], A, (uint64_t)0);<br>
   }<br>
   case X86::BI__builtin_ia32_sqrtsd_round_mask:<br>
@@ -11929,15 +11908,8 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,<br>
       return Builder.CreateCall(CGM.getIntrinsic(IID), Ops);<br>
     }<br>
     Value *A = Builder.CreateExtractElement(Ops[1], (uint64_t)0);<br>
-    Function *F;<br>
-    if (Builder.getIsFPConstrained()) {<br>
-      F = CGM.getIntrinsic(Intrinsic::experimental_constrained_sqrt,<br>
-                           A->getType());<br>
-      A = Builder.CreateConstrainedFPCall(F, A);<br>
-    } else {<br>
-      F = CGM.getIntrinsic(Intrinsic::sqrt, A->getType());<br>
-      A = Builder.CreateCall(F, A);<br>
-    }<br>
+    Function *F = CGM.getIntrinsic(Intrinsic::sqrt, A->getType());<br>
+    A = Builder.CreateCall(F, A);<br>
     Value *Src = Builder.CreateExtractElement(Ops[2], (uint64_t)0);<br>
     A = EmitX86ScalarSelect(*this, Ops[3], A, Src);<br>
     return Builder.CreateInsertElement(Ops[0], A, (uint64_t)0);<br>
@@ -11959,14 +11931,8 @@ Value *CodeGenFunction::EmitX86BuiltinExpr(unsigned BuiltinID,<br>
         return Builder.CreateCall(CGM.getIntrinsic(IID), Ops);<br>
       }<br>
     }<br>
-    if (Builder.getIsFPConstrained()) {<br>
-      Function *F = CGM.getIntrinsic(Intrinsic::experimental_constrained_sqrt,<br>
-                                     Ops[0]->getType());<br>
-      return Builder.CreateConstrainedFPCall(F, Ops[0]);<br>
-    } else {<br>
-      Function *F = CGM.getIntrinsic(Intrinsic::sqrt, Ops[0]->getType());<br>
-      return Builder.CreateCall(F, Ops[0]);<br>
-    }<br>
+    Function *F = CGM.getIntrinsic(Intrinsic::sqrt, Ops[0]->getType());<br>
+    return Builder.CreateCall(F, Ops[0]);<br>
   }<br>
   case X86::BI__builtin_ia32_pabsb128:<br>
   case X86::BI__builtin_ia32_pabsw128:<br>
<br>
diff  --git a/clang/test/CodeGen/avx512f-builtins-constrained.c b/clang/test/CodeGen/avx512f-builtins-constrained.c<br>
deleted file mode 100644<br>
index 75fad73d60f6..000000000000<br>
--- a/clang/test/CodeGen/avx512f-builtins-constrained.c<br>
+++ /dev/null<br>
@@ -1,126 +0,0 @@<br>
-// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +avx512f -emit-llvm -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s<br>
-// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -fms-extensions -fms-compatibility -ffreestanding %s -triple=x86_64-windows-msvc -target-feature +avx512f -emit-llvm -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s<br>
-// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +avx512f -ffp-exception-behavior=strict -emit-llvm -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s<br>
-// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -fms-compatibility -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +avx512f -ffp-exception-behavior=strict -emit-llvm -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s<br>
-// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +avx512f -S -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s<br>
-// RUN: %clang_cc1 -fexperimental-new-pass-manager -flax-vector-conversions=none -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +avx512f -ffp-exception-behavior=strict -S -o - -Wall -Werror | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s<br>
-<br>
-#include <immintrin.h><br>
-<br>
-__m512d test_mm512_sqrt_pd(__m512d a)<br>
-{<br>
-  // COMMON-LABEL: test_mm512_sqrt_pd<br>
-  // UNCONSTRAINED: call <8 x double> @llvm.sqrt.v8f64(<8 x double> %{{.*}})<br>
-  // CONSTRAINED: call <8 x double> @llvm.experimental.constrained.sqrt.v8f64(<8 x double> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtpd<br>
-  return _mm512_sqrt_pd(a);<br>
-}<br>
-<br>
-__m512d test_mm512_mask_sqrt_pd (__m512d __W, __mmask8 __U, __m512d __A)<br>
-{<br>
-  // COMMON-LABEL: test_mm512_mask_sqrt_pd<br>
-  // UNCONSTRAINED: call <8 x double> @llvm.sqrt.v8f64(<8 x double> %{{.*}})<br>
-  // CONSTRAINED: call <8 x double> @llvm.experimental.constrained.sqrt.v8f64(<8 x double> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtpd<br>
-  // COMMONIR: bitcast i8 %{{.*}} to <8 x i1><br>
-  // COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> %{{.*}}<br>
-  return _mm512_mask_sqrt_pd (__W,__U,__A);<br>
-}<br>
-<br>
-__m512d test_mm512_maskz_sqrt_pd (__mmask8 __U, __m512d __A)<br>
-{<br>
-  // COMMON-LABEL: test_mm512_maskz_sqrt_pd<br>
-  // UNCONSTRAINED: call <8 x double> @llvm.sqrt.v8f64(<8 x double> %{{.*}})<br>
-  // CONSTRAINED: call <8 x double> @llvm.experimental.constrained.sqrt.v8f64(<8 x double> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtpd<br>
-  // COMMONIR: bitcast i8 %{{.*}} to <8 x i1><br>
-  // COMMONIR: select <8 x i1> %{{.*}}, <8 x double> %{{.*}}, <8 x double> {{.*}}<br>
-  return _mm512_maskz_sqrt_pd (__U,__A);<br>
-}<br>
-<br>
-__m512 test_mm512_sqrt_ps(__m512 a)<br>
-{<br>
-  // COMMON-LABEL: test_mm512_sqrt_ps<br>
-  // UNCONSTRAINED: call <16 x float> @llvm.sqrt.v16f32(<16 x float> %{{.*}})<br>
-  // CONSTRAINED: call <16 x float> @llvm.experimental.constrained.sqrt.v16f32(<16 x float> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtps<br>
-  return _mm512_sqrt_ps(a);<br>
-}<br>
-<br>
-__m512 test_mm512_mask_sqrt_ps(__m512 __W, __mmask16 __U, __m512 __A)<br>
-{<br>
-  // COMMON-LABEL: test_mm512_mask_sqrt_ps<br>
-  // UNCONSTRAINED: call <16 x float> @llvm.sqrt.v16f32(<16 x float> %{{.*}})<br>
-  // CONSTRAINED: call <16 x float> @llvm.experimental.constrained.sqrt.v16f32(<16 x float> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtps<br>
-  // COMMONIR: bitcast i16 %{{.*}} to <16 x i1><br>
-  // COMMONIR: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> %{{.*}}<br>
-  return _mm512_mask_sqrt_ps( __W, __U, __A);<br>
-}<br>
-<br>
-__m512 test_mm512_maskz_sqrt_ps( __mmask16 __U, __m512 __A)<br>
-{<br>
-  // COMMON-LABEL: test_mm512_maskz_sqrt_ps<br>
-  // UNCONSTRAINED: call <16 x float> @llvm.sqrt.v16f32(<16 x float> %{{.*}})<br>
-  // CONSTRAINED: call <16 x float> @llvm.experimental.constrained.sqrt.v16f32(<16 x float> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtps<br>
-  // COMMONIR: bitcast i16 %{{.*}} to <16 x i1><br>
-  // COMMONIR: select <16 x i1> %{{.*}}, <16 x float> %{{.*}}, <16 x float> {{.*}}<br>
-  return _mm512_maskz_sqrt_ps(__U ,__A);<br>
-}<br>
-<br>
-__m128d test_mm_mask_sqrt_sd(__m128d __W, __mmask8 __U, __m128d __A, __m128d __B){<br>
-  // COMMON-LABEL: test_mm_mask_sqrt_sd<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED-NEXT: call double @llvm.sqrt.f64(double %{{.*}})<br>
-  // CONSTRAINED-NEXT: call double @llvm.experimental.constrained.sqrt.f64(double %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtsd<br>
-  // COMMONIR-NEXT: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR-NEXT: bitcast i8 %{{.*}} to <8 x i1><br>
-  // COMMONIR-NEXT: extractelement <8 x i1> %{{.*}}, i64 0<br>
-  // COMMONIR-NEXT: select i1 {{.*}}, double {{.*}}, double {{.*}}<br>
-  // COMMONIR-NEXT: insertelement <2 x double> %{{.*}}, double {{.*}}, i64 0<br>
-  return _mm_mask_sqrt_sd(__W,__U,__A,__B);<br>
-}<br>
-<br>
-__m128d test_mm_maskz_sqrt_sd(__mmask8 __U, __m128d __A, __m128d __B){<br>
-  // COMMON-LABEL: test_mm_maskz_sqrt_sd<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED-NEXT: call double @llvm.sqrt.f64(double %{{.*}})<br>
-  // CONSTRAINED-NEXT: call double @llvm.experimental.constrained.sqrt.f64(double %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtsd<br>
-  // COMMONIR-NEXT: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR-NEXT: bitcast i8 %{{.*}} to <8 x i1><br>
-  // COMMONIR-NEXT: extractelement <8 x i1> %{{.*}}, i64 0<br>
-  // COMMONIR-NEXT: select i1 {{.*}}, double {{.*}}, double {{.*}}<br>
-  // COMMONIR-NEXT: insertelement <2 x double> %{{.*}}, double {{.*}}, i64 0<br>
-  return _mm_maskz_sqrt_sd(__U,__A,__B);<br>
-}<br>
-<br>
-__m128 test_mm_mask_sqrt_ss(__m128 __W, __mmask8 __U, __m128 __A, __m128 __B){<br>
-  // COMMON-LABEL: test_mm_mask_sqrt_ss<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED-NEXT: call float @llvm.sqrt.f32(float %{{.*}})<br>
-  // CONSTRAINED-NEXT: call float @llvm.experimental.constrained.sqrt.f32(float %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtss<br>
-  // COMMONIR-NEXT: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR-NEXT: bitcast i8 %{{.*}} to <8 x i1><br>
-  // COMMONIR-NEXT: extractelement <8 x i1> %{{.*}}, i64 0<br>
-  // COMMONIR-NEXT: select i1 {{.*}}, float {{.*}}, float {{.*}}<br>
-  // COMMONIR-NEXT: insertelement <4 x float> %{{.*}}, float {{.*}}, i64 0<br>
-  return _mm_mask_sqrt_ss(__W,__U,__A,__B);<br>
-}<br>
-<br>
-__m128 test_mm_maskz_sqrt_ss(__mmask8 __U, __m128 __A, __m128 __B){<br>
-  // COMMON-LABEL: test_mm_maskz_sqrt_ss<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED-NEXT: call float @llvm.sqrt.f32(float %{{.*}})<br>
-  // CONSTRAINED-NEXT: call float @llvm.experimental.constrained.sqrt.f32(float %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vsqrtss<br>
-  // COMMONIR-NEXT: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR-NEXT: bitcast i8 %{{.*}} to <8 x i1><br>
-  // COMMONIR-NEXT: extractelement <8 x i1> %{{.*}}, i64 0<br>
-  // COMMONIR-NEXT: select i1 {{.*}}, float {{.*}}, float {{.*}}<br>
-  // COMMONIR-NEXT: insertelement <4 x float> %{{.*}}, float {{.*}}, i64 0<br>
-  return _mm_maskz_sqrt_ss(__U,__A,__B);<br>
-}<br>
<br>
diff  --git a/clang/test/CodeGen/fma-builtins-constrained.c b/clang/test/CodeGen/fma-builtins-constrained.c<br>
deleted file mode 100644<br>
index 8a3ce821a568..000000000000<br>
--- a/clang/test/CodeGen/fma-builtins-constrained.c<br>
+++ /dev/null<br>
@@ -1,352 +0,0 @@<br>
-// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -O -emit-llvm -o - | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s<br>
-// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -ffp-exception-behavior=strict -O -emit-llvm -o - | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s<br>
-// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -O -S -o - | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s<br>
-// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +fma -O -ffp-exception-behavior=strict -S -o - | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s<br>
-<br>
-// FIXME: Several of these tests are broken when constrained.<br>
-<br>
-#include <immintrin.h><br>
-<br>
-__m128 test_mm_fmadd_ps(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fmadd_ps<br>
-  // UNCONSTRAINED: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})<br>
-  // CONSTRAINED: call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vfmadd213ps<br>
-  return _mm_fmadd_ps(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fmadd_pd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fmadd_pd<br>
-  // UNCONSTRAINED: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})<br>
-  // CONSTRAINED: call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vfmadd213pd<br>
-  return _mm_fmadd_pd(a, b, c);<br>
-}<br>
-<br>
-__m128 test_mm_fmadd_ss(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fmadd_ss<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})<br>
-  // CONSTRAINED: call float @llvm.experimental.constrained.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vfmadd213ss<br>
-  // COMMONIR: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0<br>
-  return _mm_fmadd_ss(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fmadd_sd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fmadd_sd<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})<br>
-  // CONSTRAINED: call double @llvm.experimental.constrained.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vfmadd213sd<br>
-  // COMMONIR: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0<br>
-  return _mm_fmadd_sd(a, b, c);<br>
-}<br>
-<br>
-__m128 test_mm_fmsub_ps(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fmsub_ps<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // UNCONSTRAINED: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})<br>
-  // CONSTRAINED: call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsub213ps<br>
-  return _mm_fmsub_ps(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fmsub_pd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fmsub_pd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // UNCONSTRAINED: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})<br>
-  // CONSTRAINED: call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsub213pd<br>
-  return _mm_fmsub_pd(a, b, c);<br>
-}<br>
-<br>
-__m128 test_mm_fmsub_ss(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fmsub_ss<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})<br>
-  // CONSTRAINED: call float @llvm.experimental.constrained.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsub213ss<br>
-  // COMMONIR: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0<br>
-  return _mm_fmsub_ss(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fmsub_sd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fmsub_sd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})<br>
-  // CONSTRAINED: call double @llvm.experimental.constrained.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsub213sd<br>
-  // COMMONIR: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0<br>
-  return _mm_fmsub_sd(a, b, c);<br>
-}<br>
-<br>
-__m128 test_mm_fnmadd_ps(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fnmadd_ps<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // UNCONSTRAINED: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})<br>
-  // CONSTRAINED: call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmadd213ps<br>
-  return _mm_fnmadd_ps(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fnmadd_pd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fnmadd_pd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // UNCONSTRAINED: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})<br>
-  // CONSTRAINED: call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmadd213pd<br>
-  return _mm_fnmadd_pd(a, b, c);<br>
-}<br>
-<br>
-__m128 test_mm_fnmadd_ss(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fnmadd_ss<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})<br>
-  // CONSTRAINED: call float @llvm.experimental.constrained.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmadd213ss<br>
-  // COMMONIR: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0<br>
-  return _mm_fnmadd_ss(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fnmadd_sd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fnmadd_sd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})<br>
-  // CONSTRAINED: call double @llvm.experimental.constrained.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmadd213sd<br>
-  // COMMONIR: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0<br>
-  return _mm_fnmadd_sd(a, b, c);<br>
-}<br>
-<br>
-__m128 test_mm_fnmsub_ps(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fnmsub_ps<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // COMMONIR: [[NEG2:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // UNCONSTRAINED: call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})<br>
-  // CONSTRAINED: call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmsub213ps<br>
-  return _mm_fnmsub_ps(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fnmsub_pd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fnmsub_pd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // COMMONIR: [[NEG2:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // UNCONSTRAINED: call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})<br>
-  // CONSTRAINED: call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmsub213pd<br>
-  return _mm_fnmsub_pd(a, b, c);<br>
-}<br>
-<br>
-__m128 test_mm_fnmsub_ss(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fnmsub_ss<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // COMMONIR: [[NEG2:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <4 x float> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED: call float @llvm.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})<br>
-  // CONSTRAINED: call float @llvm.experimental.constrained.fma.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmsub213ss<br>
-  // COMMONIR: insertelement <4 x float> %{{.*}}, float %{{.*}}, i64 0<br>
-  return _mm_fnmsub_ss(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fnmsub_sd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fnmsub_sd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // COMMONIR: [[NEG2:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // COMMONIR: extractelement <2 x double> %{{.*}}, i64 0<br>
-  // UNCONSTRAINED: call double @llvm.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}})<br>
-  // CONSTRAINED: call double @llvm.experimental.constrained.fma.f64(double %{{.*}}, double %{{.*}}, double %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmsub213sd<br>
-  // COMMONIR: insertelement <2 x double> %{{.*}}, double %{{.*}}, i64 0<br>
-  return _mm_fnmsub_sd(a, b, c);<br>
-}<br>
-<br>
-__m128 test_mm_fmaddsub_ps(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fmaddsub_ps<br>
-  // UNCONSTRAINED: [[ADD:%.+]] = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})<br>
-  // CONSTRAINED: [[ADD:%.+]] = tail call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // UNCONSTRAINED: [[SUB:%.+]] = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[NEG]])<br>
-  // CONSTRAINED: [[SUB:%.+]] = tail call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[NEG]], metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmaddsub213ps<br>
-  // COMMONIR: shufflevector <4 x float> [[SUB]], <4 x float> [[ADD]], <4 x i32> <i32 0, i32 5, i32 2, i32 7><br>
-  return _mm_fmaddsub_ps(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fmaddsub_pd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fmaddsub_pd<br>
-  // UNCONSTRAINED: [[ADD:%.+]] = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})<br>
-  // CONSTRAINED: [[ADD:%.+]] = tail call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // UNCONSTRAINED: [[SUB:%.+]] = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[NEG]])<br>
-  // CONSTRAINED: [[SUB:%.+]] = tail call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[NEG]], metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmaddsub213pd<br>
-  // COMMONIR: shufflevector <2 x double> [[SUB]], <2 x double> [[ADD]], <2 x i32> <i32 0, i32 3><br>
-  return _mm_fmaddsub_pd(a, b, c);<br>
-}<br>
-<br>
-__m128 test_mm_fmsubadd_ps(__m128 a, __m128 b, __m128 c) {<br>
-  // COMMON-LABEL: test_mm_fmsubadd_ps<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x float> %{{.+}}<br>
-  // UNCONSTRAINED: [[SUB:%.+]] = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[NEG]]<br>
-  // CONSTRAINED: [[SUB:%.+]] = tail call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> [[NEG]], metadata !{{.*}})<br>
-  // UNCONSTRAINED: [[ADD:%.+]] = tail call <4 x float> @llvm.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})<br>
-  // CONSTRAINED: [[ADD:%.+]] = tail call <4 x float> @llvm.experimental.constrained.fma.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsubadd213ps<br>
-  // COMMONIR: shufflevector <4 x float> [[ADD]], <4 x float> [[SUB]], <4 x i32> <i32 0, i32 5, i32 2, i32 7><br>
-  return _mm_fmsubadd_ps(a, b, c);<br>
-}<br>
-<br>
-__m128d test_mm_fmsubadd_pd(__m128d a, __m128d b, __m128d c) {<br>
-  // COMMON-LABEL: test_mm_fmsubadd_pd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <2 x double> %{{.+}}<br>
-  // UNCONSTRAINED: [[SUB:%.+]] = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[NEG]])<br>
-  // CONSTRAINED: [[SUB:%.+]] = tail call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> [[NEG]], metadata !{{.*}})<br>
-  // UNCONSTRAINED: [[ADD:%.+]] = tail call <2 x double> @llvm.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}})<br>
-  // CONSTRAINED: [[ADD:%.+]] = tail call <2 x double> @llvm.experimental.constrained.fma.v2f64(<2 x double> %{{.*}}, <2 x double> %{{.*}}, <2 x double> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsubadd213pd<br>
-  // COMMONIR: shufflevector <2 x double> [[ADD]], <2 x double> [[SUB]], <2 x i32> <i32 0, i32 3><br>
-  return _mm_fmsubadd_pd(a, b, c);<br>
-}<br>
-<br>
-__m256 test_mm256_fmadd_ps(__m256 a, __m256 b, __m256 c) {<br>
-  // COMMON-LABEL: test_mm256_fmadd_ps<br>
-  // UNCONSTRAINED: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})<br>
-  // CONSTRAINED: call <8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vfmadd213ps<br>
-  return _mm256_fmadd_ps(a, b, c);<br>
-}<br>
-<br>
-__m256d test_mm256_fmadd_pd(__m256d a, __m256d b, __m256d c) {<br>
-  // COMMON-LABEL: test_mm256_fmadd_pd<br>
-  // UNCONSTRAINED: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})<br>
-  // CONSTRAINED: call <4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: vfmadd213pd<br>
-  return _mm256_fmadd_pd(a, b, c);<br>
-}<br>
-<br>
-__m256 test_mm256_fmsub_ps(__m256 a, __m256 b, __m256 c) {<br>
-  // COMMON-LABEL: test_mm256_fmsub_ps<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <8 x float> %{{.*}}<br>
-  // UNCONSTRAINED: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})<br>
-  // CONSTRAINED: call <8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsub213ps<br>
-  return _mm256_fmsub_ps(a, b, c);<br>
-}<br>
-<br>
-__m256d test_mm256_fmsub_pd(__m256d a, __m256d b, __m256d c) {<br>
-  // COMMON-LABEL: test_mm256_fmsub_pd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x double> %{{.+}}<br>
-  // UNCONSTRAINED: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})<br>
-  // CONSTRAINED: call <4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsub213pd<br>
-  return _mm256_fmsub_pd(a, b, c);<br>
-}<br>
-<br>
-__m256 test_mm256_fnmadd_ps(__m256 a, __m256 b, __m256 c) {<br>
-  // COMMON-LABEL: test_mm256_fnmadd_ps<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <8 x float> %{{.*}}<br>
-  // UNCONSTRAINED: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})<br>
-  // CONSTRAINED: call <8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmadd213ps<br>
-  return _mm256_fnmadd_ps(a, b, c);<br>
-}<br>
-<br>
-__m256d test_mm256_fnmadd_pd(__m256d a, __m256d b, __m256d c) {<br>
-  // COMMON-LABEL: test_mm256_fnmadd_pd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x double> %{{.+}}<br>
-  // UNCONSTRAINED: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})<br>
-  // CONSTRAINED: call <4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmadd213pd<br>
-  return _mm256_fnmadd_pd(a, b, c);<br>
-}<br>
-<br>
-__m256 test_mm256_fnmsub_ps(__m256 a, __m256 b, __m256 c) {<br>
-  // COMMON-LABEL: test_mm256_fnmsub_ps<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <8 x float> %{{.*}}<br>
-  // COMMONIR: [[NEG2:%.+]] = fneg <8 x float> %{{.*}}<br>
-  // UNCONSTRAINED: call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})<br>
-  // CONSTRAINED: call <8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmsub213ps<br>
-  return _mm256_fnmsub_ps(a, b, c);<br>
-}<br>
-<br>
-__m256d test_mm256_fnmsub_pd(__m256d a, __m256d b, __m256d c) {<br>
-  // COMMON-LABEL: test_mm256_fnmsub_pd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x double> %{{.+}}<br>
-  // COMMONIR: [[NEG2:%.+]] = fneg <4 x double> %{{.+}}<br>
-  // UNCONSTRAINED: call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})<br>
-  // CONSTRAINED: call <4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfnmsub213pd<br>
-  return _mm256_fnmsub_pd(a, b, c);<br>
-}<br>
-<br>
-__m256 test_mm256_fmaddsub_ps(__m256 a, __m256 b, __m256 c) {<br>
-  // COMMON-LABEL: test_mm256_fmaddsub_ps<br>
-  // UNCONSTRAINED: [[ADD:%.+]] = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})<br>
-  // CONSTRAINED: [[ADD:%.+]] = tail call <8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <8 x float> %{{.*}}<br>
-  // UNCONSTRAINED: [[SUB:%.+]] = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> [[NEG]])<br>
-  // CONSTRAINED: [[SUB:%.+]] = tail call <8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> [[NEG]], metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmaddsub213ps<br>
-  // COMMONIR: shufflevector <8 x float> [[SUB]], <8 x float> [[ADD]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15><br>
-  return _mm256_fmaddsub_ps(a, b, c);<br>
-}<br>
-<br>
-__m256d test_mm256_fmaddsub_pd(__m256d a, __m256d b, __m256d c) {<br>
-  // COMMON-LABEL: test_mm256_fmaddsub_pd<br>
-  // UNCONSTRAINED: [[ADD:%.+]] = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})<br>
-  // CONSTRAINED: [[ADD:%.+]] = tail call <4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x double> %{{.+}}<br>
-  // UNCONSTRAINED: [[SUB:%.+]] = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})<br>
-  // CONSTRAINED: [[SUB:%.+]] = tail call <4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmaddsub213pd<br>
-  // COMMONIR: shufflevector <4 x double> [[SUB]], <4 x double> [[ADD]], <4 x i32> <i32 0, i32 5, i32 2, i32 7><br>
-  return _mm256_fmaddsub_pd(a, b, c);<br>
-}<br>
-<br>
-__m256 test_mm256_fmsubadd_ps(__m256 a, __m256 b, __m256 c) {<br>
-  // COMMON-LABEL: test_mm256_fmsubadd_ps<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <8 x float> %{{.*}}<br>
-  // UNCONSTRAINED: [[SUB:%.+]] = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> [[NEG]])<br>
-  // CONSTRAINED: [[SUB:%.+]] = tail call <8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> [[NEG]], metadata !{{.*}})<br>
-  // UNCONSTRAINED: [[ADD:%.+]] = tail call <8 x float> @llvm.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}})<br>
-  // CONSTRAINED: [[ADD:%.+]] = tail call <8 x float> @llvm.experimental.constrained.fma.v8f32(<8 x float> %{{.*}}, <8 x float> %{{.*}}, <8 x float> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsubadd213ps<br>
-  // COMMONIR: shufflevector <8 x float> [[ADD]], <8 x float> [[SUB]], <8 x i32> <i32 0, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 15><br>
-  return _mm256_fmsubadd_ps(a, b, c);<br>
-}<br>
-<br>
-__m256d test_mm256_fmsubadd_pd(__m256d a, __m256d b, __m256d c) {<br>
-  // COMMON-LABEL: test_mm256_fmsubadd_pd<br>
-  // COMMONIR: [[NEG:%.+]] = fneg <4 x double> %{{.+}}<br>
-  // UNCONSTRAINED: [[SUB:%.+]] = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> [[NEG]])<br>
-  // CONSTRAINED: [[SUB:%.+]] = tail call <4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> [[NEG]], metadata !{{.*}})<br>
-  // UNCONSTRAINED: [[ADD:%.+]] = tail call <4 x double> @llvm.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}})<br>
-  // CONSTRAINED: [[ADD:%.+]] = tail call <4 x double> @llvm.experimental.constrained.fma.v4f64(<4 x double> %{{.*}}, <4 x double> %{{.*}}, <4 x double> %{{.*}}, metadata !{{.*}})<br>
-  // FIXME-CHECK-ASM: vfmsubadd213pd<br>
-  // COMMONIR: shufflevector <4 x double> [[ADD]], <4 x double> [[SUB]], <4 x i32> <i32 0, i32 5, i32 2, i32 7><br>
-  return _mm256_fmsubadd_pd(a, b, c);<br>
-}<br>
<br>
diff  --git a/clang/test/CodeGen/sse-builtins-constrained.c b/clang/test/CodeGen/sse-builtins-constrained.c<br>
deleted file mode 100644<br>
index af8e6e3a5dd7..000000000000<br>
--- a/clang/test/CodeGen/sse-builtins-constrained.c<br>
+++ /dev/null<br>
@@ -1,26 +0,0 @@<br>
-// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=UNCONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR<br>
-// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -ffp-exception-behavior=strict -emit-llvm -o - -Wall -Werror | FileCheck %s --check-prefix=CONSTRAINED --check-prefix=COMMON --check-prefix=COMMONIR<br>
-// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -S %s -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON<br>
-// RUN: %clang_cc1 -ffreestanding %s -triple=x86_64-unknown-linux-gnu -target-feature +sse -ffp-exception-behavior=strict -S %s -o - -Wall -Werror | FileCheck %s --check-prefix=CHECK-ASM --check-prefix=COMMON<br>
-<br>
-<br>
-#include <immintrin.h><br>
-<br>
-__m128 test_mm_sqrt_ps(__m128 x) {<br>
-  // COMMON-LABEL: test_mm_sqrt_ps<br>
-  // UNCONSTRAINED: call <4 x float> @llvm.sqrt.v4f32(<4 x float> {{.*}})<br>
-  // CONSTRAINED: call <4 x float> @llvm.experimental.constrained.sqrt.v4f32(<4 x float> {{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: sqrtps<br>
-  return _mm_sqrt_ps(x);<br>
-}<br>
-<br>
-__m128 test_sqrt_ss(__m128 x) {<br>
-  // COMMON-LABEL: test_sqrt_ss<br>
-  // COMMONIR: extractelement <4 x float> {{.*}}, i64 0<br>
-  // UNCONSTRAINED: call float @llvm.sqrt.f32(float {{.*}})<br>
-  // CONSTRAINED: call float @llvm.experimental.constrained.sqrt.f32(float {{.*}}, metadata !{{.*}})<br>
-  // CHECK-ASM: sqrtss<br>
-  // COMMONIR: insertelement <4 x float> {{.*}}, float {{.*}}, i64 0<br>
-  return _mm_sqrt_ss(x);<br>
-}<br>
-<br>
<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>