[clang] [llvm] Reapply "DAGCombiner: Drop AllowFPOpFusion from visitFADDForFMACombine" (#221561) (PR #221567)

Matt Arsenault via cfe-commits cfe-commits at lists.llvm.org
Sun Sep 6 06:00:16 PDT 2026


https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/221567

This reverts commit 502e51aa4df687807fbe51fa0b419baf65e9615f.

>From 7333b0b466f80826e2c4939d63056835bcb61514 Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Sun, 6 Sep 2026 14:23:49 +0200
Subject: [PATCH] Reapply "DAGCombiner: Drop AllowFPOpFusion from
 visitFADDForFMACombine" (#221561)

This reverts commit 502e51aa4df687807fbe51fa0b419baf65e9615f.
---
 clang/test/CodeGenCUDA/fp-contract.cu         |   16 +-
 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp |    6 +-
 .../arm64-fma-combine-with-fpfusion.ll        |    6 +-
 llvm/test/CodeGen/AArch64/fp-dp3.ll           |  152 +-
 llvm/test/CodeGen/AArch64/neon-fma.ll         |   26 +-
 llvm/test/CodeGen/AMDGPU/madak.ll             |  859 +++++-----
 llvm/test/CodeGen/ARM/fp16-instructions.ll    |   20 +-
 llvm/test/CodeGen/Hexagon/float-amode.ll      |    6 +-
 llvm/test/CodeGen/Hexagon/fmadd.ll            |    6 +-
 llvm/test/CodeGen/Hexagon/fp_latency.ll       |   14 +-
 llvm/test/CodeGen/LoongArch/double-fma.ll     | 1188 ++++---------
 llvm/test/CodeGen/LoongArch/float-fma.ll      | 1188 ++++---------
 llvm/test/CodeGen/LoongArch/lasx/fma-v4f64.ll | 1508 ++++-------------
 llvm/test/CodeGen/LoongArch/lasx/fma-v8f32.ll | 1508 ++++-------------
 llvm/test/CodeGen/LoongArch/lsx/fma-v2f64.ll  |  742 ++------
 llvm/test/CodeGen/LoongArch/lsx/fma-v4f32.ll  |  742 ++------
 llvm/test/CodeGen/PowerPC/a2-fp-basic.ll      |   18 +-
 llvm/test/CodeGen/PowerPC/fma-assoc.ll        |  247 ++-
 llvm/test/CodeGen/PowerPC/fma-ext.ll          |   32 +-
 llvm/test/CodeGen/PowerPC/fma.ll              |   86 +-
 llvm/test/CodeGen/PowerPC/ppc440-fp-basic.ll  |   18 +-
 .../PowerPC/vsx-fma-mutate-trivial-copy.ll    |    8 +-
 llvm/test/CodeGen/SPARC/float-ua2007.ll       |   36 +-
 llvm/test/CodeGen/Thumb2/mve-fmas.ll          |  447 ++---
 24 files changed, 2591 insertions(+), 6288 deletions(-)

diff --git a/clang/test/CodeGenCUDA/fp-contract.cu b/clang/test/CodeGenCUDA/fp-contract.cu
index 8e2942fc8104d..d98d5ca3f462b 100644
--- a/clang/test/CodeGenCUDA/fp-contract.cu
+++ b/clang/test/CodeGenCUDA/fp-contract.cu
@@ -252,21 +252,16 @@ __host__ __device__ float func2(float a, float b, float c) {
 // AMD-OPT-OFF-NEXT: v_add_f32_e32
 // AMD-OPT-OFF-NEXT: s_setpc_b64
 
-// Test multiply/add in the different statements, which is forced
-// to be compiled with fp contract on. fmul/fadd without contract
-// flags are emitted in IR. In nvptx, they are emitted as FMA in
-// fp-contract is fast but not on, as nvptx backend uses the same
-// fp fuse option as front end, whereas fast fp fuse option in
-// backend fuses fadd/fmul disregarding contract flag. In amdgcn
-// they are not fused as amdgcn always use standard fp fusion
-// option which respects contract flag.
+// Test multiply/add in the different statements, which is forced to be compiled
+// with fp contract on. fmul/fadd without contract flags are emitted in IR.
   __host__ __device__ float func3(float a, float b, float c) {
 #pragma clang fp contract(on)
   float t = b * c;
   return t + a;
 }
 // COMMON-LABEL: _Z5func3fff
-// NV-OPT-FAST: fma.rn.f32
+// NV-OPT-FAST: mul.rn.f32
+// NV-OPT-FAST: add.rn.f32
 // NV-OPT-FAST-NEXT: st.param.b32
 // NV-OPT-FASTSTD: mul.rn.f32
 // NV-OPT-FASTSTD: add.rn.f32
@@ -285,7 +280,8 @@ __host__ __device__ float func2(float a, float b, float c) {
 // AMD-OPT-OFF-IR: fmul float
 // AMD-OPT-OFF-IR: fadd float
 
-// AMD-OPT-FAST: v_fmac_f32_e32
+// AMD-OPT-FAST: v_mul_f32_e32
+// AMD-OPT-FAST-NEXT: v_add_f32_e32
 // AMD-OPT-FAST-NEXT: s_setpc_b64
 // AMD-OPT-FASTSTD: v_mul_f32_e32
 // AMD-OPT-FASTSTD-NEXT: v_add_f32_e32
diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
index 70e23360ed9ea..82d4921ae405b 100644
--- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp
@@ -18679,7 +18679,6 @@ SDValue DAGCombiner::visitFADDForFMACombine(SDNode *N) {
   SDValue N1 = N->getOperand(1);
   EVT VT = N->getValueType(0);
   SDLoc SL(N);
-  const TargetOptions &Options = DAG.getTarget().Options;
 
   // Floating-point multiply-add with intermediate rounding.
   bool HasFMAD = (LegalOperations && TLI.isFMADLegal(DAG, N));
@@ -18693,8 +18692,9 @@ SDValue DAGCombiner::visitFADDForFMACombine(SDNode *N) {
   if (!HasFMAD && !HasFMA)
     return SDValue();
 
-  bool AllowFusionGlobally =
-      Options.AllowFPOpFusion == FPOpFusion::Fast || HasFMAD;
+  // FMAD (with intermediate rounding) is always safe to form; FMA requires the
+  // contract fast-math flag.
+  bool AllowFusionGlobally = HasFMAD;
   // If the addition is not contractable, do not combine.
   if (!AllowFusionGlobally && !N->getFlags().hasAllowContract())
     return SDValue();
diff --git a/llvm/test/CodeGen/AArch64/arm64-fma-combine-with-fpfusion.ll b/llvm/test/CodeGen/AArch64/arm64-fma-combine-with-fpfusion.ll
index 0ddcdccca4ec4..daa9d38db78e3 100644
--- a/llvm/test/CodeGen/AArch64/arm64-fma-combine-with-fpfusion.ll
+++ b/llvm/test/CodeGen/AArch64/arm64-fma-combine-with-fpfusion.ll
@@ -1,10 +1,10 @@
-; RUN: llc < %s -mtriple=aarch64-linux-gnu -fp-contract=fast | FileCheck %s
+; RUN: llc < %s -mtriple=aarch64-linux-gnu | FileCheck %s
 define float @mul_add(float %a, float %b, float %c) local_unnamed_addr #0 {
 ; CHECK-LABEL: %entry
 ; CHECK: fmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
   entry:
-    %mul = fmul float %a, %b
-    %add = fadd float %mul, %c
+    %mul = fmul contract float %a, %b
+    %add = fadd contract float %mul, %c
     ret float %add
 }
 
diff --git a/llvm/test/CodeGen/AArch64/fp-dp3.ll b/llvm/test/CodeGen/AArch64/fp-dp3.ll
index 10f88fdbbe962..e5736eeb5c275 100644
--- a/llvm/test/CodeGen/AArch64/fp-dp3.ll
+++ b/llvm/test/CodeGen/AArch64/fp-dp3.ll
@@ -1,137 +1,177 @@
-; RUN: llc -verify-machineinstrs -o - %s -mtriple=aarch64-none-linux-gnu -fp-contract=fast | FileCheck %s
-; RUN: llc -verify-machineinstrs -o - %s -mtriple=arm64-apple-ios7.0 | FileCheck %s -check-prefix=CHECK-NOFAST
+; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6
+; RUN: llc -mtriple=aarch64-none-linux < %s | FileCheck %s
 
 declare float @llvm.fma.f32(float, float, float)
 declare double @llvm.fma.f64(double, double, double)
 
 define float @test_fmadd(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fmadd:
-; CHECK-NOFAST-LABEL: test_fmadd:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmadd s0, s0, s1, s2
+; CHECK-NEXT:    ret
   %val = call float @llvm.fma.f32(float %a, float %b, float %c)
-; CHECK: fmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
   ret float %val
 }
 
 define float @test_fmsub(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fmsub:
-; CHECK-NOFAST-LABEL: test_fmsub:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmsub s0, s0, s1, s2
+; CHECK-NEXT:    ret
   %nega = fsub float -0.0, %a
   %val = call float @llvm.fma.f32(float %nega, float %b, float %c)
-; CHECK: fmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
   ret float %val
 }
 
 define float @test_fnmadd(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fnmadd:
-; CHECK-NOFAST-LABEL: test_fnmadd:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fnmadd s0, s0, s1, s2
+; CHECK-NEXT:    ret
   %nega = fsub float -0.0, %a
   %negc = fsub float -0.0, %c
   %val = call float @llvm.fma.f32(float %nega, float %b, float %negc)
-; CHECK: fnmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fnmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
   ret float %val
 }
 
 define float @test_fnmsub(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fnmsub:
-; CHECK-NOFAST-LABEL: test_fnmsub:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fnmsub s0, s0, s1, s2
+; CHECK-NEXT:    ret
   %negc = fsub float -0.0, %c
   %val = call float @llvm.fma.f32(float %a, float %b, float %negc)
-; CHECK: fnmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fnmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
   ret float %val
 }
 
 define double @testd_fmadd(double %a, double %b, double %c) {
 ; CHECK-LABEL: testd_fmadd:
-; CHECK-NOFAST-LABEL: testd_fmadd:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmadd d0, d0, d1, d2
+; CHECK-NEXT:    ret
   %val = call double @llvm.fma.f64(double %a, double %b, double %c)
-; CHECK: fmadd {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
-; CHECK-NOFAST: fmadd {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
   ret double %val
 }
 
 define double @testd_fmsub(double %a, double %b, double %c) {
 ; CHECK-LABEL: testd_fmsub:
-; CHECK-NOFAST-LABEL: testd_fmsub:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmsub d0, d0, d1, d2
+; CHECK-NEXT:    ret
   %nega = fsub double -0.0, %a
   %val = call double @llvm.fma.f64(double %nega, double %b, double %c)
-; CHECK: fmsub {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
-; CHECK-NOFAST: fmsub {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
   ret double %val
 }
 
 define double @testd_fnmadd(double %a, double %b, double %c) {
 ; CHECK-LABEL: testd_fnmadd:
-; CHECK-NOFAST-LABEL: testd_fnmadd:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fnmadd d0, d0, d1, d2
+; CHECK-NEXT:    ret
   %nega = fsub double -0.0, %a
   %negc = fsub double -0.0, %c
   %val = call double @llvm.fma.f64(double %nega, double %b, double %negc)
-; CHECK: fnmadd {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
-; CHECK-NOFAST: fnmadd {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
   ret double %val
 }
 
 define double @testd_fnmsub(double %a, double %b, double %c) {
 ; CHECK-LABEL: testd_fnmsub:
-; CHECK-NOFAST-LABEL: testd_fnmsub:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fnmsub d0, d0, d1, d2
+; CHECK-NEXT:    ret
   %negc = fsub double -0.0, %c
   %val = call double @llvm.fma.f64(double %a, double %b, double %negc)
-; CHECK: fnmsub {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
-; CHECK-NOFAST: fnmsub {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}, {{d[0-9]+}}
   ret double %val
 }
 
 define float @test_fmadd_unfused(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fmadd_unfused:
-; CHECK-NOFAST-LABEL: test_fmadd_unfused:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmul s1, s1, s2
+; CHECK-NEXT:    fadd s0, s0, s1
+; CHECK-NEXT:    ret
   %prod = fmul float %b, %c
   %sum = fadd float %a, %prod
-; CHECK: fmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST-NOT: fmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fmul {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
   ret float %sum
 }
 
 define float @test_fmsub_unfused(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fmsub_unfused:
-; CHECK-NOFAST-LABEL: test_fmsub_unfused:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmul s1, s1, s2
+; CHECK-NEXT:    fsub s0, s0, s1
+; CHECK-NEXT:    ret
   %prod = fmul float %b, %c
   %diff = fsub float %a, %prod
-; CHECK: fmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST-NOT: fmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fmul {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
   ret float %diff
 }
 
 define float @test_fnmadd_unfused(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fnmadd_unfused:
-; CHECK-NOFAST-LABEL: test_fnmadd_unfused:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fneg s0, s0
+; CHECK-NEXT:    fmul s1, s1, s2
+; CHECK-NEXT:    fsub s0, s0, s1
+; CHECK-NEXT:    ret
   %nega = fsub float -0.0, %a
   %prod = fmul float %b, %c
   %diff = fsub float %nega, %prod
-; CHECK: fnmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST-NOT: fnmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fmul {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: ret
   ret float %diff
 }
 
 define float @test_fnmsub_unfused(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fnmsub_unfused:
-; CHECK-NOFAST-LABEL: test_fnmsub_unfused:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmul s1, s1, s2
+; CHECK-NEXT:    fsub s0, s1, s0
+; CHECK-NEXT:    ret
   %nega = fsub float -0.0, %a
   %prod = fmul float %b, %c
   %sum = fadd float %nega, %prod
-; CHECK: fnmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST-NOT: fnmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fmul {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK-NOFAST: fsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
+  ret float %sum
+}
+
+; With the contract flag the multiply and add/subtract fuse to a single op.
+
+define float @test_fmadd_contract(float %a, float %b, float %c) {
+; CHECK-LABEL: test_fmadd_contract:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmadd s0, s1, s2, s0
+; CHECK-NEXT:    ret
+  %prod = fmul contract float %b, %c
+  %sum = fadd contract float %a, %prod
+  ret float %sum
+}
+
+define float @test_fmsub_contract(float %a, float %b, float %c) {
+; CHECK-LABEL: test_fmsub_contract:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmsub s0, s1, s2, s0
+; CHECK-NEXT:    ret
+  %prod = fmul contract float %b, %c
+  %diff = fsub contract float %a, %prod
+  ret float %diff
+}
+
+define float @test_fnmadd_contract(float %a, float %b, float %c) {
+; CHECK-LABEL: test_fnmadd_contract:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fnmadd s0, s1, s2, s0
+; CHECK-NEXT:    ret
+  %nega = fsub float -0.0, %a
+  %prod = fmul contract float %b, %c
+  %diff = fsub contract float %nega, %prod
+  ret float %diff
+}
+
+define float @test_fnmsub_contract(float %a, float %b, float %c) {
+; CHECK-LABEL: test_fnmsub_contract:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fnmsub s0, s1, s2, s0
+; CHECK-NEXT:    ret
+  %nega = fsub float -0.0, %a
+  %prod = fmul contract float %b, %c
+  %sum = fadd contract float %nega, %prod
   ret float %sum
 }
 
@@ -139,25 +179,27 @@ define float @test_fnmsub_unfused(float %a, float %b, float %c) {
 
 define float @test_fmadd_unfused_su(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fmadd_unfused_su:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmul s1, s1, s2
+; CHECK-NEXT:    fadd s0, s0, s1
+; CHECK-NEXT:    fadd s0, s0, s1
+; CHECK-NEXT:    ret
   %prod = fmul float %b, %c
   %sum = fadd float %a, %prod
   %res = fadd float %sum, %prod
-; CHECK-NOT: fmadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK: fmul {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK: fadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK: fadd {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
   ret float %res
 }
 
 define float @test_fmsub_unfused_su(float %a, float %b, float %c) {
 ; CHECK-LABEL: test_fmsub_unfused_su:
+; CHECK:       // %bb.0:
+; CHECK-NEXT:    fmul s1, s1, s2
+; CHECK-NEXT:    fsub s0, s0, s1
+; CHECK-NEXT:    fsub s0, s0, s1
+; CHECK-NEXT:    ret
   %prod = fmul float %b, %c
   %diff = fsub float %a, %prod
   %res = fsub float %diff, %prod
-; CHECK-NOT: fmsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK: fmul {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK: fsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
-; CHECK: fsub {{s[0-9]+}}, {{s[0-9]+}}, {{s[0-9]+}}
   ret float %res
 }
 
diff --git a/llvm/test/CodeGen/AArch64/neon-fma.ll b/llvm/test/CodeGen/AArch64/neon-fma.ll
index af70302ca939c..25aeb6be65939 100644
--- a/llvm/test/CodeGen/AArch64/neon-fma.ll
+++ b/llvm/test/CodeGen/AArch64/neon-fma.ll
@@ -1,45 +1,45 @@
-; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon -fp-contract=fast | FileCheck %s
+; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
 
 define <2 x float> @fmla2xfloat(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
 ;CHECK: fmla {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
-	%tmp1 = fmul <2 x float> %A, %B;
-	%tmp2 = fadd <2 x float> %C, %tmp1;
+	%tmp1 = fmul contract <2 x float> %A, %B;
+	%tmp2 = fadd contract <2 x float> %C, %tmp1;
 	ret <2 x float> %tmp2
 }
 
 define <4 x float> @fmla4xfloat(<4 x float> %A, <4 x float> %B, <4 x float> %C) {
 ;CHECK: fmla {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
-	%tmp1 = fmul <4 x float> %A, %B;
-	%tmp2 = fadd <4 x float> %C, %tmp1;
+	%tmp1 = fmul contract <4 x float> %A, %B;
+	%tmp2 = fadd contract <4 x float> %C, %tmp1;
 	ret <4 x float> %tmp2
 }
 
 define <2 x double> @fmla2xdouble(<2 x double> %A, <2 x double> %B, <2 x double> %C) {
 ;CHECK: fmla {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
-	%tmp1 = fmul <2 x double> %A, %B;
-	%tmp2 = fadd <2 x double> %C, %tmp1;
+	%tmp1 = fmul contract <2 x double> %A, %B;
+	%tmp2 = fadd contract <2 x double> %C, %tmp1;
 	ret <2 x double> %tmp2
 }
 
 
 define <2 x float> @fmls2xfloat(<2 x float> %A, <2 x float> %B, <2 x float> %C) {
 ;CHECK: fmls {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
-	%tmp1 = fmul <2 x float> %A, %B;
-	%tmp2 = fsub <2 x float> %C, %tmp1;
+	%tmp1 = fmul contract <2 x float> %A, %B;
+	%tmp2 = fsub contract <2 x float> %C, %tmp1;
 	ret <2 x float> %tmp2
 }
 
 define <4 x float> @fmls4xfloat(<4 x float> %A, <4 x float> %B, <4 x float> %C) {
 ;CHECK: fmls {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
-	%tmp1 = fmul <4 x float> %A, %B;
-	%tmp2 = fsub <4 x float> %C, %tmp1;
+	%tmp1 = fmul contract <4 x float> %A, %B;
+	%tmp2 = fsub contract <4 x float> %C, %tmp1;
 	ret <4 x float> %tmp2
 }
 
 define <2 x double> @fmls2xdouble(<2 x double> %A, <2 x double> %B, <2 x double> %C) {
 ;CHECK: fmls {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
-	%tmp1 = fmul <2 x double> %A, %B;
-	%tmp2 = fsub <2 x double> %C, %tmp1;
+	%tmp1 = fmul contract <2 x double> %A, %B;
+	%tmp2 = fsub contract <2 x double> %C, %tmp1;
 	ret <2 x double> %tmp2
 }
 
diff --git a/llvm/test/CodeGen/AMDGPU/madak.ll b/llvm/test/CodeGen/AMDGPU/madak.ll
index 211b93e9ace29..4e640573c0193 100644
--- a/llvm/test/CodeGen/AMDGPU/madak.ll
+++ b/llvm/test/CodeGen/AMDGPU/madak.ll
@@ -2,13 +2,10 @@
 ; RUN: llc -mtriple=amdgpu6.00 < %s | FileCheck -check-prefixes=GFX6 %s
 ; RUN: llc -mtriple=amdgpu8.02 < %s | FileCheck -check-prefixes=GFX8 %s
 ; RUN: llc -mtriple=amdgpu9.00 < %s | FileCheck -check-prefixes=GFX9 %s
+; RUN: llc -mtriple=amdgpu9.42 < %s | FileCheck -check-prefixes=GFX942 %s
 ; RUN: llc -mtriple=amdgpu10.10 < %s | FileCheck -check-prefixes=GFX10-MAD %s
 ; RUN: llc -mtriple=amdgpu11.00 < %s | FileCheck -check-prefixes=GFX11-MAD %s
 
-; RUN: llc -mtriple=amdgpu9.42 -fp-contract=fast < %s | FileCheck -check-prefixes=GFX942-FMA %s
-; RUN: llc -mtriple=amdgpu10.10 -fp-contract=fast < %s | FileCheck -check-prefixes=GFX10-FMA %s
-; RUN: llc -mtriple=amdgpu11.00 -fp-contract=fast < %s | FileCheck -check-prefixes=GFX11-FMA %s
-
 declare i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
 declare float @llvm.fabs.f32(float) nounwind readnone
 
@@ -67,6 +64,21 @@ define amdgpu_kernel void @madak_f32(ptr addrspace(1) noalias %out, ptr addrspac
 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: madak_f32:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX942-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    v_mul_f32_e32 v1, v1, v2
+; GFX942-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: madak_f32:
 ; GFX10-MAD:       ; %bb.0:
 ; GFX10-MAD-NEXT:    s_clause 0x1
@@ -100,52 +112,6 @@ define amdgpu_kernel void @madak_f32(ptr addrspace(1) noalias %out, ptr addrspac
 ; GFX11-MAD-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
 ; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[0:1]
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: madak_f32:
-; GFX942-FMA:       ; %bb.0:
-; GFX942-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-FMA-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX942-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX942-FMA-NEXT:    global_load_dword v2, v0, s[6:7]
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    v_fmaak_f32 v1, v1, v2, 0x41200000
-; GFX942-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: madak_f32:
-; GFX10-FMA:       ; %bb.0:
-; GFX10-FMA-NEXT:    s_clause 0x1
-; GFX10-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX10-FMA-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX10-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    s_clause 0x1
-; GFX10-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX10-FMA-NEXT:    global_load_dword v2, v0, s[6:7]
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    v_fmaak_f32 v1, v1, v2, 0x41200000
-; GFX10-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: madak_f32:
-; GFX11-FMA:       ; %bb.0:
-; GFX11-FMA-NEXT:    s_clause 0x1
-; GFX11-FMA-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
-; GFX11-FMA-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
-; GFX11-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    s_clause 0x1
-; GFX11-FMA-NEXT:    global_load_b32 v1, v0, s[2:3]
-; GFX11-FMA-NEXT:    global_load_b32 v2, v0, s[4:5]
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    v_fmaak_f32 v1, v1, v2, 0x41200000
-; GFX11-FMA-NEXT:    global_store_b32 v0, v1, s[0:1]
-; GFX11-FMA-NEXT:    s_endpgm
   %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
   %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid
   %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid
@@ -239,6 +205,28 @@ define amdgpu_kernel void @madak_2_use_f32(ptr addrspace(1) noalias %out, ptr ad
 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: madak_2_use_f32:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[2:3] sc0 sc1
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 sc0 sc1
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 sc0 sc1
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    v_mul_f32_e32 v2, v1, v2
+; GFX942-NEXT:    v_mul_f32_e32 v1, v1, v3
+; GFX942-NEXT:    v_add_f32_e32 v2, 0x41200000, v2
+; GFX942-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
+; GFX942-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    global_store_dword v0, v1, s[2:3] offset:4 sc0 sc1
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: madak_2_use_f32:
 ; GFX10-MAD:       ; %bb.0:
 ; GFX10-MAD-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
@@ -280,67 +268,6 @@ define amdgpu_kernel void @madak_2_use_f32(ptr addrspace(1) noalias %out, ptr ad
 ; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[2:3] offset:4 dlc
 ; GFX11-MAD-NEXT:    s_waitcnt_vscnt null, 0x0
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: madak_2_use_f32:
-; GFX942-FMA:       ; %bb.0:
-; GFX942-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX942-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX942-FMA-NEXT:    v_mov_b32_e32 v4, 0x41200000
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v1, v0, s[2:3] sc0 sc1
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 sc0 sc1
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 sc0 sc1
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    v_fmaak_f32 v2, v1, v2, 0x41200000
-; GFX942-FMA-NEXT:    v_fmac_f32_e32 v4, v1, v3
-; GFX942-FMA-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    global_store_dword v0, v4, s[2:3] offset:4 sc0 sc1
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: madak_2_use_f32:
-; GFX10-FMA:       ; %bb.0:
-; GFX10-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX10-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    global_load_dword v1, v0, s[2:3] glc dlc
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    global_load_dword v2, v0, s[2:3] offset:4 glc dlc
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    global_load_dword v3, v0, s[2:3] offset:8 glc dlc
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    v_fmaak_f32 v2, v1, v2, 0x41200000
-; GFX10-FMA-NEXT:    v_fmaak_f32 v1, v1, v3, 0x41200000
-; GFX10-FMA-NEXT:    global_store_dword v0, v2, s[0:1]
-; GFX10-FMA-NEXT:    s_waitcnt_vscnt null, 0x0
-; GFX10-FMA-NEXT:    global_store_dword v0, v1, s[2:3] offset:4
-; GFX10-FMA-NEXT:    s_waitcnt_vscnt null, 0x0
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: madak_2_use_f32:
-; GFX11-FMA:       ; %bb.0:
-; GFX11-FMA-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
-; GFX11-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    global_load_b32 v1, v0, s[2:3] glc dlc
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    global_load_b32 v2, v0, s[2:3] offset:4 glc dlc
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    global_load_b32 v3, v0, s[2:3] offset:8 glc dlc
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    v_fmaak_f32 v2, v1, v2, 0x41200000
-; GFX11-FMA-NEXT:    v_fmaak_f32 v1, v1, v3, 0x41200000
-; GFX11-FMA-NEXT:    global_store_b32 v0, v2, s[0:1] dlc
-; GFX11-FMA-NEXT:    s_waitcnt_vscnt null, 0x0
-; GFX11-FMA-NEXT:    global_store_b32 v0, v1, s[2:3] offset:4 dlc
-; GFX11-FMA-NEXT:    s_waitcnt_vscnt null, 0x0
-; GFX11-FMA-NEXT:    s_endpgm
   %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
 
   %in.gep.0 = getelementptr float, ptr addrspace(1) %in, i32 %tid
@@ -409,6 +336,19 @@ define amdgpu_kernel void @madak_m_inline_imm_f32(ptr addrspace(1) noalias %out,
 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: madak_m_inline_imm_f32:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    v_mul_f32_e32 v1, 4.0, v1
+; GFX942-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: madak_m_inline_imm_f32:
 ; GFX10-MAD:       ; %bb.0:
 ; GFX10-MAD-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
@@ -433,42 +373,6 @@ define amdgpu_kernel void @madak_m_inline_imm_f32(ptr addrspace(1) noalias %out,
 ; GFX11-MAD-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
 ; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[0:1]
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: madak_m_inline_imm_f32:
-; GFX942-FMA:       ; %bb.0:
-; GFX942-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX942-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    v_fmaak_f32 v1, 4.0, v1, 0x41200000
-; GFX942-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: madak_m_inline_imm_f32:
-; GFX10-FMA:       ; %bb.0:
-; GFX10-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX10-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    v_fmaak_f32 v1, 4.0, v1, 0x41200000
-; GFX10-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: madak_m_inline_imm_f32:
-; GFX11-FMA:       ; %bb.0:
-; GFX11-FMA-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
-; GFX11-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    global_load_b32 v1, v0, s[2:3]
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    v_fmaak_f32 v1, 4.0, v1, 0x41200000
-; GFX11-FMA-NEXT:    global_store_b32 v0, v1, s[0:1]
-; GFX11-FMA-NEXT:    s_endpgm
   %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
   %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid
   %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid
@@ -538,6 +442,21 @@ define amdgpu_kernel void @madak_inline_imm_f32(ptr addrspace(1) noalias %out, p
 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: madak_inline_imm_f32:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX942-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    v_mul_f32_e32 v1, v1, v2
+; GFX942-NEXT:    v_add_f32_e32 v1, 4.0, v1
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: madak_inline_imm_f32:
 ; GFX10-MAD:       ; %bb.0:
 ; GFX10-MAD-NEXT:    s_clause 0x1
@@ -571,52 +490,6 @@ define amdgpu_kernel void @madak_inline_imm_f32(ptr addrspace(1) noalias %out, p
 ; GFX11-MAD-NEXT:    v_add_f32_e32 v1, 4.0, v1
 ; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[0:1]
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: madak_inline_imm_f32:
-; GFX942-FMA:       ; %bb.0:
-; GFX942-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-FMA-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX942-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX942-FMA-NEXT:    global_load_dword v2, v0, s[6:7]
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    v_fma_f32 v1, v1, v2, 4.0
-; GFX942-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: madak_inline_imm_f32:
-; GFX10-FMA:       ; %bb.0:
-; GFX10-FMA-NEXT:    s_clause 0x1
-; GFX10-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX10-FMA-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX10-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    s_clause 0x1
-; GFX10-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX10-FMA-NEXT:    global_load_dword v2, v0, s[6:7]
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    v_fma_f32 v1, v1, v2, 4.0
-; GFX10-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: madak_inline_imm_f32:
-; GFX11-FMA:       ; %bb.0:
-; GFX11-FMA-NEXT:    s_clause 0x1
-; GFX11-FMA-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
-; GFX11-FMA-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
-; GFX11-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    s_clause 0x1
-; GFX11-FMA-NEXT:    global_load_b32 v1, v0, s[2:3]
-; GFX11-FMA-NEXT:    global_load_b32 v2, v0, s[4:5]
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    v_fma_f32 v1, v1, v2, 4.0
-; GFX11-FMA-NEXT:    global_store_b32 v0, v1, s[0:1]
-; GFX11-FMA-NEXT:    s_endpgm
   %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
   %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid
   %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid
@@ -683,6 +556,20 @@ define amdgpu_kernel void @s_v_madak_f32(ptr addrspace(1) noalias %out, ptr addr
 ; GFX9-NEXT:    global_store_dword v0, v2, s[0:1]
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: s_v_madak_f32:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    s_load_dword s6, s[4:5], 0x34
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    v_mul_f32_e32 v1, s6, v1
+; GFX942-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: s_v_madak_f32:
 ; GFX10-MAD:       ; %bb.0:
 ; GFX10-MAD-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
@@ -709,46 +596,6 @@ define amdgpu_kernel void @s_v_madak_f32(ptr addrspace(1) noalias %out, ptr addr
 ; GFX11-MAD-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
 ; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[0:1]
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: s_v_madak_f32:
-; GFX942-FMA:       ; %bb.0:
-; GFX942-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-FMA-NEXT:    s_load_dword s6, s[4:5], 0x34
-; GFX942-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX942-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX942-FMA-NEXT:    v_mov_b32_e32 v2, 0x41200000
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    v_fmac_f32_e32 v2, s6, v1
-; GFX942-FMA-NEXT:    global_store_dword v0, v2, s[0:1]
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: s_v_madak_f32:
-; GFX10-FMA:       ; %bb.0:
-; GFX10-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX10-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX10-FMA-NEXT:    s_load_dword s4, s[4:5], 0x34
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    v_fmaak_f32 v1, s4, v1, 0x41200000
-; GFX10-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: s_v_madak_f32:
-; GFX11-FMA:       ; %bb.0:
-; GFX11-FMA-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
-; GFX11-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX11-FMA-NEXT:    s_load_b32 s4, s[4:5], 0x34
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    global_load_b32 v1, v0, s[2:3]
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    v_fmaak_f32 v1, s4, v1, 0x41200000
-; GFX11-FMA-NEXT:    global_store_b32 v0, v1, s[0:1]
-; GFX11-FMA-NEXT:    s_endpgm
   %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
   %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid
   %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid
@@ -814,6 +661,21 @@ define amdgpu_kernel void @v_s_madak_f32(ptr addrspace(1) noalias %out, float %a
 ; GFX9-NEXT:    global_store_dword v0, v2, s[0:1]
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: v_s_madak_f32:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x34
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[0:1]
+; GFX942-NEXT:    s_load_dword s2, s[4:5], 0x2c
+; GFX942-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
+; GFX942-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
+; GFX942-NEXT:    v_mul_f32_e32 v1, s2, v1
+; GFX942-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: v_s_madak_f32:
 ; GFX10-MAD:       ; %bb.0:
 ; GFX10-MAD-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x34
@@ -846,52 +708,6 @@ define amdgpu_kernel void @v_s_madak_f32(ptr addrspace(1) noalias %out, float %a
 ; GFX11-MAD-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
 ; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[0:1]
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: v_s_madak_f32:
-; GFX942-FMA:       ; %bb.0:
-; GFX942-FMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x34
-; GFX942-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX942-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX942-FMA-NEXT:    v_mov_b32_e32 v2, 0x41200000
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v1, v0, s[0:1]
-; GFX942-FMA-NEXT:    s_load_dword s2, s[4:5], 0x2c
-; GFX942-FMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
-; GFX942-FMA-NEXT:    v_fmac_f32_e32 v2, s2, v1
-; GFX942-FMA-NEXT:    global_store_dword v0, v2, s[0:1]
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: v_s_madak_f32:
-; GFX10-FMA:       ; %bb.0:
-; GFX10-FMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x34
-; GFX10-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    global_load_dword v1, v0, s[0:1]
-; GFX10-FMA-NEXT:    s_clause 0x1
-; GFX10-FMA-NEXT:    s_load_dword s2, s[4:5], 0x2c
-; GFX10-FMA-NEXT:    s_waitcnt_depctr depctr_vm_vsrc(0)
-; GFX10-FMA-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
-; GFX10-FMA-NEXT:    v_fmaak_f32 v1, s2, v1, 0x41200000
-; GFX10-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: v_s_madak_f32:
-; GFX11-FMA:       ; %bb.0:
-; GFX11-FMA-NEXT:    s_load_b64 s[0:1], s[4:5], 0x34
-; GFX11-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    global_load_b32 v1, v0, s[0:1]
-; GFX11-FMA-NEXT:    s_clause 0x1
-; GFX11-FMA-NEXT:    s_load_b32 s2, s[4:5], 0x2c
-; GFX11-FMA-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0) lgkmcnt(0)
-; GFX11-FMA-NEXT:    v_fmaak_f32 v1, s2, v1, 0x41200000
-; GFX11-FMA-NEXT:    global_store_b32 v0, v1, s[0:1]
-; GFX11-FMA-NEXT:    s_endpgm
   %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
   %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid
   %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid
@@ -942,6 +758,17 @@ define amdgpu_kernel void @s_s_madak_f32(ptr addrspace(1) %out, float %a, float
 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: s_s_madak_f32:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    v_mov_b32_e32 v0, 0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    v_mov_b32_e32 v1, s3
+; GFX942-NEXT:    v_mul_f32_e32 v1, s2, v1
+; GFX942-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: s_s_madak_f32:
 ; GFX10-MAD:       ; %bb.0:
 ; GFX10-MAD-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
@@ -961,37 +788,6 @@ define amdgpu_kernel void @s_s_madak_f32(ptr addrspace(1) %out, float %a, float
 ; GFX11-MAD-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_add_f32 v0, 0x41200000, v0
 ; GFX11-MAD-NEXT:    global_store_b32 v1, v0, s[0:1]
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: s_s_madak_f32:
-; GFX942-FMA:       ; %bb.0:
-; GFX942-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-FMA-NEXT:    v_mov_b32_e32 v1, 0x41200000
-; GFX942-FMA-NEXT:    v_mov_b32_e32 v0, 0
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    v_mov_b32_e32 v2, s3
-; GFX942-FMA-NEXT:    v_fmac_f32_e32 v1, s2, v2
-; GFX942-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: s_s_madak_f32:
-; GFX10-FMA:       ; %bb.0:
-; GFX10-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX10-FMA-NEXT:    v_mov_b32_e32 v1, 0
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    v_mov_b32_e32 v0, s3
-; GFX10-FMA-NEXT:    v_fmaak_f32 v0, s2, v0, 0x41200000
-; GFX10-FMA-NEXT:    global_store_dword v1, v0, s[0:1]
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: s_s_madak_f32:
-; GFX11-FMA:       ; %bb.0:
-; GFX11-FMA-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s3
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_fmaak_f32 v0, s2, v0, 0x41200000
-; GFX11-FMA-NEXT:    global_store_b32 v1, v0, s[0:1]
-; GFX11-FMA-NEXT:    s_endpgm
   %mul = fmul float %a, %b
   %madak = fadd float %mul, 10.0
   store float %madak, ptr addrspace(1) %out, align 4
@@ -1056,6 +852,21 @@ define amdgpu_kernel void @no_madak_src0_modifier_f32(ptr addrspace(1) noalias %
 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: no_madak_src0_modifier_f32:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX942-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    v_mul_f32_e64 v1, |v1|, v2
+; GFX942-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: no_madak_src0_modifier_f32:
 ; GFX10-MAD:       ; %bb.0:
 ; GFX10-MAD-NEXT:    s_clause 0x1
@@ -1089,53 +900,6 @@ define amdgpu_kernel void @no_madak_src0_modifier_f32(ptr addrspace(1) noalias %
 ; GFX11-MAD-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
 ; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[0:1]
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: no_madak_src0_modifier_f32:
-; GFX942-FMA:       ; %bb.0:
-; GFX942-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-FMA-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX942-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX942-FMA-NEXT:    global_load_dword v2, v0, s[6:7]
-; GFX942-FMA-NEXT:    s_mov_b32 s2, 0x41200000
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    v_fma_f32 v1, |v1|, v2, s2
-; GFX942-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: no_madak_src0_modifier_f32:
-; GFX10-FMA:       ; %bb.0:
-; GFX10-FMA-NEXT:    s_clause 0x1
-; GFX10-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX10-FMA-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX10-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    s_clause 0x1
-; GFX10-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX10-FMA-NEXT:    global_load_dword v2, v0, s[6:7]
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    v_fma_f32 v1, |v1|, v2, 0x41200000
-; GFX10-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: no_madak_src0_modifier_f32:
-; GFX11-FMA:       ; %bb.0:
-; GFX11-FMA-NEXT:    s_clause 0x1
-; GFX11-FMA-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
-; GFX11-FMA-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
-; GFX11-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    s_clause 0x1
-; GFX11-FMA-NEXT:    global_load_b32 v1, v0, s[2:3]
-; GFX11-FMA-NEXT:    global_load_b32 v2, v0, s[4:5]
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    v_fma_f32 v1, |v1|, v2, 0x41200000
-; GFX11-FMA-NEXT:    global_store_b32 v0, v1, s[0:1]
-; GFX11-FMA-NEXT:    s_endpgm
   %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
   %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid
   %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid
@@ -1210,6 +974,21 @@ define amdgpu_kernel void @no_madak_src1_modifier_f32(ptr addrspace(1) noalias %
 ; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: no_madak_src1_modifier_f32:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX942-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    v_mul_f32_e64 v1, v1, |v2|
+; GFX942-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: no_madak_src1_modifier_f32:
 ; GFX10-MAD:       ; %bb.0:
 ; GFX10-MAD-NEXT:    s_clause 0x1
@@ -1243,53 +1022,6 @@ define amdgpu_kernel void @no_madak_src1_modifier_f32(ptr addrspace(1) noalias %
 ; GFX11-MAD-NEXT:    v_add_f32_e32 v1, 0x41200000, v1
 ; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[0:1]
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: no_madak_src1_modifier_f32:
-; GFX942-FMA:       ; %bb.0:
-; GFX942-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX942-FMA-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX942-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX942-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX942-FMA-NEXT:    global_load_dword v2, v0, s[6:7]
-; GFX942-FMA-NEXT:    s_mov_b32 s2, 0x41200000
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    v_fma_f32 v1, v1, |v2|, s2
-; GFX942-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: no_madak_src1_modifier_f32:
-; GFX10-FMA:       ; %bb.0:
-; GFX10-FMA-NEXT:    s_clause 0x1
-; GFX10-FMA-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
-; GFX10-FMA-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
-; GFX10-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    s_clause 0x1
-; GFX10-FMA-NEXT:    global_load_dword v1, v0, s[2:3]
-; GFX10-FMA-NEXT:    global_load_dword v2, v0, s[6:7]
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    v_fma_f32 v1, v1, |v2|, 0x41200000
-; GFX10-FMA-NEXT:    global_store_dword v0, v1, s[0:1]
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: no_madak_src1_modifier_f32:
-; GFX11-FMA:       ; %bb.0:
-; GFX11-FMA-NEXT:    s_clause 0x1
-; GFX11-FMA-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
-; GFX11-FMA-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
-; GFX11-FMA-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    s_clause 0x1
-; GFX11-FMA-NEXT:    global_load_b32 v1, v0, s[2:3]
-; GFX11-FMA-NEXT:    global_load_b32 v2, v0, s[4:5]
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    v_fma_f32 v1, v1, |v2|, 0x41200000
-; GFX11-FMA-NEXT:    global_store_b32 v0, v1, s[0:1]
-; GFX11-FMA-NEXT:    s_endpgm
   %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
   %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid
   %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid
@@ -1381,6 +1113,28 @@ define amdgpu_kernel void @madak_constant_bus_violation(i32 %arg1, [8 x i32], fl
 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
 ; GFX9-NEXT:    s_endpgm
 ;
+; GFX942-LABEL: madak_constant_bus_violation:
+; GFX942:       ; %bb.0: ; %bb
+; GFX942-NEXT:    s_load_dword s0, s[4:5], 0x24
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    s_cmp_lg_u32 s0, 0
+; GFX942-NEXT:    s_cbranch_scc1 .LBB9_2
+; GFX942-NEXT:  ; %bb.1: ; %bb3
+; GFX942-NEXT:    v_mov_b32_e32 v0, 0
+; GFX942-NEXT:    global_store_dword v[0:1], v0, off sc0 sc1
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:  .LBB9_2: ; %bb4
+; GFX942-NEXT:    global_load_dword v0, v[0:1], off sc0 sc1
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    s_load_dword s0, s[4:5], 0x48
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    v_mul_f32_e64 v1, s0, 0.5
+; GFX942-NEXT:    v_add_f32_e32 v1, 0x42280000, v1
+; GFX942-NEXT:    v_mul_f32_e32 v0, v1, v0
+; GFX942-NEXT:    global_store_dword v[0:1], v0, off sc0 sc1
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    s_endpgm
+;
 ; GFX10-MAD-LABEL: madak_constant_bus_violation:
 ; GFX10-MAD:       ; %bb.0: ; %bb
 ; GFX10-MAD-NEXT:    s_load_dword s0, s[4:5], 0x24
@@ -1425,73 +1179,6 @@ define amdgpu_kernel void @madak_constant_bus_violation(i32 %arg1, [8 x i32], fl
 ; GFX11-MAD-NEXT:    global_store_b32 v[0:1], v0, off dlc
 ; GFX11-MAD-NEXT:    s_waitcnt_vscnt null, 0x0
 ; GFX11-MAD-NEXT:    s_endpgm
-;
-; GFX942-FMA-LABEL: madak_constant_bus_violation:
-; GFX942-FMA:       ; %bb.0: ; %bb
-; GFX942-FMA-NEXT:    s_load_dword s0, s[4:5], 0x24
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    s_cmp_lg_u32 s0, 0
-; GFX942-FMA-NEXT:    s_cbranch_scc1 .LBB9_2
-; GFX942-FMA-NEXT:  ; %bb.1: ; %bb3
-; GFX942-FMA-NEXT:    v_mov_b32_e32 v0, 0
-; GFX942-FMA-NEXT:    global_store_dword v[0:1], v0, off sc0 sc1
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:  .LBB9_2: ; %bb4
-; GFX942-FMA-NEXT:    global_load_dword v0, v[0:1], off sc0 sc1
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    s_load_dword s0, s[4:5], 0x48
-; GFX942-FMA-NEXT:    v_mov_b32_e32 v1, 0x42280000
-; GFX942-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX942-FMA-NEXT:    v_fmac_f32_e64 v1, s0, 0.5
-; GFX942-FMA-NEXT:    v_mul_f32_e32 v0, v1, v0
-; GFX942-FMA-NEXT:    global_store_dword v[0:1], v0, off sc0 sc1
-; GFX942-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX942-FMA-NEXT:    s_endpgm
-;
-; GFX10-FMA-LABEL: madak_constant_bus_violation:
-; GFX10-FMA:       ; %bb.0: ; %bb
-; GFX10-FMA-NEXT:    s_load_dword s0, s[4:5], 0x24
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    s_cmp_lg_u32 s0, 0
-; GFX10-FMA-NEXT:    s_cbranch_scc1 .LBB9_2
-; GFX10-FMA-NEXT:  ; %bb.1: ; %bb3
-; GFX10-FMA-NEXT:    v_mov_b32_e32 v0, 0
-; GFX10-FMA-NEXT:    global_store_dword v[0:1], v0, off
-; GFX10-FMA-NEXT:    s_waitcnt_vscnt null, 0x0
-; GFX10-FMA-NEXT:  .LBB9_2: ; %bb4
-; GFX10-FMA-NEXT:    global_load_dword v0, v[0:1], off glc dlc
-; GFX10-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX10-FMA-NEXT:    s_load_dword s0, s[4:5], 0x48
-; GFX10-FMA-NEXT:    v_mov_b32_e32 v1, 0.5
-; GFX10-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX10-FMA-NEXT:    v_fmaak_f32 v1, s0, v1, 0x42280000
-; GFX10-FMA-NEXT:    v_mul_f32_e32 v0, v1, v0
-; GFX10-FMA-NEXT:    global_store_dword v[0:1], v0, off
-; GFX10-FMA-NEXT:    s_waitcnt_vscnt null, 0x0
-; GFX10-FMA-NEXT:    s_endpgm
-;
-; GFX11-FMA-LABEL: madak_constant_bus_violation:
-; GFX11-FMA:       ; %bb.0: ; %bb
-; GFX11-FMA-NEXT:    s_load_b32 s0, s[4:5], 0x24
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    s_cmp_lg_u32 s0, 0
-; GFX11-FMA-NEXT:    s_cbranch_scc1 .LBB9_2
-; GFX11-FMA-NEXT:  ; %bb.1: ; %bb3
-; GFX11-FMA-NEXT:    v_mov_b32_e32 v0, 0
-; GFX11-FMA-NEXT:    global_store_b32 v[0:1], v0, off dlc
-; GFX11-FMA-NEXT:    s_waitcnt_vscnt null, 0x0
-; GFX11-FMA-NEXT:  .LBB9_2: ; %bb4
-; GFX11-FMA-NEXT:    global_load_b32 v0, v[0:1], off glc dlc
-; GFX11-FMA-NEXT:    s_waitcnt vmcnt(0)
-; GFX11-FMA-NEXT:    s_load_b32 s0, s[4:5], 0x48
-; GFX11-FMA-NEXT:    v_mov_b32_e32 v1, 0.5
-; GFX11-FMA-NEXT:    s_waitcnt lgkmcnt(0)
-; GFX11-FMA-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_1)
-; GFX11-FMA-NEXT:    v_fmaak_f32 v1, s0, v1, 0x42280000
-; GFX11-FMA-NEXT:    v_mul_f32_e32 v0, v1, v0
-; GFX11-FMA-NEXT:    global_store_b32 v[0:1], v0, off dlc
-; GFX11-FMA-NEXT:    s_waitcnt_vscnt null, 0x0
-; GFX11-FMA-NEXT:    s_endpgm
 bb:
   %tmp = icmp eq i32 %arg1, 0
   br i1 %tmp, label %bb3, label %bb4
@@ -1509,4 +1196,234 @@ bb4:
   ret void
 }
 
+; With the contract flag, the mul+add fuses to v_fmaak on FMA targets.
+define amdgpu_kernel void @madak_f32_contract(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in.a, ptr addrspace(1) noalias %in.b) #0 {
+; GFX6-LABEL: madak_f32_contract:
+; GFX6:       ; %bb.0:
+; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
+; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd
+; GFX6-NEXT:    s_mov_b32 s7, 0xf000
+; GFX6-NEXT:    s_mov_b32 s6, 0
+; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX6-NEXT:    s_mov_b64 s[4:5], s[2:3]
+; GFX6-NEXT:    v_mov_b32_e32 v1, 0
+; GFX6-NEXT:    s_mov_b64 s[10:11], s[6:7]
+; GFX6-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64
+; GFX6-NEXT:    buffer_load_dword v3, v[0:1], s[8:11], 0 addr64
+; GFX6-NEXT:    s_mov_b64 s[2:3], s[6:7]
+; GFX6-NEXT:    s_waitcnt vmcnt(0)
+; GFX6-NEXT:    v_madak_f32 v2, v2, v3, 0x41200000
+; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64
+; GFX6-NEXT:    s_endpgm
+;
+; GFX8-LABEL: madak_f32_contract:
+; GFX8:       ; %bb.0:
+; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34
+; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 2, v0
+; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX8-NEXT:    v_mov_b32_e32 v1, s3
+; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s2, v4
+; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
+; GFX8-NEXT:    v_mov_b32_e32 v3, s5
+; GFX8-NEXT:    v_add_u32_e32 v2, vcc, s4, v4
+; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
+; GFX8-NEXT:    flat_load_dword v5, v[0:1]
+; GFX8-NEXT:    flat_load_dword v2, v[2:3]
+; GFX8-NEXT:    v_mov_b32_e32 v1, s1
+; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s0, v4
+; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
+; GFX8-NEXT:    s_waitcnt vmcnt(0)
+; GFX8-NEXT:    v_madak_f32 v2, v5, v2, 0x41200000
+; GFX8-NEXT:    flat_store_dword v[0:1], v2
+; GFX8-NEXT:    s_endpgm
+;
+; GFX9-LABEL: madak_f32_contract:
+; GFX9:       ; %bb.0:
+; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX9-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX9-NEXT:    s_waitcnt vmcnt(0)
+; GFX9-NEXT:    v_madak_f32 v1, v1, v2, 0x41200000
+; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX9-NEXT:    s_endpgm
+;
+; GFX942-LABEL: madak_f32_contract:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX942-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    v_fmaak_f32 v1, v1, v2, 0x41200000
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
+; GFX10-MAD-LABEL: madak_f32_contract:
+; GFX10-MAD:       ; %bb.0:
+; GFX10-MAD-NEXT:    s_clause 0x1
+; GFX10-MAD-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX10-MAD-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX10-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX10-MAD-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX10-MAD-NEXT:    s_clause 0x1
+; GFX10-MAD-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX10-MAD-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX10-MAD-NEXT:    s_waitcnt vmcnt(0)
+; GFX10-MAD-NEXT:    v_fmaak_f32 v1, v1, v2, 0x41200000
+; GFX10-MAD-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX10-MAD-NEXT:    s_endpgm
+;
+; GFX11-MAD-LABEL: madak_f32_contract:
+; GFX11-MAD:       ; %bb.0:
+; GFX11-MAD-NEXT:    s_clause 0x1
+; GFX11-MAD-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
+; GFX11-MAD-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
+; GFX11-MAD-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX11-MAD-NEXT:    s_delay_alu instid0(VALU_DEP_1)
+; GFX11-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX11-MAD-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX11-MAD-NEXT:    s_clause 0x1
+; GFX11-MAD-NEXT:    global_load_b32 v1, v0, s[2:3]
+; GFX11-MAD-NEXT:    global_load_b32 v2, v0, s[4:5]
+; GFX11-MAD-NEXT:    s_waitcnt vmcnt(0)
+; GFX11-MAD-NEXT:    v_fmaak_f32 v1, v1, v2, 0x41200000
+; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[0:1]
+; GFX11-MAD-NEXT:    s_endpgm
+  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
+  %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid
+  %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid
+  %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid
+
+  %a = load float, ptr addrspace(1) %in.a.gep, align 4
+  %b = load float, ptr addrspace(1) %in.b.gep, align 4
+
+  %mul = fmul contract float %a, %b
+  %madak = fadd contract float %mul, 10.0
+  store float %madak, ptr addrspace(1) %out.gep, align 4
+  ret void
+}
+
+; With the contract flag, the mul-by-constant fuses to v_fmamk on FMA targets.
+define amdgpu_kernel void @madmk_f32_contract(ptr addrspace(1) noalias %out, ptr addrspace(1) noalias %in.a, ptr addrspace(1) noalias %in.b) #0 {
+; GFX6-LABEL: madmk_f32_contract:
+; GFX6:       ; %bb.0:
+; GFX6-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x9
+; GFX6-NEXT:    s_load_dwordx2 s[8:9], s[4:5], 0xd
+; GFX6-NEXT:    s_mov_b32 s7, 0xf000
+; GFX6-NEXT:    s_mov_b32 s6, 0
+; GFX6-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX6-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX6-NEXT:    s_mov_b64 s[4:5], s[2:3]
+; GFX6-NEXT:    v_mov_b32_e32 v1, 0
+; GFX6-NEXT:    s_mov_b64 s[10:11], s[6:7]
+; GFX6-NEXT:    buffer_load_dword v2, v[0:1], s[4:7], 0 addr64
+; GFX6-NEXT:    buffer_load_dword v3, v[0:1], s[8:11], 0 addr64
+; GFX6-NEXT:    s_mov_b64 s[2:3], s[6:7]
+; GFX6-NEXT:    s_waitcnt vmcnt(0)
+; GFX6-NEXT:    v_madmk_f32 v2, v2, 0x41200000, v3
+; GFX6-NEXT:    buffer_store_dword v2, v[0:1], s[0:3], 0 addr64
+; GFX6-NEXT:    s_endpgm
+;
+; GFX8-LABEL: madmk_f32_contract:
+; GFX8:       ; %bb.0:
+; GFX8-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX8-NEXT:    s_load_dwordx2 s[4:5], s[4:5], 0x34
+; GFX8-NEXT:    v_lshlrev_b32_e32 v4, 2, v0
+; GFX8-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX8-NEXT:    v_mov_b32_e32 v1, s3
+; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s2, v4
+; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
+; GFX8-NEXT:    v_mov_b32_e32 v3, s5
+; GFX8-NEXT:    v_add_u32_e32 v2, vcc, s4, v4
+; GFX8-NEXT:    v_addc_u32_e32 v3, vcc, 0, v3, vcc
+; GFX8-NEXT:    flat_load_dword v5, v[0:1]
+; GFX8-NEXT:    flat_load_dword v2, v[2:3]
+; GFX8-NEXT:    v_mov_b32_e32 v1, s1
+; GFX8-NEXT:    v_add_u32_e32 v0, vcc, s0, v4
+; GFX8-NEXT:    v_addc_u32_e32 v1, vcc, 0, v1, vcc
+; GFX8-NEXT:    s_waitcnt vmcnt(0)
+; GFX8-NEXT:    v_madmk_f32 v2, v5, 0x41200000, v2
+; GFX8-NEXT:    flat_store_dword v[0:1], v2
+; GFX8-NEXT:    s_endpgm
+;
+; GFX9-LABEL: madmk_f32_contract:
+; GFX9:       ; %bb.0:
+; GFX9-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX9-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX9-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX9-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX9-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX9-NEXT:    s_waitcnt vmcnt(0)
+; GFX9-NEXT:    v_madmk_f32 v1, v1, 0x41200000, v2
+; GFX9-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX9-NEXT:    s_endpgm
+;
+; GFX942-LABEL: madmk_f32_contract:
+; GFX942:       ; %bb.0:
+; GFX942-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX942-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX942-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX942-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX942-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX942-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX942-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX942-NEXT:    s_waitcnt vmcnt(0)
+; GFX942-NEXT:    v_fmamk_f32 v1, v1, 0x41200000, v2
+; GFX942-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX942-NEXT:    s_endpgm
+;
+; GFX10-MAD-LABEL: madmk_f32_contract:
+; GFX10-MAD:       ; %bb.0:
+; GFX10-MAD-NEXT:    s_clause 0x1
+; GFX10-MAD-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
+; GFX10-MAD-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
+; GFX10-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX10-MAD-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX10-MAD-NEXT:    s_clause 0x1
+; GFX10-MAD-NEXT:    global_load_dword v1, v0, s[2:3]
+; GFX10-MAD-NEXT:    global_load_dword v2, v0, s[6:7]
+; GFX10-MAD-NEXT:    s_waitcnt vmcnt(0)
+; GFX10-MAD-NEXT:    v_fmamk_f32 v1, v1, 0x41200000, v2
+; GFX10-MAD-NEXT:    global_store_dword v0, v1, s[0:1]
+; GFX10-MAD-NEXT:    s_endpgm
+;
+; GFX11-MAD-LABEL: madmk_f32_contract:
+; GFX11-MAD:       ; %bb.0:
+; GFX11-MAD-NEXT:    s_clause 0x1
+; GFX11-MAD-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
+; GFX11-MAD-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
+; GFX11-MAD-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
+; GFX11-MAD-NEXT:    s_delay_alu instid0(VALU_DEP_1)
+; GFX11-MAD-NEXT:    v_lshlrev_b32_e32 v0, 2, v0
+; GFX11-MAD-NEXT:    s_waitcnt lgkmcnt(0)
+; GFX11-MAD-NEXT:    s_clause 0x1
+; GFX11-MAD-NEXT:    global_load_b32 v1, v0, s[2:3]
+; GFX11-MAD-NEXT:    global_load_b32 v2, v0, s[4:5]
+; GFX11-MAD-NEXT:    s_waitcnt vmcnt(0)
+; GFX11-MAD-NEXT:    v_fmamk_f32 v1, v1, 0x41200000, v2
+; GFX11-MAD-NEXT:    global_store_b32 v0, v1, s[0:1]
+; GFX11-MAD-NEXT:    s_endpgm
+  %tid = tail call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone
+  %in.a.gep = getelementptr float, ptr addrspace(1) %in.a, i32 %tid
+  %in.b.gep = getelementptr float, ptr addrspace(1) %in.b, i32 %tid
+  %out.gep = getelementptr float, ptr addrspace(1) %out, i32 %tid
+
+  %a = load float, ptr addrspace(1) %in.a.gep, align 4
+  %b = load float, ptr addrspace(1) %in.b.gep, align 4
+
+  %mul = fmul contract float %a, 10.0
+  %madmk = fadd contract float %mul, %b
+  store float %madmk, ptr addrspace(1) %out.gep, align 4
+  ret void
+}
+
 attributes #0 = { nounwind denormal_fpenv(float: preservesign) }
diff --git a/llvm/test/CodeGen/ARM/fp16-instructions.ll b/llvm/test/CodeGen/ARM/fp16-instructions.ll
index 7a1d5ddfa301b..94d7ec4a0f39c 100644
--- a/llvm/test/CodeGen/ARM/fp16-instructions.ll
+++ b/llvm/test/CodeGen/ARM/fp16-instructions.ll
@@ -27,8 +27,8 @@
 ; RUN: llc < %s -mtriple=thumbv7-none-eabihf -mattr=+fullfp16,fp64  | FileCheck %s --check-prefixes=CHECK,CHECK-HARDFP-FULLFP16
 
 ; FP-CONTRACT=FAST
-; RUN: llc < %s -mtriple=arm-none-eabihf -mattr=+fullfp16,+fp64 -fp-contract=fast | FileCheck %s --check-prefixes=CHECK,CHECK-HARDFP-FULLFP16-FAST
-; RUN: llc < %s -mtriple=thumbv7-none-eabihf -mattr=+fullfp16,+fp64 -fp-contract=fast | FileCheck %s --check-prefixes=CHECK,CHECK-HARDFP-FULLFP16-FAST
+; RUN: llc < %s -mtriple=arm-none-eabihf -mattr=+fullfp16,+fp64 | FileCheck %s --check-prefixes=CHECK,CHECK-HARDFP-FULLFP16-FAST
+; RUN: llc < %s -mtriple=thumbv7-none-eabihf -mattr=+fullfp16,+fp64 | FileCheck %s --check-prefixes=CHECK,CHECK-HARDFP-FULLFP16-FAST
 
 ; TODO: we can't pass half-precision arguments as "half" types yet. We do
 ; that for the time being by passing "float %f.coerce" and the necessary
@@ -396,8 +396,8 @@ entry:
   %4 = bitcast float %c.coerce to i32
   %tmp2.0.extract.trunc = trunc i32 %4 to i16
   %5 = bitcast i16 %tmp2.0.extract.trunc to half
-  %mul = fmul half %1, %3
-  %add = fadd half %mul, %5
+  %mul = fmul contract half %1, %3
+  %add = fadd contract half %mul, %5
   %6 = bitcast half %add to i16
   %tmp4.0.insert.ext = zext i16 %6 to i32
   %7 = bitcast i32 %tmp4.0.insert.ext to float
@@ -420,8 +420,8 @@ entry:
   %4 = bitcast float %c.coerce to i32
   %tmp2.0.extract.trunc = trunc i32 %4 to i16
   %5 = bitcast i16 %tmp2.0.extract.trunc to half
-  %mul = fmul half %1, %3
-  %sub = fsub half %5, %mul
+  %mul = fmul contract half %1, %3
+  %sub = fsub contract half %5, %mul
   %6 = bitcast half %sub to i16
   %tmp4.0.insert.ext = zext i16 %6 to i32
   %7 = bitcast i32 %tmp4.0.insert.ext to float
@@ -444,9 +444,9 @@ entry:
   %4 = bitcast float %c.coerce to i32
   %tmp2.0.extract.trunc = trunc i32 %4 to i16
   %5 = bitcast i16 %tmp2.0.extract.trunc to half
-  %mul = fmul half %1, %3
+  %mul = fmul contract half %1, %3
   %sub = fsub half -0.0, %mul
-  %sub2 = fsub half %sub, %5
+  %sub2 = fsub contract half %sub, %5
   %6 = bitcast half %sub2 to i16
   %tmp4.0.insert.ext = zext i16 %6 to i32
   %7 = bitcast i32 %tmp4.0.insert.ext to float
@@ -469,8 +469,8 @@ entry:
   %4 = bitcast float %c.coerce to i32
   %tmp2.0.extract.trunc = trunc i32 %4 to i16
   %5 = bitcast i16 %tmp2.0.extract.trunc to half
-  %mul = fmul half %1, %3
-  %sub2 = fsub half %mul, %5
+  %mul = fmul contract half %1, %3
+  %sub2 = fsub contract half %mul, %5
   %6 = bitcast half %sub2 to i16
   %tmp4.0.insert.ext = zext i16 %6 to i32
   %7 = bitcast i32 %tmp4.0.insert.ext to float
diff --git a/llvm/test/CodeGen/Hexagon/float-amode.ll b/llvm/test/CodeGen/Hexagon/float-amode.ll
index 0f7133e2d1794..c455c3a6124a8 100644
--- a/llvm/test/CodeGen/Hexagon/float-amode.ll
+++ b/llvm/test/CodeGen/Hexagon/float-amode.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -fp-contract=fast -disable-hexagon-peephole -disable-hexagon-amodeopt < %s | FileCheck %s
+; RUN: llc -mtriple=hexagon -disable-hexagon-peephole -disable-hexagon-amodeopt < %s | FileCheck %s
 
 ; The test checks for various addressing modes for floating point loads/stores.
 
@@ -25,8 +25,8 @@ entry:
   %1 = load ptr, ptr %arrayidx, align 4
   %arrayidx1 = getelementptr inbounds float, ptr %1, i32 %col1
   %2 = load float, ptr %arrayidx1, align 4
-  %mul = fmul float %2, 2.000000e+01
-  %add = fadd float %mul, 1.000000e+01
+  %mul = fmul contract float %2, 2.000000e+01
+  %add = fadd contract float %mul, 1.000000e+01
   %arrayidx3 = getelementptr inbounds ptr, ptr %0, i32 5
   %3 = load ptr, ptr %arrayidx3, align 4
   %arrayidx4 = getelementptr inbounds float, ptr %3, i32 %col1
diff --git a/llvm/test/CodeGen/Hexagon/fmadd.ll b/llvm/test/CodeGen/Hexagon/fmadd.ll
index f1740ccbdd202..f8fe9e858ca2f 100644
--- a/llvm/test/CodeGen/Hexagon/fmadd.ll
+++ b/llvm/test/CodeGen/Hexagon/fmadd.ll
@@ -1,4 +1,4 @@
-; RUN: llc -mtriple=hexagon -fp-contract=fast < %s | FileCheck %s
+; RUN: llc -mtriple=hexagon < %s | FileCheck %s
 
 @g0 = global float 0.000000e+00, align 4
 @g1 = global float 1.000000e+00, align 4
@@ -11,8 +11,8 @@ b0:
   %v1 = load float, ptr @g1, align 4
   %v2 = load float, ptr @g2, align 4
   %v3 = alloca float, align 4
-  %v4 = fmul float %v0, %v1
-  %v5 = fadd float %v2, %v4
+  %v4 = fmul contract float %v0, %v1
+  %v5 = fadd contract float %v2, %v4
   store float %v5, ptr %v3, align 4
   ret void
 }
diff --git a/llvm/test/CodeGen/Hexagon/fp_latency.ll b/llvm/test/CodeGen/Hexagon/fp_latency.ll
index 0da763c6c8bab..1477d6b63b6c1 100644
--- a/llvm/test/CodeGen/Hexagon/fp_latency.ll
+++ b/llvm/test/CodeGen/Hexagon/fp_latency.ll
@@ -1,4 +1,4 @@
-; RUN: llc -O2 -mtriple=hexagon -fp-contract=fast -pipeliner-prune-loop-carried=false < %s | FileCheck %s
+; RUN: llc -O2 -mtriple=hexagon -pipeliner-prune-loop-carried=false < %s | FileCheck %s
 
 ; Test that there is 1 packet between the FP result and its use.
 
@@ -35,19 +35,19 @@ b2:                                               ; preds = %b2, %b1
   %v15 = add nsw i32 %v14, %v11
   %v16 = getelementptr inbounds [1000 x float], ptr %v1, i32 0, i32 %v15
   %v17 = load float, ptr %v16, align 4, !tbaa !0
-  %v18 = fmul float %v17, %v17
+  %v18 = fmul contract float %v17, %v17
   %v19 = mul nsw i32 %v13, 25
   %v20 = add nsw i32 %v19, %v11
   %v21 = getelementptr inbounds [1000 x float], ptr %v2, i32 0, i32 %v20
   %v22 = load float, ptr %v21, align 4, !tbaa !0
-  %v23 = fmul float %v22, %v22
-  %v24 = fadd float %v18, %v23
+  %v23 = fmul contract float %v22, %v22
+  %v24 = fadd contract float %v18, %v23
   %v25 = load float, ptr %v12, align 4, !tbaa !0
-  %v26 = fmul float %v25, %v25
-  %v27 = fadd float %v24, %v26
+  %v26 = fmul contract float %v25, %v25
+  %v27 = fadd contract float %v24, %v26
   %v28 = getelementptr inbounds [1000 x float], ptr %v0, i32 0, i32 %v20
   %v29 = load float, ptr %v28, align 4, !tbaa !0
-  %v30 = fadd float %v29, %v27
+  %v30 = fadd contract float %v29, %v27
   store float %v30, ptr %v28, align 4, !tbaa !0
   %v31 = add nuw nsw i32 %v13, 1
   %v32 = icmp eq i32 %v13, %v9
diff --git a/llvm/test/CodeGen/LoongArch/double-fma.ll b/llvm/test/CodeGen/LoongArch/double-fma.ll
index 58d20c62a668a..057260e3ed956 100644
--- a/llvm/test/CodeGen/LoongArch/double-fma.ll
+++ b/llvm/test/CodeGen/LoongArch/double-fma.ll
@@ -1,133 +1,57 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc --mtriple=loongarch32 --mattr=+d --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-FAST
-; RUN: llc --mtriple=loongarch32 --mattr=+d --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-ON
-; RUN: llc --mtriple=loongarch32 --mattr=+d --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-OFF
-; RUN: llc --mtriple=loongarch64 --mattr=+d --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-FAST
-; RUN: llc --mtriple=loongarch64 --mattr=+d --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-ON
-; RUN: llc --mtriple=loongarch64 --mattr=+d --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-OFF
+; RUN: llc --mtriple=loongarch32 --mattr=+d < %s \
+; RUN:   | FileCheck %s --check-prefix=LA32
+; RUN: llc --mtriple=loongarch64 --mattr=+d < %s \
+; RUN:   | FileCheck %s --check-prefix=LA64
 
 define double @fmadd_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fadd.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fadd.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fadd.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fadd.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmadd_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA32-NEXT:    fadd.d $fa0, $fa0, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmadd_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA64-NEXT:    fadd.d $fa0, $fa0, $fa2
+; LA64-NEXT:    ret
   %mul = fmul double %a, %b
   %add = fadd double %mul, %c
   ret double %add
 }
 
 define double @fmsub_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmsub_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.d $fa0, $fa0, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmsub_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.d $fa0, $fa0, $fa2
+; LA64-NEXT:    ret
   %mul = fmul double %a, %b
   %sub = fsub double %mul, %c
   ret double %sub
 }
 
 define double @fnmadd_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fadd.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fadd.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fadd.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fadd.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA32-NEXT:    fadd.d $fa0, $fa0, $fa2
+; LA32-NEXT:    fneg.d $fa0, $fa0
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA64-NEXT:    fadd.d $fa0, $fa0, $fa2
+; LA64-NEXT:    fneg.d $fa0, $fa0
+; LA64-NEXT:    ret
   %mul = fmul double %a, %b
   %add = fadd double %mul, %c
   %negadd = fneg double %add
@@ -135,43 +59,19 @@ define double @fnmadd_d(double %a, double %b, double %c) nounwind {
 }
 
 define double @fnmadd_d_nsz(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_d_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_d_nsz:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_d_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_d_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_d_nsz:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_d_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_d_nsz:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.d $fa0, $fa0
+; LA32-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.d $fa0, $fa0, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_d_nsz:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.d $fa0, $fa0
+; LA64-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.d $fa0, $fa0, $fa2
+; LA64-NEXT:    ret
   %nega = fneg nsz double %a
   %negc = fneg nsz double %c
   %mul = fmul nsz double %nega, %b
@@ -181,45 +81,19 @@ define double @fnmadd_d_nsz(double %a, double %b, double %c) nounwind {
 
 ;; Check that fnmadd.d is not emitted.
 define double @not_fnmadd_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_fnmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_fnmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_fnmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_fnmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_fnmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_fnmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_fnmadd_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.d $fa0, $fa0
+; LA32-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.d $fa0, $fa0, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_fnmadd_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.d $fa0, $fa0
+; LA64-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.d $fa0, $fa0, $fa2
+; LA64-NEXT:    ret
   %nega = fneg double %a
   %negc = fneg double %c
   %mul = fmul double %nega, %b
@@ -228,43 +102,19 @@ define double @not_fnmadd_d(double %a, double %b, double %c) nounwind {
 }
 
 define double @fnmsub_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.d $fa0, $fa0, $fa2
+; LA32-NEXT:    fneg.d $fa0, $fa0
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.d $fa0, $fa0, $fa2
+; LA64-NEXT:    fneg.d $fa0, $fa0
+; LA64-NEXT:    ret
   %negc = fneg double %c
   %mul = fmul double %a, %b
   %add = fadd double %mul, %negc
@@ -273,39 +123,17 @@ define double @fnmsub_d(double %a, double %b, double %c) nounwind {
 }
 
 define double @fnmsub_d_nsz(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_d_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_d_nsz:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa2, $fa0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_d_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa2, $fa0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_d_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_d_nsz:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa2, $fa0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_d_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa2, $fa0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_d_nsz:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.d $fa0, $fa2, $fa0
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_d_nsz:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.d $fa0, $fa2, $fa0
+; LA64-NEXT:    ret
   %nega = fneg nsz double %a
   %mul = fmul nsz double %nega, %b
   %add = fadd nsz double %mul, %c
@@ -314,41 +142,17 @@ define double @fnmsub_d_nsz(double %a, double %b, double %c) nounwind {
 
 ;; Check that fnmsub.d is not emitted.
 define double @not_fnmsub_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_fnmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_fnmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa2, $fa0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_fnmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa2, $fa0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_fnmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_fnmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.d $fa0, $fa2, $fa0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_fnmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.d $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.d $fa0, $fa2, $fa0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_fnmsub_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.d $fa0, $fa2, $fa0
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_fnmsub_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.d $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.d $fa0, $fa2, $fa0
+; LA64-NEXT:    ret
   %nega = fneg double %a
   %mul = fmul double %nega, %b
   %add = fadd double %mul, %c
@@ -356,105 +160,45 @@ define double @not_fnmsub_d(double %a, double %b, double %c) nounwind {
 }
 
 define double @contract_fmadd_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fmadd_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fmadd_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract double %a, %b
   %add = fadd contract double %mul, %c
   ret double %add
 }
 
 define double @contract_fmsub_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fmsub_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fmsub_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract double %a, %b
   %sub = fsub contract double %mul, %c
   ret double %sub
 }
 
 define double @contract_fnmadd_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fnmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fnmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fnmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fnmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fnmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fnmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fnmadd_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fnmadd_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract double %a, %b
   %add = fadd contract double %mul, %c
   %negadd = fneg contract double %add
@@ -462,35 +206,15 @@ define double @contract_fnmadd_d(double %a, double %b, double %c) nounwind {
 }
 
 define double @contract_fnmadd_d_nsz(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fnmadd_d_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fnmadd_d_nsz:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fnmadd_d_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fnmadd_d_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fnmadd_d_nsz:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fnmadd_d_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fnmadd_d_nsz:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fnmadd_d_nsz:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg contract nsz double %a
   %negc = fneg contract nsz double %c
   %mul = fmul contract nsz double %nega, %b
@@ -500,41 +224,17 @@ define double @contract_fnmadd_d_nsz(double %a, double %b, double %c) nounwind {
 
 ;; Check that fnmadd.d is not emitted.
 define double @not_contract_fnmadd_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_contract_fnmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_contract_fnmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_contract_fnmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_contract_fnmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_contract_fnmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_contract_fnmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_contract_fnmadd_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.d $fa0, $fa0
+; LA32-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_contract_fnmadd_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.d $fa0, $fa0
+; LA64-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg contract double %a
   %negc = fneg contract double %c
   %mul = fmul contract double %nega, %b
@@ -543,35 +243,15 @@ define double @not_contract_fnmadd_d(double %a, double %b, double %c) nounwind {
 }
 
 define double @contract_fnmsub_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fnmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fnmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fnmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fnmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fnmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fnmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fnmsub_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fnmsub_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %negc = fneg contract double %c
   %mul = fmul contract double %a, %b
   %add = fadd contract double %mul, %negc
@@ -580,35 +260,15 @@ define double @contract_fnmsub_d(double %a, double %b, double %c) nounwind {
 }
 
 define double @contract_fnmsub_d_nsz(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fnmsub_d_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fnmsub_d_nsz:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fnmsub_d_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fnmsub_d_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fnmsub_d_nsz:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fnmsub_d_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fnmsub_d_nsz:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fnmsub_d_nsz:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg contract nsz double %a
   %mul = fmul contract nsz double %nega, %b
   %add = fadd contract nsz double %mul, %c
@@ -617,41 +277,17 @@ define double @contract_fnmsub_d_nsz(double %a, double %b, double %c) nounwind {
 
 ;; Check that fnmsub.d is not emitted.
 define double @not_contract_fnmsub_d(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_contract_fnmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_contract_fnmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_contract_fnmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_contract_fnmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_contract_fnmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_contract_fnmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_contract_fnmsub_d:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.d $fa0, $fa0
+; LA32-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_contract_fnmsub_d:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.d $fa0, $fa0
+; LA64-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg contract double %a
   %mul = fmul contract double %nega, %b
   %add = fadd contract double %mul, %c
@@ -661,139 +297,59 @@ define double @not_contract_fnmsub_d(double %a, double %b, double %c) nounwind {
 declare double @llvm.fma.f64(double, double, double)
 
 define double @fmadd_d_intrinsics(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmadd_d_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmadd_d_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmadd_d_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmadd_d_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmadd_d_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmadd_d_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmadd_d_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmadd_d_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %fma = call double @llvm.fma.f64(double %a, double %b, double %c)
   ret double %fma
 }
 
 define double @fmsub_d_intrinsics(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmsub_d_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmsub_d_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmsub_d_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmsub_d_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmsub_d_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmsub_d_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmsub_d_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmsub_d_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %negc = fneg double %c
   %fma = call double @llvm.fma.f64(double %a, double %b, double %negc)
   ret double %fma
 }
 
 define double @fnmadd_d_intrinsics(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_d_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_d_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_d_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_d_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_d_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_d_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_d_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_d_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %fma = call double @llvm.fma.f64(double %a, double %b, double %c)
   %negfma = fneg double %fma
   ret double %negfma
 }
 
 define double @fnmadd_d_nsz_intrinsics(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_d_nsz_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_d_nsz_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_d_nsz_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_d_nsz_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_d_nsz_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_d_nsz_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_d_nsz_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_d_nsz_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg double %a
   %negc = fneg double %c
   %fma = call nsz double @llvm.fma.f64(double %nega, double %b, double %negc)
@@ -802,41 +358,17 @@ define double @fnmadd_d_nsz_intrinsics(double %a, double %b, double %c) nounwind
 
 ;; Check that fnmadd.d is not emitted.
 define double @not_fnmadd_d_intrinsics(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_fnmadd_d_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_fnmadd_d_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_fnmadd_d_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_fnmadd_d_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_fnmadd_d_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_fnmadd_d_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_fnmadd_d_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.d $fa0, $fa0
+; LA32-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_fnmadd_d_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.d $fa0, $fa0
+; LA64-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg double %a
   %negc = fneg double %c
   %fma = call double @llvm.fma.f64(double %nega, double %b, double %negc)
@@ -844,35 +376,15 @@ define double @not_fnmadd_d_intrinsics(double %a, double %b, double %c) nounwind
 }
 
 define double @fnmsub_d_intrinsics(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_d_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_d_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_d_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_d_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_d_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_d_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_d_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_d_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %negc = fneg double %c
   %fma = call double @llvm.fma.f64(double %a, double %b, double %negc)
   %negfma = fneg double %fma
@@ -880,35 +392,15 @@ define double @fnmsub_d_intrinsics(double %a, double %b, double %c) nounwind {
 }
 
 define double @fnmsub_d_nsz_intrinsics(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_d_nsz_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_d_nsz_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_d_nsz_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_d_nsz_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_d_nsz_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_d_nsz_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_d_nsz_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_d_nsz_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg double %a
   %fma = call nsz double @llvm.fma.f64(double %nega, double %b, double %c)
   ret double %fma
@@ -916,146 +408,62 @@ define double @fnmsub_d_nsz_intrinsics(double %a, double %b, double %c) nounwind
 
 ;; Check that fnmsub.d is not emitted.
 define double @not_fnmsub_d_intrinsics(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_fnmsub_d_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_fnmsub_d_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_fnmsub_d_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_fnmsub_d_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_fnmsub_d_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_fnmsub_d_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.d $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_fnmsub_d_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.d $fa0, $fa0
+; LA32-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_fnmsub_d_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.d $fa0, $fa0
+; LA64-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg double %a
   %fma = call double @llvm.fma.f64(double %nega, double %b, double %c)
   ret double %fma
 }
 
 define double @fmadd_d_contract(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmadd_d_contract:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmadd_d_contract:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmadd_d_contract:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmadd_d_contract:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmadd_d_contract:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmadd_d_contract:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmadd_d_contract:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmadd_d_contract:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract double %a, %b
   %add = fadd contract double %mul, %c
   ret double %add
 }
 
 define double @fmsub_d_contract(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmsub_d_contract:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmsub_d_contract:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmsub_d_contract:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmsub_d_contract:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmsub_d_contract:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmsub_d_contract:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmsub_d_contract:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmsub_d_contract:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract double %a, %b
   %sub = fsub contract double %mul, %c
   ret double %sub
 }
 
 define double @fnmadd_d_contract(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_d_contract:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_d_contract:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_d_contract:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_d_contract:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_d_contract:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_d_contract:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_d_contract:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_d_contract:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract double %a, %b
   %add = fadd contract double %mul, %c
   %negadd = fneg contract double %add
@@ -1063,35 +471,15 @@ define double @fnmadd_d_contract(double %a, double %b, double %c) nounwind {
 }
 
 define double @fnmsub_d_contract(double %a, double %b, double %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_d_contract:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_d_contract:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_d_contract:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_d_contract:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_d_contract:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_d_contract:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_d_contract:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_d_contract:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.d $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract double %a, %b
   %negc = fneg contract double %c
   %add = fadd contract double %negc, %mul
diff --git a/llvm/test/CodeGen/LoongArch/float-fma.ll b/llvm/test/CodeGen/LoongArch/float-fma.ll
index c236255d971a2..54e4d938d2151 100644
--- a/llvm/test/CodeGen/LoongArch/float-fma.ll
+++ b/llvm/test/CodeGen/LoongArch/float-fma.ll
@@ -1,133 +1,57 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc --mtriple=loongarch32 --mattr=+f,-d --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-FAST
-; RUN: llc --mtriple=loongarch32 --mattr=+f,-d --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-ON
-; RUN: llc --mtriple=loongarch32 --mattr=+f,-d --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-OFF
-; RUN: llc --mtriple=loongarch64 --mattr=+f,-d --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-FAST
-; RUN: llc --mtriple=loongarch64 --mattr=+f,-d --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-ON
-; RUN: llc --mtriple=loongarch64 --mattr=+f,-d --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-OFF
+; RUN: llc --mtriple=loongarch32 --mattr=+f,-d < %s \
+; RUN:   | FileCheck %s --check-prefix=LA32
+; RUN: llc --mtriple=loongarch64 --mattr=+f,-d < %s \
+; RUN:   | FileCheck %s --check-prefix=LA64
 
 define float @fmadd_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fadd.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fadd.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fadd.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fadd.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmadd_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA32-NEXT:    fadd.s $fa0, $fa0, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmadd_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA64-NEXT:    fadd.s $fa0, $fa0, $fa2
+; LA64-NEXT:    ret
   %mul = fmul float %a, %b
   %add = fadd float %mul, %c
   ret float %add
 }
 
 define float @fmsub_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmsub_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.s $fa0, $fa0, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmsub_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.s $fa0, $fa0, $fa2
+; LA64-NEXT:    ret
   %mul = fmul float %a, %b
   %sub = fsub float %mul, %c
   ret float %sub
 }
 
 define float @fnmadd_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fadd.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fadd.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fadd.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fadd.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA32-NEXT:    fadd.s $fa0, $fa0, $fa2
+; LA32-NEXT:    fneg.s $fa0, $fa0
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA64-NEXT:    fadd.s $fa0, $fa0, $fa2
+; LA64-NEXT:    fneg.s $fa0, $fa0
+; LA64-NEXT:    ret
   %mul = fmul float %a, %b
   %add = fadd float %mul, %c
   %negadd = fneg float %add
@@ -135,43 +59,19 @@ define float @fnmadd_s(float %a, float %b, float %c) nounwind {
 }
 
 define float @fnmadd_s_nsz(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_s_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_s_nsz:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_s_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_s_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_s_nsz:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_s_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_s_nsz:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.s $fa0, $fa0
+; LA32-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.s $fa0, $fa0, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_s_nsz:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.s $fa0, $fa0
+; LA64-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.s $fa0, $fa0, $fa2
+; LA64-NEXT:    ret
   %nega = fneg nsz float %a
   %negc = fneg nsz float %c
   %mul = fmul nsz float %nega, %b
@@ -181,45 +81,19 @@ define float @fnmadd_s_nsz(float %a, float %b, float %c) nounwind {
 
 ;; Check that fnmadd.s is not emitted.
 define float @not_fnmadd_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_fnmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_fnmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_fnmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_fnmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_fnmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_fnmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_fnmadd_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.s $fa0, $fa0
+; LA32-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.s $fa0, $fa0, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_fnmadd_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.s $fa0, $fa0
+; LA64-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.s $fa0, $fa0, $fa2
+; LA64-NEXT:    ret
   %nega = fneg float %a
   %negc = fneg float %c
   %mul = fmul float %nega, %b
@@ -228,43 +102,19 @@ define float @not_fnmadd_s(float %a, float %b, float %c) nounwind {
 }
 
 define float @fnmsub_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA32-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa0, $fa2
-; LA64-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.s $fa0, $fa0, $fa2
+; LA32-NEXT:    fneg.s $fa0, $fa0
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.s $fa0, $fa0, $fa2
+; LA64-NEXT:    fneg.s $fa0, $fa0
+; LA64-NEXT:    ret
   %negc = fneg float %c
   %mul = fmul float %a, %b
   %add = fadd float %mul, %negc
@@ -273,39 +123,17 @@ define float @fnmsub_s(float %a, float %b, float %c) nounwind {
 }
 
 define float @fnmsub_s_nsz(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_s_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_s_nsz:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa2, $fa0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_s_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa2, $fa0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_s_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_s_nsz:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa2, $fa0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_s_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa2, $fa0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_s_nsz:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.s $fa0, $fa2, $fa0
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_s_nsz:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.s $fa0, $fa2, $fa0
+; LA64-NEXT:    ret
   %nega = fneg nsz float %a
   %mul = fmul nsz float %nega, %b
   %add = fadd nsz float %mul, %c
@@ -314,41 +142,17 @@ define float @fnmsub_s_nsz(float %a, float %b, float %c) nounwind {
 
 ;; Check that fnmsub.s is not emitted.
 define float @not_fnmsub_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_fnmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_fnmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa2, $fa0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_fnmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA32-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa2, $fa0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_fnmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_fnmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-ON-NEXT:    fsub.s $fa0, $fa2, $fa0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_fnmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmul.s $fa0, $fa0, $fa1
-; LA64-CONTRACT-OFF-NEXT:    fsub.s $fa0, $fa2, $fa0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_fnmsub_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA32-NEXT:    fsub.s $fa0, $fa2, $fa0
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_fnmsub_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmul.s $fa0, $fa0, $fa1
+; LA64-NEXT:    fsub.s $fa0, $fa2, $fa0
+; LA64-NEXT:    ret
   %nega = fneg float %a
   %mul = fmul float %nega, %b
   %add = fadd float %mul, %c
@@ -356,105 +160,45 @@ define float @not_fnmsub_s(float %a, float %b, float %c) nounwind {
 }
 
 define float @contract_fmadd_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fmadd_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fmadd_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract float %a, %b
   %add = fadd contract float %mul, %c
   ret float %add
 }
 
 define float @contract_fmsub_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fmsub_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fmsub_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract float %a, %b
   %sub = fsub contract float %mul, %c
   ret float %sub
 }
 
 define float @contract_fnmadd_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fnmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fnmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fnmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fnmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fnmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fnmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fnmadd_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fnmadd_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract float %a, %b
   %add = fadd contract float %mul, %c
   %negadd = fneg contract float %add
@@ -462,35 +206,15 @@ define float @contract_fnmadd_s(float %a, float %b, float %c) nounwind {
 }
 
 define float @contract_fnmadd_s_nsz(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fnmadd_s_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fnmadd_s_nsz:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fnmadd_s_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fnmadd_s_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fnmadd_s_nsz:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fnmadd_s_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fnmadd_s_nsz:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fnmadd_s_nsz:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg contract nsz float %a
   %negc = fneg contract nsz float %c
   %mul = fmul contract nsz float %nega, %b
@@ -500,41 +224,17 @@ define float @contract_fnmadd_s_nsz(float %a, float %b, float %c) nounwind {
 
 ;; Check that fnmadd.s is not emitted.
 define float @not_contract_fnmadd_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_contract_fnmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_contract_fnmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_contract_fnmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_contract_fnmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_contract_fnmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_contract_fnmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_contract_fnmadd_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.s $fa0, $fa0
+; LA32-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_contract_fnmadd_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.s $fa0, $fa0
+; LA64-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg contract float %a
   %negc = fneg contract float %c
   %mul = fmul contract float %nega, %b
@@ -543,35 +243,15 @@ define float @not_contract_fnmadd_s(float %a, float %b, float %c) nounwind {
 }
 
 define float @contract_fnmsub_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fnmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fnmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fnmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fnmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fnmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fnmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fnmsub_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fnmsub_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %negc = fneg contract float %c
   %mul = fmul contract float %a, %b
   %add = fadd contract float %mul, %negc
@@ -580,35 +260,15 @@ define float @contract_fnmsub_s(float %a, float %b, float %c) nounwind {
 }
 
 define float @contract_fnmsub_s_nsz(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_fnmsub_s_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_fnmsub_s_nsz:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_fnmsub_s_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_fnmsub_s_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_fnmsub_s_nsz:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_fnmsub_s_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: contract_fnmsub_s_nsz:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: contract_fnmsub_s_nsz:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg contract nsz float %a
   %mul = fmul contract nsz float %nega, %b
   %add = fadd contract nsz float %mul, %c
@@ -617,41 +277,17 @@ define float @contract_fnmsub_s_nsz(float %a, float %b, float %c) nounwind {
 
 ;; Check that fnmsub.s is not emitted.
 define float @not_contract_fnmsub_s(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_contract_fnmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_contract_fnmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_contract_fnmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_contract_fnmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_contract_fnmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_contract_fnmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_contract_fnmsub_s:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.s $fa0, $fa0
+; LA32-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_contract_fnmsub_s:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.s $fa0, $fa0
+; LA64-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg contract float %a
   %mul = fmul contract float %nega, %b
   %add = fadd contract float %mul, %c
@@ -661,139 +297,59 @@ define float @not_contract_fnmsub_s(float %a, float %b, float %c) nounwind {
 declare float @llvm.fma.f64(float, float, float)
 
 define float @fmadd_s_intrinsics(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmadd_s_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmadd_s_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmadd_s_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmadd_s_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmadd_s_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmadd_s_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmadd_s_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmadd_s_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %fma = call float @llvm.fma.f64(float %a, float %b, float %c)
   ret float %fma
 }
 
 define float @fmsub_s_intrinsics(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmsub_s_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmsub_s_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmsub_s_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmsub_s_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmsub_s_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmsub_s_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmsub_s_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmsub_s_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %negc = fneg float %c
   %fma = call float @llvm.fma.f64(float %a, float %b, float %negc)
   ret float %fma
 }
 
 define float @fnmadd_s_intrinsics(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_s_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_s_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_s_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_s_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_s_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_s_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_s_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_s_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %fma = call float @llvm.fma.f64(float %a, float %b, float %c)
   %negfma = fneg float %fma
   ret float %negfma
 }
 
 define float @fnmadd_s_nsz_intrinsics(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_s_nsz_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_s_nsz_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_s_nsz_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_s_nsz_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_s_nsz_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_s_nsz_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_s_nsz_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_s_nsz_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg float %a
   %negc = fneg float %c
   %fma = call nsz float @llvm.fma.f64(float %nega, float %b, float %negc)
@@ -802,41 +358,17 @@ define float @fnmadd_s_nsz_intrinsics(float %a, float %b, float %c) nounwind {
 
 ;; Check that fnmadd.s is not emitted.
 define float @not_fnmadd_s_intrinsics(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_fnmadd_s_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_fnmadd_s_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_fnmadd_s_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_fnmadd_s_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_fnmadd_s_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_fnmadd_s_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_fnmadd_s_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.s $fa0, $fa0
+; LA32-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_fnmadd_s_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.s $fa0, $fa0
+; LA64-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg float %a
   %negc = fneg float %c
   %fma = call float @llvm.fma.f64(float %nega, float %b, float %negc)
@@ -844,35 +376,15 @@ define float @not_fnmadd_s_intrinsics(float %a, float %b, float %c) nounwind {
 }
 
 define float @fnmsub_s_intrinsics(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_s_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_s_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_s_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_s_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_s_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_s_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_s_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_s_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %negc = fneg float %c
   %fma = call float @llvm.fma.f64(float %a, float %b, float %negc)
   %negfma = fneg float %fma
@@ -880,35 +392,15 @@ define float @fnmsub_s_intrinsics(float %a, float %b, float %c) nounwind {
 }
 
 define float @fnmsub_s_nsz_intrinsics(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_s_nsz_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_s_nsz_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_s_nsz_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_s_nsz_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_s_nsz_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_s_nsz_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_s_nsz_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_s_nsz_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg float %a
   %fma = call nsz float @llvm.fma.f64(float %nega, float %b, float %c)
   ret float %fma
@@ -916,146 +408,62 @@ define float @fnmsub_s_nsz_intrinsics(float %a, float %b, float %c) nounwind {
 
 ;; Check that fnmsub.s is not emitted.
 define float @not_fnmsub_s_intrinsics(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_fnmsub_s_intrinsics:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_fnmsub_s_intrinsics:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_fnmsub_s_intrinsics:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA32-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_fnmsub_s_intrinsics:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_fnmsub_s_intrinsics:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_fnmsub_s_intrinsics:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fneg.s $fa0, $fa0
-; LA64-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: not_fnmsub_s_intrinsics:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fneg.s $fa0, $fa0
+; LA32-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: not_fnmsub_s_intrinsics:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fneg.s $fa0, $fa0
+; LA64-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %nega = fneg float %a
   %fma = call float @llvm.fma.f64(float %nega, float %b, float %c)
   ret float %fma
 }
 
 define float @fmadd_s_contract(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmadd_s_contract:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmadd_s_contract:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmadd_s_contract:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmadd_s_contract:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmadd_s_contract:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmadd_s_contract:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmadd_s_contract:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmadd_s_contract:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract float %a, %b
   %add = fadd contract float %mul, %c
   ret float %add
 }
 
 define float @fmsub_s_contract(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fmsub_s_contract:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fmsub_s_contract:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fmsub_s_contract:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fmsub_s_contract:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fmsub_s_contract:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fmsub_s_contract:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fmsub_s_contract:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fmsub_s_contract:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract float %a, %b
   %sub = fsub contract float %mul, %c
   ret float %sub
 }
 
 define float @fnmadd_s_contract(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmadd_s_contract:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmadd_s_contract:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmadd_s_contract:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmadd_s_contract:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmadd_s_contract:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmadd_s_contract:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmadd_s_contract:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmadd_s_contract:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmadd.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract float %a, %b
   %add = fadd contract float %mul, %c
   %negadd = fneg contract float %add
@@ -1063,35 +471,15 @@ define float @fnmadd_s_contract(float %a, float %b, float %c) nounwind {
 }
 
 define float @fnmsub_s_contract(float %a, float %b, float %c) nounwind {
-; LA32-CONTRACT-FAST-LABEL: fnmsub_s_contract:
-; LA32-CONTRACT-FAST:       # %bb.0:
-; LA32-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: fnmsub_s_contract:
-; LA32-CONTRACT-ON:       # %bb.0:
-; LA32-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: fnmsub_s_contract:
-; LA32-CONTRACT-OFF:       # %bb.0:
-; LA32-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: fnmsub_s_contract:
-; LA64-CONTRACT-FAST:       # %bb.0:
-; LA64-CONTRACT-FAST-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: fnmsub_s_contract:
-; LA64-CONTRACT-ON:       # %bb.0:
-; LA64-CONTRACT-ON-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: fnmsub_s_contract:
-; LA64-CONTRACT-OFF:       # %bb.0:
-; LA64-CONTRACT-OFF-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-LABEL: fnmsub_s_contract:
+; LA32:       # %bb.0:
+; LA32-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA32-NEXT:    ret
+;
+; LA64-LABEL: fnmsub_s_contract:
+; LA64:       # %bb.0:
+; LA64-NEXT:    fnmsub.s $fa0, $fa0, $fa1, $fa2
+; LA64-NEXT:    ret
   %mul = fmul contract float %a, %b
   %negc = fneg contract float %c
   %add = fadd contract float %negc, %mul
diff --git a/llvm/test/CodeGen/LoongArch/lasx/fma-v4f64.ll b/llvm/test/CodeGen/LoongArch/lasx/fma-v4f64.ll
index 8e1ba7ea16016..76cc8f62b218c 100644
--- a/llvm/test/CodeGen/LoongArch/lasx/fma-v4f64.ll
+++ b/llvm/test/CodeGen/LoongArch/lasx/fma-v4f64.ll
@@ -1,75 +1,29 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-FAST
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-ON
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-OFF
-; RUN: llc --mtriple=loongarch64 --mattr=+lasx --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-FAST
-; RUN: llc --mtriple=loongarch64 --mattr=+lasx --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-ON
-; RUN: llc --mtriple=loongarch64 --mattr=+lasx --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-OFF
+; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s \
+; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT
+; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s \
+; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT
 
 define void @xvfmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfadd.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfadd.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfadd.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfadd.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfmadd_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfadd.d $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfmadd_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfadd.d $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -81,63 +35,25 @@ entry:
 }
 
 define void @xvfmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfmsub_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.d $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfmsub_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.d $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -149,67 +65,27 @@ entry:
 }
 
 define void @xvfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfadd.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfadd.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfadd.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfadd.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmadd_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfadd.d $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmadd_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfadd.d $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -222,67 +98,27 @@ entry:
 }
 
 define void @xvfnmadd_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmadd_d_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmadd_d_nsz:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmadd_d_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmadd_d_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmadd_d_nsz:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmadd_d_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmadd_d_nsz:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA32-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.d $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmadd_d_nsz:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA64-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.d $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -297,69 +133,27 @@ entry:
 
 ;; Check that xvfnmadd.d is not emitted.
 define void @not_xvfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_xvfnmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_xvfnmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_xvfnmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_xvfnmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_xvfnmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_xvfnmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: not_xvfnmadd_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA32-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.d $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: not_xvfnmadd_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA64-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.d $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -373,67 +167,27 @@ entry:
 }
 
 define void @xvfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmsub_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.d $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmsub_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.d $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -447,63 +201,25 @@ entry:
 }
 
 define void @xvfnmsub_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmsub_d_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmsub_d_nsz:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr2, $xr0
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmsub_d_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr2, $xr0
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmsub_d_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmsub_d_nsz:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr2, $xr0
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmsub_d_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr2, $xr0
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmsub_d_nsz:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.d $xr0, $xr2, $xr0
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmsub_d_nsz:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.d $xr0, $xr2, $xr0
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -517,65 +233,25 @@ entry:
 
 ;; Check that xvfnmsub.d is not emitted.
 define void @not_xvfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_xvfnmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_xvfnmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr2, $xr0
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_xvfnmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr2, $xr0
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_xvfnmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_xvfnmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.d $xr0, $xr2, $xr0
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_xvfnmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.d $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.d $xr0, $xr2, $xr0
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: not_xvfnmsub_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.d $xr0, $xr2, $xr0
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: not_xvfnmsub_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.d $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.d $xr0, $xr2, $xr0
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -588,59 +264,23 @@ entry:
 }
 
 define void @contract_xvfmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfmadd_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfmadd_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -652,59 +292,23 @@ entry:
 }
 
 define void @contract_xvfmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfmsub_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfmsub_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -716,59 +320,23 @@ entry:
 }
 
 define void @contract_xvfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfnmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfnmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfnmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfnmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfnmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfnmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfnmadd_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfnmadd_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -781,59 +349,23 @@ entry:
 }
 
 define void @contract_xvfnmadd_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfnmadd_d_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfnmadd_d_nsz:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfnmadd_d_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfnmadd_d_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfnmadd_d_nsz:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfnmadd_d_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfnmadd_d_nsz:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfnmadd_d_nsz:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -848,65 +380,25 @@ entry:
 
 ;; Check that xvfnmadd.d is not emitted.
 define void @not_contract_xvfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_contract_xvfnmadd_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_contract_xvfnmadd_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_contract_xvfnmadd_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_contract_xvfnmadd_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_contract_xvfnmadd_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_contract_xvfnmadd_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: not_contract_xvfnmadd_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA32-CONTRACT-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: not_contract_xvfnmadd_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA64-CONTRACT-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -920,59 +412,23 @@ entry:
 }
 
 define void @contract_xvfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfnmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfnmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfnmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfnmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfnmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfnmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfnmsub_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfnmsub_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -986,59 +442,23 @@ entry:
 }
 
 define void @contract_xvfnmsub_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfnmsub_d_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfnmsub_d_nsz:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfnmsub_d_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfnmsub_d_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfnmsub_d_nsz:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfnmsub_d_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfnmsub_d_nsz:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfnmsub_d_nsz:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -1052,65 +472,25 @@ entry:
 
 ;; Check that xvfnmsub.d is not emitted.
 define void @not_contract_xvfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_contract_xvfnmsub_d:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_contract_xvfnmsub_d:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_contract_xvfnmsub_d:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA32-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_contract_xvfnmsub_d:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_contract_xvfnmsub_d:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_contract_xvfnmsub_d:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.d $xr0, $xr0, 63
-; LA64-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: not_contract_xvfnmsub_d:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA32-CONTRACT-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: not_contract_xvfnmsub_d:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvbitrevi.d $xr0, $xr0, 63
+; LA64-CONTRACT-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -1123,59 +503,23 @@ entry:
 }
 
 define void @xvfmadd_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfmadd_d_contract:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfmadd_d_contract:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfmadd_d_contract:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfmadd_d_contract:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfmadd_d_contract:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfmadd_d_contract:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfmadd_d_contract:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfmadd_d_contract:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmadd.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -1187,59 +531,23 @@ entry:
 }
 
 define void @xvfmsub_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfmsub_d_contract:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfmsub_d_contract:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfmsub_d_contract:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfmsub_d_contract:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfmsub_d_contract:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfmsub_d_contract:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfmsub_d_contract:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfmsub_d_contract:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmsub.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -1251,59 +559,23 @@ entry:
 }
 
 define void @xvfnmadd_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmadd_d_contract:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmadd_d_contract:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmadd_d_contract:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmadd_d_contract:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmadd_d_contract:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmadd_d_contract:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmadd_d_contract:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmadd_d_contract:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmadd.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
@@ -1316,59 +588,23 @@ entry:
 }
 
 define void @xvfnmsub_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmsub_d_contract:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmsub_d_contract:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmsub_d_contract:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmsub_d_contract:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmsub_d_contract:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmsub_d_contract:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmsub_d_contract:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmsub_d_contract:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmsub.d $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x double>, ptr %a0
   %v1 = load <4 x double>, ptr %a1
diff --git a/llvm/test/CodeGen/LoongArch/lasx/fma-v8f32.ll b/llvm/test/CodeGen/LoongArch/lasx/fma-v8f32.ll
index 57b283801675b..a74dc007694b3 100644
--- a/llvm/test/CodeGen/LoongArch/lasx/fma-v8f32.ll
+++ b/llvm/test/CodeGen/LoongArch/lasx/fma-v8f32.ll
@@ -1,75 +1,29 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-FAST
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-ON
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT-OFF
-; RUN: llc --mtriple=loongarch64 --mattr=+lasx --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-FAST
-; RUN: llc --mtriple=loongarch64 --mattr=+lasx --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-ON
-; RUN: llc --mtriple=loongarch64 --mattr=+lasx --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT-OFF
+; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lasx < %s \
+; RUN:   | FileCheck %s --check-prefix=LA32-CONTRACT
+; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s \
+; RUN:   | FileCheck %s --check-prefix=LA64-CONTRACT
 
 define void @xvfmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfadd.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfadd.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfadd.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfadd.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfmadd_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfadd.s $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfmadd_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfadd.s $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -81,63 +35,25 @@ entry:
 }
 
 define void @xvfmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfmsub_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.s $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfmsub_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.s $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -149,67 +65,27 @@ entry:
 }
 
 define void @xvfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfadd.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfadd.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfadd.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfadd.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmadd_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfadd.s $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmadd_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfadd.s $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -222,67 +98,27 @@ entry:
 }
 
 define void @xvfnmadd_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmadd_s_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmadd_s_nsz:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmadd_s_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmadd_s_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmadd_s_nsz:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmadd_s_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmadd_s_nsz:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA32-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.s $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmadd_s_nsz:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA64-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.s $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -297,69 +133,27 @@ entry:
 
 ;; Check that fnmadd.s is not emitted.
 define void @not_xvfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_xvfnmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_xvfnmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_xvfnmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_xvfnmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_xvfnmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_xvfnmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: not_xvfnmadd_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA32-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.s $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: not_xvfnmadd_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA64-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.s $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -373,67 +167,27 @@ entry:
 }
 
 define void @xvfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr0, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmsub_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.s $xr0, $xr0, $xr2
+; LA32-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmsub_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.s $xr0, $xr0, $xr2
+; LA64-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -447,63 +201,25 @@ entry:
 }
 
 define void @xvfnmsub_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmsub_s_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmsub_s_nsz:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr2, $xr0
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmsub_s_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr2, $xr0
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmsub_s_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmsub_s_nsz:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr2, $xr0
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmsub_s_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr2, $xr0
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmsub_s_nsz:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.s $xr0, $xr2, $xr0
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmsub_s_nsz:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.s $xr0, $xr2, $xr0
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -517,65 +233,25 @@ entry:
 
 ;; Check that fnmsub.s is not emitted.
 define void @not_xvfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_xvfnmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_xvfnmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr2, $xr0
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_xvfnmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA32-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr2, $xr0
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_xvfnmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_xvfnmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-ON-NEXT:    xvfsub.s $xr0, $xr2, $xr0
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_xvfnmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmul.s $xr0, $xr0, $xr1
-; LA64-CONTRACT-OFF-NEXT:    xvfsub.s $xr0, $xr2, $xr0
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: not_xvfnmsub_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA32-CONTRACT-NEXT:    xvfsub.s $xr0, $xr2, $xr0
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: not_xvfnmsub_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmul.s $xr0, $xr0, $xr1
+; LA64-CONTRACT-NEXT:    xvfsub.s $xr0, $xr2, $xr0
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -588,59 +264,23 @@ entry:
 }
 
 define void @contract_xvfmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfmadd_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfmadd_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -652,59 +292,23 @@ entry:
 }
 
 define void @contract_xvfmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfmsub_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfmsub_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -716,59 +320,23 @@ entry:
 }
 
 define void @contract_xvfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfnmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfnmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfnmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfnmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfnmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfnmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfnmadd_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfnmadd_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -781,59 +349,23 @@ entry:
 }
 
 define void @contract_xvfnmadd_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfnmadd_s_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfnmadd_s_nsz:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfnmadd_s_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfnmadd_s_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfnmadd_s_nsz:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfnmadd_s_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfnmadd_s_nsz:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfnmadd_s_nsz:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -848,65 +380,25 @@ entry:
 
 ;; Check that fnmadd.s is not emitted.
 define void @not_contract_xvfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_contract_xvfnmadd_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_contract_xvfnmadd_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-ON-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_contract_xvfnmadd_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-OFF-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_contract_xvfnmadd_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_contract_xvfnmadd_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-ON-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_contract_xvfnmadd_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-OFF-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: not_contract_xvfnmadd_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA32-CONTRACT-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: not_contract_xvfnmadd_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA64-CONTRACT-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -920,59 +412,23 @@ entry:
 }
 
 define void @contract_xvfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfnmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfnmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfnmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfnmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfnmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfnmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfnmsub_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfnmsub_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -986,59 +442,23 @@ entry:
 }
 
 define void @contract_xvfnmsub_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: contract_xvfnmsub_s_nsz:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: contract_xvfnmsub_s_nsz:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: contract_xvfnmsub_s_nsz:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: contract_xvfnmsub_s_nsz:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: contract_xvfnmsub_s_nsz:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: contract_xvfnmsub_s_nsz:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: contract_xvfnmsub_s_nsz:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: contract_xvfnmsub_s_nsz:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -1052,65 +472,25 @@ entry:
 
 ;; Check that fnmsub.s is not emitted.
 define void @not_contract_xvfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: not_contract_xvfnmsub_s:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: not_contract_xvfnmsub_s:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-ON-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: not_contract_xvfnmsub_s:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA32-CONTRACT-OFF-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: not_contract_xvfnmsub_s:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: not_contract_xvfnmsub_s:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-ON-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: not_contract_xvfnmsub_s:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvbitrevi.w $xr0, $xr0, 31
-; LA64-CONTRACT-OFF-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: not_contract_xvfnmsub_s:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA32-CONTRACT-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: not_contract_xvfnmsub_s:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvbitrevi.w $xr0, $xr0, 31
+; LA64-CONTRACT-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -1123,59 +503,23 @@ entry:
 }
 
 define void @xvfmadd_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfmadd_s_contract:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfmadd_s_contract:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfmadd_s_contract:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfmadd_s_contract:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfmadd_s_contract:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfmadd_s_contract:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfmadd_s_contract:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfmadd_s_contract:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmadd.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -1187,59 +531,23 @@ entry:
 }
 
 define void @xvfmsub_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfmsub_s_contract:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfmsub_s_contract:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfmsub_s_contract:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfmsub_s_contract:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfmsub_s_contract:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfmsub_s_contract:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfmsub_s_contract:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfmsub_s_contract:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfmsub.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -1251,59 +559,23 @@ entry:
 }
 
 define void @xvfnmadd_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmadd_s_contract:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmadd_s_contract:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmadd_s_contract:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmadd_s_contract:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmadd_s_contract:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmadd_s_contract:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmadd_s_contract:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmadd_s_contract:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmadd.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
@@ -1316,59 +588,23 @@ entry:
 }
 
 define void @xvfnmsub_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; LA32-CONTRACT-FAST-LABEL: xvfnmsub_s_contract:
-; LA32-CONTRACT-FAST:       # %bb.0: # %entry
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-FAST-NEXT:    ret
-;
-; LA32-CONTRACT-ON-LABEL: xvfnmsub_s_contract:
-; LA32-CONTRACT-ON:       # %bb.0: # %entry
-; LA32-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-ON-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-ON-NEXT:    ret
-;
-; LA32-CONTRACT-OFF-LABEL: xvfnmsub_s_contract:
-; LA32-CONTRACT-OFF:       # %bb.0: # %entry
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA32-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA32-CONTRACT-OFF-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA32-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA32-CONTRACT-OFF-NEXT:    ret
-;
-; LA64-CONTRACT-FAST-LABEL: xvfnmsub_s_contract:
-; LA64-CONTRACT-FAST:       # %bb.0: # %entry
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-FAST-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-FAST-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-FAST-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-FAST-NEXT:    ret
-;
-; LA64-CONTRACT-ON-LABEL: xvfnmsub_s_contract:
-; LA64-CONTRACT-ON:       # %bb.0: # %entry
-; LA64-CONTRACT-ON-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-ON-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-ON-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-ON-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-ON-NEXT:    ret
-;
-; LA64-CONTRACT-OFF-LABEL: xvfnmsub_s_contract:
-; LA64-CONTRACT-OFF:       # %bb.0: # %entry
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr0, $a1, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr1, $a2, 0
-; LA64-CONTRACT-OFF-NEXT:    xvld $xr2, $a3, 0
-; LA64-CONTRACT-OFF-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
-; LA64-CONTRACT-OFF-NEXT:    xvst $xr0, $a0, 0
-; LA64-CONTRACT-OFF-NEXT:    ret
+; LA32-CONTRACT-LABEL: xvfnmsub_s_contract:
+; LA32-CONTRACT:       # %bb.0: # %entry
+; LA32-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA32-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA32-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA32-CONTRACT-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
+; LA32-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA32-CONTRACT-NEXT:    ret
+;
+; LA64-CONTRACT-LABEL: xvfnmsub_s_contract:
+; LA64-CONTRACT:       # %bb.0: # %entry
+; LA64-CONTRACT-NEXT:    xvld $xr0, $a1, 0
+; LA64-CONTRACT-NEXT:    xvld $xr1, $a2, 0
+; LA64-CONTRACT-NEXT:    xvld $xr2, $a3, 0
+; LA64-CONTRACT-NEXT:    xvfnmsub.s $xr0, $xr0, $xr1, $xr2
+; LA64-CONTRACT-NEXT:    xvst $xr0, $a0, 0
+; LA64-CONTRACT-NEXT:    ret
 entry:
   %v0 = load <8 x float>, ptr %a0
   %v1 = load <8 x float>, ptr %a1
diff --git a/llvm/test/CodeGen/LoongArch/lsx/fma-v2f64.ll b/llvm/test/CodeGen/LoongArch/lsx/fma-v2f64.ll
index 89442908b31be..987aee0dcf24a 100644
--- a/llvm/test/CodeGen/LoongArch/lsx/fma-v2f64.ll
+++ b/llvm/test/CodeGen/LoongArch/lsx/fma-v2f64.ll
@@ -1,46 +1,19 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-FAST
-; RUN: llc --mtriple=loongarch64 --mattr=+lsx --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-FAST
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-ON
-; RUN: llc --mtriple=loongarch64 --mattr=+lsx --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-ON
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-OFF
-; RUN: llc --mtriple=loongarch64 --mattr=+lsx --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-OFF
+; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx < %s \
+; RUN:   | FileCheck %s --check-prefix=CONTRACT
+; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s \
+; RUN:   | FileCheck %s --check-prefix=CONTRACT
 
 define void @vfmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfmadd_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfmadd_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfadd.d $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfmadd_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfadd.d $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfmadd_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.d $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfadd.d $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -52,34 +25,15 @@ entry:
 }
 
 define void @vfmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfmsub_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfmsub_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.d $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfmsub_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.d $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfmsub_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.d $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.d $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -91,36 +45,16 @@ entry:
 }
 
 define void @vfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmadd_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmadd_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfadd.d $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmadd_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfadd.d $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmadd_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.d $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfadd.d $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vbitrevi.d $vr0, $vr0, 63
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -133,36 +67,16 @@ entry:
 }
 
 define void @vfnmadd_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmadd_d_nsz:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmadd_d_nsz:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-ON-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.d $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmadd_d_nsz:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-OFF-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.d $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmadd_d_nsz:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vbitrevi.d $vr0, $vr0, 63
+; CONTRACT-NEXT:    vfmul.d $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.d $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -177,37 +91,16 @@ entry:
 
 ;; Check that vfnmadd.d is not emitted.
 define void @not_vfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: not_vfnmadd_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-FAST-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: not_vfnmadd_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-ON-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.d $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: not_vfnmadd_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-OFF-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.d $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: not_vfnmadd_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vbitrevi.d $vr0, $vr0, 63
+; CONTRACT-NEXT:    vfmul.d $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.d $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -221,36 +114,16 @@ entry:
 }
 
 define void @vfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmsub_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmsub_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.d $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmsub_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.d $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmsub_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.d $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.d $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vbitrevi.d $vr0, $vr0, 63
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -264,34 +137,15 @@ entry:
 }
 
 define void @vfnmsub_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmsub_d_nsz:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmsub_d_nsz:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.d $vr0, $vr2, $vr0
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmsub_d_nsz:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.d $vr0, $vr2, $vr0
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmsub_d_nsz:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.d $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.d $vr0, $vr2, $vr0
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -305,35 +159,15 @@ entry:
 
 ;; Check that vfnmsub.d is not emitted.
 define void @not_vfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: not_vfnmsub_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-FAST-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: not_vfnmsub_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.d $vr0, $vr2, $vr0
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: not_vfnmsub_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.d $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.d $vr0, $vr2, $vr0
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: not_vfnmsub_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.d $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.d $vr0, $vr2, $vr0
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -346,32 +180,14 @@ entry:
 }
 
 define void @contract_vfmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfmadd_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfmadd_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfmadd_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfmadd_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -383,32 +199,14 @@ entry:
 }
 
 define void @contract_vfmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfmsub_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfmsub_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfmsub_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfmsub_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -420,32 +218,14 @@ entry:
 }
 
 define void @contract_vfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfnmadd_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfnmadd_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfnmadd_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfnmadd_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -458,32 +238,14 @@ entry:
 }
 
 define void @contract_vfnmadd_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfnmadd_d_nsz:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfnmadd_d_nsz:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfnmadd_d_nsz:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfnmadd_d_nsz:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -498,35 +260,15 @@ entry:
 
 ;; Check that vfnmadd.d is not emitted.
 define void @not_contract_vfnmadd_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: not_contract_vfnmadd_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-FAST-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: not_contract_vfnmadd_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-ON-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: not_contract_vfnmadd_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-OFF-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: not_contract_vfnmadd_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vbitrevi.d $vr0, $vr0, 63
+; CONTRACT-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -540,32 +282,14 @@ entry:
 }
 
 define void @contract_vfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfnmsub_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfnmsub_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfnmsub_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfnmsub_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -579,32 +303,14 @@ entry:
 }
 
 define void @contract_vfnmsub_d_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfnmsub_d_nsz:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfnmsub_d_nsz:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfnmsub_d_nsz:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfnmsub_d_nsz:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -618,35 +324,15 @@ entry:
 
 ;; Check that vfnmsub.d is not emitted.
 define void @not_contract_vfnmsub_d(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: not_contract_vfnmsub_d:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-FAST-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: not_contract_vfnmsub_d:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-ON-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: not_contract_vfnmsub_d:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vbitrevi.d $vr0, $vr0, 63
-; CONTRACT-OFF-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: not_contract_vfnmsub_d:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vbitrevi.d $vr0, $vr0, 63
+; CONTRACT-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -659,32 +345,14 @@ entry:
 }
 
 define void @vfmadd_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfmadd_d_contract:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfmadd_d_contract:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfmadd_d_contract:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfmadd_d_contract:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmadd.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -696,32 +364,14 @@ entry:
 }
 
 define void @vfmsub_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfmsub_d_contract:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfmsub_d_contract:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfmsub_d_contract:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfmsub_d_contract:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmsub.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -733,32 +383,14 @@ entry:
 }
 
 define void @vfnmadd_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmadd_d_contract:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmadd_d_contract:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmadd_d_contract:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmadd_d_contract:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmadd.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
@@ -771,32 +403,14 @@ entry:
 }
 
 define void @vfnmsub_d_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmsub_d_contract:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmsub_d_contract:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmsub_d_contract:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmsub_d_contract:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmsub.d $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <2 x double>, ptr %a0
   %v1 = load <2 x double>, ptr %a1
diff --git a/llvm/test/CodeGen/LoongArch/lsx/fma-v4f32.ll b/llvm/test/CodeGen/LoongArch/lsx/fma-v4f32.ll
index 0e5cd3cdcd35a..4432388f54cc5 100644
--- a/llvm/test/CodeGen/LoongArch/lsx/fma-v4f32.ll
+++ b/llvm/test/CodeGen/LoongArch/lsx/fma-v4f32.ll
@@ -1,46 +1,19 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-FAST
-; RUN: llc --mtriple=loongarch64 --mattr=+lsx --fp-contract=fast < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-FAST
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-ON
-; RUN: llc --mtriple=loongarch64 --mattr=+lsx --fp-contract=on < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-ON
-; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-OFF
-; RUN: llc --mtriple=loongarch64 --mattr=+lsx --fp-contract=off < %s \
-; RUN:   | FileCheck %s --check-prefix=CONTRACT-OFF
+; RUN: llc --mtriple=loongarch32 --mattr=+32s,+lsx < %s \
+; RUN:   | FileCheck %s --check-prefix=CONTRACT
+; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s \
+; RUN:   | FileCheck %s --check-prefix=CONTRACT
 
 define void @vfmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfmadd_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfmadd_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfadd.s $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfmadd_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfadd.s $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfmadd_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.s $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfadd.s $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -52,34 +25,15 @@ entry:
 }
 
 define void @vfmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfmsub_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfmsub_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfmsub_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfmsub_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.s $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.s $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -91,36 +45,16 @@ entry:
 }
 
 define void @vfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmadd_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmadd_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfadd.s $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmadd_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfadd.s $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmadd_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.s $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfadd.s $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vbitrevi.w $vr0, $vr0, 31
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -133,36 +67,16 @@ entry:
 }
 
 define void @vfnmadd_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmadd_s_nsz:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmadd_s_nsz:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmadd_s_nsz:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmadd_s_nsz:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vbitrevi.w $vr0, $vr0, 31
+; CONTRACT-NEXT:    vfmul.s $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.s $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -177,37 +91,16 @@ entry:
 
 ;; Check that vfnmadd.s is not emitted.
 define void @not_vfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: not_vfnmadd_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: not_vfnmadd_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: not_vfnmadd_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: not_vfnmadd_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vbitrevi.w $vr0, $vr0, 31
+; CONTRACT-NEXT:    vfmul.s $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.s $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -221,36 +114,16 @@ entry:
 }
 
 define void @vfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmsub_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmsub_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr0, $vr2
-; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmsub_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr0, $vr2
-; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmsub_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.s $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.s $vr0, $vr0, $vr2
+; CONTRACT-NEXT:    vbitrevi.w $vr0, $vr0, 31
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -264,34 +137,15 @@ entry:
 }
 
 define void @vfnmsub_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmsub_s_nsz:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmsub_s_nsz:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr2, $vr0
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmsub_s_nsz:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr2, $vr0
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmsub_s_nsz:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.s $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.s $vr0, $vr2, $vr0
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -305,35 +159,15 @@ entry:
 
 ;; Check that vfnmsub.s is not emitted.
 define void @not_vfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: not_vfnmsub_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: not_vfnmsub_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-ON-NEXT:    vfsub.s $vr0, $vr2, $vr0
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: not_vfnmsub_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmul.s $vr0, $vr0, $vr1
-; CONTRACT-OFF-NEXT:    vfsub.s $vr0, $vr2, $vr0
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: not_vfnmsub_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmul.s $vr0, $vr0, $vr1
+; CONTRACT-NEXT:    vfsub.s $vr0, $vr2, $vr0
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -346,32 +180,14 @@ entry:
 }
 
 define void @contract_vfmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfmadd_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfmadd_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfmadd_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfmadd_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -383,32 +199,14 @@ entry:
 }
 
 define void @contract_vfmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfmsub_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfmsub_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfmsub_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfmsub_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -420,32 +218,14 @@ entry:
 }
 
 define void @contract_vfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfnmadd_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfnmadd_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfnmadd_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfnmadd_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -458,32 +238,14 @@ entry:
 }
 
 define void @contract_vfnmadd_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfnmadd_s_nsz:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfnmadd_s_nsz:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfnmadd_s_nsz:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfnmadd_s_nsz:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -498,35 +260,15 @@ entry:
 
 ;; Check that vfnmadd.s is not emitted.
 define void @not_contract_vfnmadd_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: not_contract_vfnmadd_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: not_contract_vfnmadd_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-ON-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: not_contract_vfnmadd_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-OFF-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: not_contract_vfnmadd_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vbitrevi.w $vr0, $vr0, 31
+; CONTRACT-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -540,32 +282,14 @@ entry:
 }
 
 define void @contract_vfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfnmsub_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfnmsub_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfnmsub_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfnmsub_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -579,32 +303,14 @@ entry:
 }
 
 define void @contract_vfnmsub_s_nsz(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: contract_vfnmsub_s_nsz:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: contract_vfnmsub_s_nsz:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: contract_vfnmsub_s_nsz:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: contract_vfnmsub_s_nsz:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -618,35 +324,15 @@ entry:
 
 ;; Check that vfnmsub.s is not emitted.
 define void @not_contract_vfnmsub_s(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: not_contract_vfnmsub_s:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: not_contract_vfnmsub_s:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-ON-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: not_contract_vfnmsub_s:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vbitrevi.w $vr0, $vr0, 31
-; CONTRACT-OFF-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: not_contract_vfnmsub_s:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vbitrevi.w $vr0, $vr0, 31
+; CONTRACT-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -659,32 +345,14 @@ entry:
 }
 
 define void @vfmadd_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfmadd_s_contract:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfmadd_s_contract:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfmadd_s_contract:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfmadd_s_contract:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmadd.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -696,32 +364,14 @@ entry:
 }
 
 define void @vfmsub_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfmsub_s_contract:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfmsub_s_contract:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfmsub_s_contract:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfmsub_s_contract:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfmsub.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -733,32 +383,14 @@ entry:
 }
 
 define void @vfnmadd_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmadd_s_contract:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmadd_s_contract:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmadd_s_contract:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmadd_s_contract:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmadd.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
@@ -771,32 +403,14 @@ entry:
 }
 
 define void @vfnmsub_s_contract(ptr %res, ptr %a0, ptr %a1, ptr %a2) nounwind {
-; CONTRACT-FAST-LABEL: vfnmsub_s_contract:
-; CONTRACT-FAST:       # %bb.0: # %entry
-; CONTRACT-FAST-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-FAST-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-FAST-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-FAST-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-FAST-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-FAST-NEXT:    ret
-;
-; CONTRACT-ON-LABEL: vfnmsub_s_contract:
-; CONTRACT-ON:       # %bb.0: # %entry
-; CONTRACT-ON-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-ON-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-ON-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-ON-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-ON-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-ON-NEXT:    ret
-;
-; CONTRACT-OFF-LABEL: vfnmsub_s_contract:
-; CONTRACT-OFF:       # %bb.0: # %entry
-; CONTRACT-OFF-NEXT:    vld $vr0, $a1, 0
-; CONTRACT-OFF-NEXT:    vld $vr1, $a2, 0
-; CONTRACT-OFF-NEXT:    vld $vr2, $a3, 0
-; CONTRACT-OFF-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
-; CONTRACT-OFF-NEXT:    vst $vr0, $a0, 0
-; CONTRACT-OFF-NEXT:    ret
+; CONTRACT-LABEL: vfnmsub_s_contract:
+; CONTRACT:       # %bb.0: # %entry
+; CONTRACT-NEXT:    vld $vr0, $a1, 0
+; CONTRACT-NEXT:    vld $vr1, $a2, 0
+; CONTRACT-NEXT:    vld $vr2, $a3, 0
+; CONTRACT-NEXT:    vfnmsub.s $vr0, $vr0, $vr1, $vr2
+; CONTRACT-NEXT:    vst $vr0, $a0, 0
+; CONTRACT-NEXT:    ret
 entry:
   %v0 = load <4 x float>, ptr %a0
   %v1 = load <4 x float>, ptr %a1
diff --git a/llvm/test/CodeGen/PowerPC/a2-fp-basic.ll b/llvm/test/CodeGen/PowerPC/a2-fp-basic.ll
index 200b6f44f8416..e1d771b0c1e46 100644
--- a/llvm/test/CodeGen/PowerPC/a2-fp-basic.ll
+++ b/llvm/test/CodeGen/PowerPC/a2-fp-basic.ll
@@ -1,4 +1,4 @@
-; RUN: llc -verify-machineinstrs < %s -mtriple=ppc64-- -mcpu=a2 -fp-contract=fast | FileCheck %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=ppc64-- -mcpu=a2 | FileCheck %s
 
 %0 = type { double, double }
 
@@ -10,17 +10,17 @@ entry:
   %b.real = load double, ptr %b
   %b.imagp = getelementptr inbounds %0, ptr %b, i32 0, i32 1
   %b.imag = load double, ptr %b.imagp
-  %mul.rl = fmul double %a.real, %b.real
-  %mul.rr = fmul double %a.imag, %b.imag
-  %mul.r = fsub double %mul.rl, %mul.rr
-  %mul.il = fmul double %a.imag, %b.real
-  %mul.ir = fmul double %a.real, %b.imag
-  %mul.i = fadd double %mul.il, %mul.ir
+  %mul.rl = fmul contract double %a.real, %b.real
+  %mul.rr = fmul contract double %a.imag, %b.imag
+  %mul.r = fsub contract double %mul.rl, %mul.rr
+  %mul.il = fmul contract double %a.imag, %b.real
+  %mul.ir = fmul contract double %a.real, %b.imag
+  %mul.i = fadd contract double %mul.il, %mul.ir
   %c.real = load double, ptr %c
   %c.imagp = getelementptr inbounds %0, ptr %c, i32 0, i32 1
   %c.imag = load double, ptr %c.imagp
-  %add.r = fadd double %mul.r, %c.real
-  %add.i = fadd double %mul.i, %c.imag
+  %add.r = fadd contract double %mul.r, %c.real
+  %add.i = fadd contract double %mul.i, %c.imag
   %imag = getelementptr inbounds %0, ptr %agg.result, i32 0, i32 1
   store double %add.r, ptr %agg.result
   store double %add.i, ptr %imag
diff --git a/llvm/test/CodeGen/PowerPC/fma-assoc.ll b/llvm/test/CodeGen/PowerPC/fma-assoc.ll
index c59d7414e628b..c2004f79219c0 100644
--- a/llvm/test/CodeGen/PowerPC/fma-assoc.ll
+++ b/llvm/test/CodeGen/PowerPC/fma-assoc.ll
@@ -1,13 +1,13 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -fp-contract=fast \
+; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- \
 ; RUN:   -mcpu=ppc -mattr=-vsx -disable-ppc-vsx-fma-mutation=false | FileCheck %s
-; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-ibm-aix-xcoff -fp-contract=fast \
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc-ibm-aix-xcoff \
 ; RUN:   -mcpu=ppc -mattr=-vsx -disable-ppc-vsx-fma-mutation=false | FileCheck %s
 ; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu \
-; RUN:   -fp-contract=fast -mattr=+vsx -disable-ppc-vsx-fma-mutation=false \
+; RUN:   -mattr=+vsx -disable-ppc-vsx-fma-mutation=false \
 ; RUN:   -mcpu=pwr7 | FileCheck -check-prefix=CHECK-VSX %s
 ; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-ibm-aix-xcoff \
-; RUN:   -fp-contract=fast -mattr=+vsx -disable-ppc-vsx-fma-mutation=false \
+; RUN:   -mattr=+vsx -disable-ppc-vsx-fma-mutation=false \
 ; RUN:   -mcpu=pwr7 -vec-extabi | FileCheck -check-prefix=CHECK-VSX %s
 ; RUN: llc -verify-machineinstrs < %s -mtriple=powerpcspe-linux-unknown-gnu \
 ; RUN:   | FileCheck -check-prefix=CHECK-SPE %s
@@ -41,10 +41,10 @@ define double @test_FMADD_ASSOC1(double %A, double %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul double %A, %B         ; <double> [#uses=1]
-  %G = fmul double %C, %D         ; <double> [#uses=1]
-  %H = fadd double %F, %G         ; <double> [#uses=1]
-  %I = fadd double %H, %E         ; <double> [#uses=1]
+  %F = fmul contract double %A, %B         ; <double> [#uses=1]
+  %G = fmul contract double %C, %D         ; <double> [#uses=1]
+  %H = fadd contract double %F, %G         ; <double> [#uses=1]
+  %I = fadd contract double %H, %E         ; <double> [#uses=1]
   ret double %I
 }
 
@@ -77,10 +77,10 @@ define double @test_FMADD_ASSOC2(double %A, double %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul double %A, %B         ; <double> [#uses=1]
-  %G = fmul double %C, %D         ; <double> [#uses=1]
-  %H = fadd double %F, %G         ; <double> [#uses=1]
-  %I = fadd double %E, %H         ; <double> [#uses=1]
+  %F = fmul contract double %A, %B         ; <double> [#uses=1]
+  %G = fmul contract double %C, %D         ; <double> [#uses=1]
+  %H = fadd contract double %F, %G         ; <double> [#uses=1]
+  %I = fadd contract double %E, %H         ; <double> [#uses=1]
   ret double %I
 }
 
@@ -113,10 +113,10 @@ define double @test_FMSUB_ASSOC1(double %A, double %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul double %A, %B         ; <double> [#uses=1]
-  %G = fmul double %C, %D         ; <double> [#uses=1]
-  %H = fadd double %F, %G         ; <double> [#uses=1]
-  %I = fsub double %H, %E         ; <double> [#uses=1]
+  %F = fmul contract double %A, %B         ; <double> [#uses=1]
+  %G = fmul contract double %C, %D         ; <double> [#uses=1]
+  %H = fadd contract double %F, %G         ; <double> [#uses=1]
+  %I = fsub contract double %H, %E         ; <double> [#uses=1]
   ret double %I
 }
 
@@ -149,10 +149,10 @@ define double @test_FMSUB_ASSOC2(double %A, double %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul double %A, %B         ; <double> [#uses=1]
-  %G = fmul double %C, %D         ; <double> [#uses=1]
-  %H = fadd double %F, %G         ; <double> [#uses=1]
-  %I = fsub double %E, %H         ; <double> [#uses=1]
+  %F = fmul contract double %A, %B         ; <double> [#uses=1]
+  %G = fmul contract double %C, %D         ; <double> [#uses=1]
+  %H = fadd contract double %F, %G         ; <double> [#uses=1]
+  %I = fsub contract double %E, %H         ; <double> [#uses=1]
   ret double %I
 }
 
@@ -182,11 +182,11 @@ define double @test_FMADD_ASSOC_EXT1(float %A, float %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul float %A, %B         ; <float> [#uses=1]
+  %F = fmul contract float %A, %B         ; <float> [#uses=1]
   %G = fpext float %F to double   ; <double> [#uses=1]
-  %H = fmul double %C, %D         ; <double> [#uses=1]
-  %I = fadd double %H, %G         ; <double> [#uses=1]
-  %J = fadd double %I, %E         ; <double> [#uses=1]
+  %H = fmul contract double %C, %D         ; <double> [#uses=1]
+  %I = fadd contract double %H, %G         ; <double> [#uses=1]
+  %J = fadd contract double %I, %E         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -215,11 +215,11 @@ define double @test_FMADD_ASSOC_EXT2(float %A, float %B, float %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  float %D, double %E) {
-  %F = fmul float %A, %B         ; <float> [#uses=1]
-  %G = fmul float %C, %D         ; <float> [#uses=1]
-  %H = fadd float %F, %G         ; <float> [#uses=1]
+  %F = fmul contract float %A, %B         ; <float> [#uses=1]
+  %G = fmul contract float %C, %D         ; <float> [#uses=1]
+  %H = fadd contract float %F, %G         ; <float> [#uses=1]
   %I = fpext float %H to double   ; <double> [#uses=1]
-  %J = fadd double %I, %E         ; <double> [#uses=1]
+  %J = fadd contract double %I, %E         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -249,11 +249,11 @@ define double @test_FMADD_ASSOC_EXT3(float %A, float %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul float %A, %B          ; <float> [#uses=1]
+  %F = fmul contract float %A, %B          ; <float> [#uses=1]
   %G = fpext float %F to double   ; <double> [#uses=1]
-  %H = fmul double %C, %D         ; <double> [#uses=1]
-  %I = fadd double %H, %G         ; <double> [#uses=1]
-  %J = fadd double %E, %I         ; <double> [#uses=1]
+  %H = fmul contract double %C, %D         ; <double> [#uses=1]
+  %I = fadd contract double %H, %G         ; <double> [#uses=1]
+  %J = fadd contract double %E, %I         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -282,11 +282,11 @@ define double @test_FMADD_ASSOC_EXT4(float %A, float %B, float %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  float %D, double %E) {
-  %F = fmul float %A, %B          ; <float> [#uses=1]
-  %G = fmul float %C, %D          ; <float> [#uses=1]
-  %H = fadd float %F, %G          ; <float> [#uses=1]
+  %F = fmul contract float %A, %B          ; <float> [#uses=1]
+  %G = fmul contract float %C, %D          ; <float> [#uses=1]
+  %H = fadd contract float %F, %G          ; <float> [#uses=1]
   %I = fpext float %H to double   ; <double> [#uses=1]
-  %J = fadd double %E, %I         ; <double> [#uses=1]
+  %J = fadd contract double %E, %I         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -318,11 +318,11 @@ define double @test_FMSUB_ASSOC_EXT1(float %A, float %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul float %A, %B          ; <float> [#uses=1]
+  %F = fmul contract float %A, %B          ; <float> [#uses=1]
   %G = fpext float %F to double   ; <double> [#uses=1]
-  %H = fmul double %C, %D         ; <double> [#uses=1]
-  %I = fadd double %H, %G         ; <double> [#uses=1]
-  %J = fsub double %I, %E         ; <double> [#uses=1]
+  %H = fmul contract double %C, %D         ; <double> [#uses=1]
+  %I = fadd contract double %H, %G         ; <double> [#uses=1]
+  %J = fsub contract double %I, %E         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -352,11 +352,11 @@ define double @test_FMSUB_ASSOC_EXT2(float %A, float %B, float %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  float %D, double %E) {
-  %F = fmul float %A, %B          ; <float> [#uses=1]
-  %G = fmul float %C, %D          ; <float> [#uses=1]
-  %H = fadd float %F, %G          ; <float> [#uses=1]
+  %F = fmul contract float %A, %B          ; <float> [#uses=1]
+  %G = fmul contract float %C, %D          ; <float> [#uses=1]
+  %H = fadd contract float %F, %G          ; <float> [#uses=1]
   %I = fpext float %H to double   ; <double> [#uses=1]
-  %J = fsub double %I, %E         ; <double> [#uses=1]
+  %J = fsub contract double %I, %E         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -388,11 +388,11 @@ define double @test_FMSUB_ASSOC_EXT3(float %A, float %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul float %A, %B          ; <float> [#uses=1]
+  %F = fmul contract float %A, %B          ; <float> [#uses=1]
   %G = fpext float %F to double   ; <double> [#uses=1]
-  %H = fmul double %C, %D         ; <double> [#uses=1]
-  %I = fadd double %H, %G         ; <double> [#uses=1]
-  %J = fsub double %E, %I         ; <double> [#uses=1]
+  %H = fmul contract double %C, %D         ; <double> [#uses=1]
+  %I = fadd contract double %H, %G         ; <double> [#uses=1]
+  %J = fsub contract double %E, %I         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -422,11 +422,11 @@ define double @test_FMSUB_ASSOC_EXT4(float %A, float %B, float %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  float %D, double %E) {
-  %F = fmul float %A, %B          ; <float> [#uses=1]
-  %G = fmul float %C, %D          ; <float> [#uses=1]
-  %H = fadd float %F, %G          ; <float> [#uses=1]
+  %F = fmul contract float %A, %B          ; <float> [#uses=1]
+  %G = fmul contract float %C, %D          ; <float> [#uses=1]
+  %H = fadd contract float %F, %G          ; <float> [#uses=1]
   %I = fpext float %H to double   ; <double> [#uses=1]
-  %J = fsub double %E, %I         ; <double> [#uses=1]
+  %J = fsub contract double %E, %I         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -458,10 +458,10 @@ define double @test_reassoc_FMADD_ASSOC1(double %A, double %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul reassoc double %A, %B         ; <double> [#uses=1]
-  %G = fmul reassoc double %C, %D         ; <double> [#uses=1]
-  %H = fadd reassoc double %F, %G         ; <double> [#uses=1]
-  %I = fadd reassoc double %H, %E         ; <double> [#uses=1]
+  %F = fmul contract reassoc double %A, %B         ; <double> [#uses=1]
+  %G = fmul contract reassoc double %C, %D         ; <double> [#uses=1]
+  %H = fadd contract reassoc double %F, %G         ; <double> [#uses=1]
+  %I = fadd contract reassoc double %H, %E         ; <double> [#uses=1]
   ret double %I
 }
 
@@ -493,27 +493,25 @@ define double @test_reassoc_FMADD_ASSOC2(double %A, double %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul reassoc double %A, %B         ; <double> [#uses=1]
-  %G = fmul reassoc double %C, %D         ; <double> [#uses=1]
-  %H = fadd reassoc double %F, %G         ; <double> [#uses=1]
-  %I = fadd reassoc double %E, %H         ; <double> [#uses=1]
+  %F = fmul contract reassoc double %A, %B         ; <double> [#uses=1]
+  %G = fmul contract reassoc double %C, %D         ; <double> [#uses=1]
+  %H = fadd contract reassoc double %F, %G         ; <double> [#uses=1]
+  %I = fadd contract reassoc double %E, %H         ; <double> [#uses=1]
   ret double %I
 }
 
-; FIXME: -ffp-contract=fast does NOT work here?
 define double @test_reassoc_FMSUB_ASSOC1(double %A, double %B, double %C,
 ; CHECK-LABEL: test_reassoc_FMSUB_ASSOC1:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    fmul 0, 3, 4
-; CHECK-NEXT:    fmadd 0, 1, 2, 0
-; CHECK-NEXT:    fsub 1, 0, 5
+; CHECK-NEXT:    fmsub 0, 3, 4, 5
+; CHECK-NEXT:    fmadd 1, 1, 2, 0
 ; CHECK-NEXT:    blr
 ;
 ; CHECK-VSX-LABEL: test_reassoc_FMSUB_ASSOC1:
 ; CHECK-VSX:       # %bb.0:
-; CHECK-VSX-NEXT:    xsmuldp 0, 3, 4
-; CHECK-VSX-NEXT:    xsmaddadp 0, 1, 2
-; CHECK-VSX-NEXT:    xssubdp 1, 0, 5
+; CHECK-VSX-NEXT:    xsmsubmdp 3, 4, 5
+; CHECK-VSX-NEXT:    xsmaddadp 3, 1, 2
+; CHECK-VSX-NEXT:    fmr 1, 3
 ; CHECK-VSX-NEXT:    blr
 ;
 ; CHECK-SPE-LABEL: test_reassoc_FMSUB_ASSOC1:
@@ -530,10 +528,10 @@ define double @test_reassoc_FMSUB_ASSOC1(double %A, double %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul reassoc double %A, %B         ; <double> [#uses=1]
-  %G = fmul reassoc double %C, %D         ; <double> [#uses=1]
-  %H = fadd reassoc double %F, %G         ; <double> [#uses=1]
-  %I = fsub reassoc double %H, %E         ; <double> [#uses=1]
+  %F = fmul contract reassoc double %A, %B         ; <double> [#uses=1]
+  %G = fmul contract reassoc double %C, %D         ; <double> [#uses=1]
+  %H = fadd contract reassoc double %F, %G         ; <double> [#uses=1]
+  %I = fsub contract reassoc double %H, %E         ; <double> [#uses=1]
   ret double %I
 }
 
@@ -602,26 +600,25 @@ define double @test_reassoc_FMSUB_ASSOC2(double %A, double %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul reassoc double %A, %B         ; <double> [#uses=1]
-  %G = fmul reassoc double %C, %D         ; <double> [#uses=1]
-  %H = fadd reassoc double %F, %G         ; <double> [#uses=1]
-  %I = fsub reassoc double %E, %H         ; <double> [#uses=1]
+  %F = fmul contract reassoc double %A, %B         ; <double> [#uses=1]
+  %G = fmul contract reassoc double %C, %D         ; <double> [#uses=1]
+  %H = fadd contract reassoc double %F, %G         ; <double> [#uses=1]
+  %I = fsub contract reassoc double %E, %H         ; <double> [#uses=1]
   ret double %I
 }
 
 define double @test_fast_FMSUB_ASSOC2(double %A, double %B, double %C,
 ; CHECK-LABEL: test_fast_FMSUB_ASSOC2:
 ; CHECK:       # %bb.0:
-; CHECK-NEXT:    fmul 0, 3, 4
-; CHECK-NEXT:    fmadd 0, 1, 2, 0
-; CHECK-NEXT:    fsub 1, 5, 0
+; CHECK-NEXT:    fnmsub 0, 3, 4, 5
+; CHECK-NEXT:    fnmsub 1, 1, 2, 0
 ; CHECK-NEXT:    blr
 ;
 ; CHECK-VSX-LABEL: test_fast_FMSUB_ASSOC2:
 ; CHECK-VSX:       # %bb.0:
-; CHECK-VSX-NEXT:    xsmuldp 0, 3, 4
-; CHECK-VSX-NEXT:    xsmaddadp 0, 1, 2
-; CHECK-VSX-NEXT:    xssubdp 1, 5, 0
+; CHECK-VSX-NEXT:    xsnmsubmdp 3, 4, 5
+; CHECK-VSX-NEXT:    xsnmsubadp 3, 1, 2
+; CHECK-VSX-NEXT:    fmr 1, 3
 ; CHECK-VSX-NEXT:    blr
 ;
 ; CHECK-SPE-LABEL: test_fast_FMSUB_ASSOC2:
@@ -638,10 +635,10 @@ define double @test_fast_FMSUB_ASSOC2(double %A, double %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul reassoc double %A, %B         ; <double> [#uses=1]
-  %G = fmul reassoc double %C, %D         ; <double> [#uses=1]
-  %H = fadd reassoc double %F, %G         ; <double> [#uses=1]
-  %I = fsub reassoc nsz double %E, %H         ; <double> [#uses=1]
+  %F = fmul contract reassoc double %A, %B         ; <double> [#uses=1]
+  %G = fmul contract reassoc double %C, %D         ; <double> [#uses=1]
+  %H = fadd contract reassoc double %F, %G         ; <double> [#uses=1]
+  %I = fsub contract reassoc nsz double %E, %H         ; <double> [#uses=1]
   ret double %I
 }
 
@@ -671,11 +668,11 @@ define double @test_reassoc_FMADD_ASSOC_EXT1(float %A, float %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul reassoc float %A, %B         ; <float> [#uses=1]
+  %F = fmul contract reassoc float %A, %B         ; <float> [#uses=1]
   %G = fpext float %F to double   ; <double> [#uses=1]
-  %H = fmul reassoc double %C, %D         ; <double> [#uses=1]
-  %I = fadd reassoc double %H, %G         ; <double> [#uses=1]
-  %J = fadd reassoc double %I, %E         ; <double> [#uses=1]
+  %H = fmul contract reassoc double %C, %D         ; <double> [#uses=1]
+  %I = fadd contract reassoc double %H, %G         ; <double> [#uses=1]
+  %J = fadd contract reassoc double %I, %E         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -704,11 +701,11 @@ define double @test_reassoc_FMADD_ASSOC_EXT2(float %A, float %B, float %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  float %D, double %E) {
-  %F = fmul reassoc float %A, %B         ; <float> [#uses=1]
-  %G = fmul reassoc float %C, %D         ; <float> [#uses=1]
-  %H = fadd reassoc float %F, %G         ; <float> [#uses=1]
+  %F = fmul contract reassoc float %A, %B         ; <float> [#uses=1]
+  %G = fmul contract reassoc float %C, %D         ; <float> [#uses=1]
+  %H = fadd contract reassoc float %F, %G         ; <float> [#uses=1]
   %I = fpext float %H to double   ; <double> [#uses=1]
-  %J = fadd reassoc double %I, %E         ; <double> [#uses=1]
+  %J = fadd contract reassoc double %I, %E         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -738,11 +735,11 @@ define double @test_reassoc_FMADD_ASSOC_EXT3(float %A, float %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul reassoc float %A, %B          ; <float> [#uses=1]
+  %F = fmul contract reassoc float %A, %B          ; <float> [#uses=1]
   %G = fpext float %F to double   ; <double> [#uses=1]
-  %H = fmul reassoc double %C, %D         ; <double> [#uses=1]
-  %I = fadd reassoc double %H, %G         ; <double> [#uses=1]
-  %J = fadd reassoc double %E, %I         ; <double> [#uses=1]
+  %H = fmul contract reassoc double %C, %D         ; <double> [#uses=1]
+  %I = fadd contract reassoc double %H, %G         ; <double> [#uses=1]
+  %J = fadd contract reassoc double %E, %I         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -771,11 +768,11 @@ define double @test_reassoc_FMADD_ASSOC_EXT4(float %A, float %B, float %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  float %D, double %E) {
-  %F = fmul reassoc float %A, %B          ; <float> [#uses=1]
-  %G = fmul reassoc float %C, %D          ; <float> [#uses=1]
-  %H = fadd reassoc float %F, %G          ; <float> [#uses=1]
+  %F = fmul contract reassoc float %A, %B          ; <float> [#uses=1]
+  %G = fmul contract reassoc float %C, %D          ; <float> [#uses=1]
+  %H = fadd contract reassoc float %F, %G          ; <float> [#uses=1]
   %I = fpext float %H to double   ; <double> [#uses=1]
-  %J = fadd reassoc double %E, %I         ; <double> [#uses=1]
+  %J = fadd contract reassoc double %E, %I         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -805,11 +802,11 @@ define double @test_reassoc_FMSUB_ASSOC_EXT1(float %A, float %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul reassoc float %A, %B          ; <float> [#uses=1]
+  %F = fmul contract reassoc float %A, %B          ; <float> [#uses=1]
   %G = fpext float %F to double   ; <double> [#uses=1]
-  %H = fmul reassoc double %C, %D         ; <double> [#uses=1]
-  %I = fadd reassoc double %H, %G         ; <double> [#uses=1]
-  %J = fsub reassoc double %I, %E         ; <double> [#uses=1]
+  %H = fmul contract reassoc double %C, %D         ; <double> [#uses=1]
+  %I = fadd contract reassoc double %H, %G         ; <double> [#uses=1]
+  %J = fsub contract reassoc double %I, %E         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -838,11 +835,11 @@ define double @test_reassoc_FMSUB_ASSOC_EXT2(float %A, float %B, float %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  float %D, double %E) {
-  %F = fmul reassoc float %A, %B          ; <float> [#uses=1]
-  %G = fmul reassoc float %C, %D          ; <float> [#uses=1]
-  %H = fadd reassoc float %F, %G          ; <float> [#uses=1]
+  %F = fmul contract reassoc float %A, %B          ; <float> [#uses=1]
+  %G = fmul contract reassoc float %C, %D          ; <float> [#uses=1]
+  %H = fadd contract reassoc float %F, %G          ; <float> [#uses=1]
   %I = fpext float %H to double   ; <double> [#uses=1]
-  %J = fsub reassoc double %I, %E         ; <double> [#uses=1]
+  %J = fsub contract reassoc double %I, %E         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -876,11 +873,11 @@ define double @test_reassoc_FMSUB_ASSOC_EXT3(float %A, float %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  double %D, double %E) {
-  %F = fmul reassoc float %A, %B          ; <float> [#uses=1]
+  %F = fmul contract reassoc float %A, %B          ; <float> [#uses=1]
   %G = fpext float %F to double   ; <double> [#uses=1]
-  %H = fmul reassoc double %C, %D         ; <double> [#uses=1]
-  %I = fadd reassoc double %H, %G         ; <double> [#uses=1]
-  %J = fsub reassoc double %E, %I         ; <double> [#uses=1]
+  %H = fmul contract reassoc double %C, %D         ; <double> [#uses=1]
+  %I = fadd contract reassoc double %H, %G         ; <double> [#uses=1]
+  %J = fsub contract reassoc double %E, %I         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -912,11 +909,11 @@ define double @test_fast_FMSUB_ASSOC_EXT3(float %A, float %B, double %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                              double %D, double %E) {
-  %F = fmul reassoc float %A, %B
+  %F = fmul contract reassoc float %A, %B
   %G = fpext float %F to double
-  %H = fmul reassoc double %C, %D
-  %I = fadd reassoc nsz double %H, %G
-  %J = fsub reassoc nsz double %E, %I
+  %H = fmul contract reassoc double %C, %D
+  %I = fadd contract reassoc nsz double %H, %G
+  %J = fsub contract reassoc nsz double %E, %I
   ret double %J
 }
 
@@ -949,11 +946,11 @@ define double @test_reassoc_FMSUB_ASSOC_EXT4(float %A, float %B, float %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                  float %D, double %E) {
-  %F = fmul reassoc float %A, %B          ; <float> [#uses=1]
-  %G = fmul reassoc float %C, %D          ; <float> [#uses=1]
-  %H = fadd reassoc float %F, %G          ; <float> [#uses=1]
+  %F = fmul contract reassoc float %A, %B          ; <float> [#uses=1]
+  %G = fmul contract reassoc float %C, %D          ; <float> [#uses=1]
+  %H = fadd contract reassoc float %F, %G          ; <float> [#uses=1]
   %I = fpext float %H to double   ; <double> [#uses=1]
-  %J = fsub reassoc double %E, %I         ; <double> [#uses=1]
+  %J = fsub contract reassoc double %E, %I         ; <double> [#uses=1]
   ret double %J
 }
 
@@ -982,10 +979,10 @@ define double @test_fast_FMSUB_ASSOC_EXT4(float %A, float %B, float %C,
 ; CHECK-SPE-NEXT:    evmergehi 3, 4, 4
 ; CHECK-SPE-NEXT:    blr
                                           float %D, double %E) {
-  %F = fmul reassoc float %A, %B
-  %G = fmul reassoc float %C, %D
-  %H = fadd reassoc nsz float %F, %G
+  %F = fmul contract reassoc float %A, %B
+  %G = fmul contract reassoc float %C, %D
+  %H = fadd contract reassoc nsz float %F, %G
   %I = fpext float %H to double
-  %J = fsub reassoc nsz double %E, %I
+  %J = fsub contract reassoc nsz double %E, %I
   ret double %J
 }
diff --git a/llvm/test/CodeGen/PowerPC/fma-ext.ll b/llvm/test/CodeGen/PowerPC/fma-ext.ll
index 8bd09375a38a0..494bb8cfe34b5 100644
--- a/llvm/test/CodeGen/PowerPC/fma-ext.ll
+++ b/llvm/test/CodeGen/PowerPC/fma-ext.ll
@@ -1,10 +1,10 @@
-; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -fp-contract=fast -mattr=-vsx -disable-ppc-vsx-fma-mutation=false | FileCheck %s
-; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -fp-contract=fast -mattr=+vsx -mcpu=pwr7 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-VSX %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -mattr=-vsx -disable-ppc-vsx-fma-mutation=false | FileCheck %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -mattr=+vsx -mcpu=pwr7 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-VSX %s
 
 define double @test_FMADD_EXT1(float %A, float %B, double %C) {
-    %D = fmul float %A, %B          ; <float> [#uses=1]
+    %D = fmul contract float %A, %B          ; <float> [#uses=1]
     %E = fpext float %D to double   ; <double> [#uses=1]
-    %F = fadd double %E, %C         ; <double> [#uses=1]
+    %F = fadd contract double %E, %C         ; <double> [#uses=1]
     ret double %F
 ; CHECK-LABEL: test_FMADD_EXT1:
 ; CHECK: fmadd
@@ -16,9 +16,9 @@ define double @test_FMADD_EXT1(float %A, float %B, double %C) {
 }
 
 define double @test_FMADD_EXT2(float %A, float %B, double %C) {
-    %D = fmul float %A, %B          ; <float> [#uses=1]
+    %D = fmul contract float %A, %B          ; <float> [#uses=1]
     %E = fpext float %D to double   ; <double> [#uses=1]
-    %F = fadd double %C, %E         ; <double> [#uses=1]
+    %F = fadd contract double %C, %E         ; <double> [#uses=1]
     ret double %F
 ; CHECK-LABEL: test_FMADD_EXT2:
 ; CHECK: fmadd
@@ -30,9 +30,9 @@ define double @test_FMADD_EXT2(float %A, float %B, double %C) {
 }
 
 define double @test_FMSUB_EXT1(float %A, float %B, double %C) {
-    %D = fmul float %A, %B          ; <float> [#uses=1]
+    %D = fmul contract float %A, %B          ; <float> [#uses=1]
     %E = fpext float %D to double   ; <double> [#uses=1]
-    %F = fsub double %E, %C         ; <double> [#uses=1]
+    %F = fsub contract double %E, %C         ; <double> [#uses=1]
     ret double %F
 ; CHECK-LABEL: test_FMSUB_EXT1:
 ; CHECK: fmsub
@@ -44,9 +44,9 @@ define double @test_FMSUB_EXT1(float %A, float %B, double %C) {
 }
 
 define double @test_FMSUB_EXT2(float %A, float %B, double %C) {
-    %D = fmul float %A, %B          ; <float> [#uses=1]
+    %D = fmul contract float %A, %B          ; <float> [#uses=1]
     %E = fpext float %D to double   ; <double> [#uses=1]
-    %F = fsub double %C, %E         ; <double> [#uses=1]
+    %F = fsub contract double %C, %E         ; <double> [#uses=1]
     ret double %F
 ; CHECK-LABEL: test_FMSUB_EXT2:
 ; CHECK: fneg
@@ -61,9 +61,9 @@ define double @test_FMSUB_EXT2(float %A, float %B, double %C) {
 
 ; need nsz flag to generate fnmsub since it may affect sign of zero
 define double @test_FMSUB_EXT2_NSZ(float %A, float %B, double %C) {
-    %D = fmul nsz float %A, %B      ; <float> [#uses=1]
+    %D = fmul nsz contract float %A, %B      ; <float> [#uses=1]
     %E = fpext float %D to double   ; <double> [#uses=1]
-    %F = fsub nsz double %C, %E     ; <double> [#uses=1]
+    %F = fsub nsz contract double %C, %E     ; <double> [#uses=1]
     ret double %F
 ; CHECK-LABEL: test_FMSUB_EXT2_NSZ:
 ; CHECK: fnmsub
@@ -75,10 +75,10 @@ define double @test_FMSUB_EXT2_NSZ(float %A, float %B, double %C) {
 }
 
 define double @test_FMSUB_EXT3(float %A, float %B, double %C) {
-    %D = fmul float %A, %B          ; <float> [#uses=1]
+    %D = fmul contract float %A, %B          ; <float> [#uses=1]
     %E = fsub float -0.000000e+00, %D ;    <float> [#uses=1]
     %F = fpext float %E to double   ; <double> [#uses=1]
-    %G = fsub double %F, %C         ; <double> [#uses=1]
+    %G = fsub contract double %F, %C         ; <double> [#uses=1]
     ret double %G
 ; CHECK-LABEL: test_FMSUB_EXT3:
 ; CHECK: fnmadd
@@ -92,10 +92,10 @@ define double @test_FMSUB_EXT3(float %A, float %B, double %C) {
 }
     
 define double @test_FMSUB_EXT4(float %A, float %B, double %C) {
-    %D = fmul float %A, %B          ; <float> [#uses=1]
+    %D = fmul contract float %A, %B          ; <float> [#uses=1]
     %E = fpext float %D to double   ; <double> [#uses=1]
     %F = fsub double -0.000000e+00, %E ;    <double> [#uses=1]
-    %G = fsub double %F, %C         ; <double> [#uses=1]
+    %G = fsub contract double %F, %C         ; <double> [#uses=1]
     ret double %G
 ; CHECK-LABEL: test_FMSUB_EXT4:
 ; CHECK: fnmadd
diff --git a/llvm/test/CodeGen/PowerPC/fma.ll b/llvm/test/CodeGen/PowerPC/fma.ll
index b49b93b83b689..993746c0b51bd 100644
--- a/llvm/test/CodeGen/PowerPC/fma.ll
+++ b/llvm/test/CodeGen/PowerPC/fma.ll
@@ -1,7 +1,7 @@
-; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -fp-contract=fast -mattr=-vsx -disable-ppc-vsx-fma-mutation=false | FileCheck %s
-; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -fp-contract=fast -mattr=+vsx -mcpu=pwr7 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-VSX %s
-; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -fp-contract=fast -mcpu=pwr8 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-P8 %s
-; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu -fp-contract=fast -mcpu=pwr8 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-P8 %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -mattr=-vsx -disable-ppc-vsx-fma-mutation=false | FileCheck %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -mattr=+vsx -mcpu=pwr7 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-VSX %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-P8 %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=powerpc64le-unknown-linux-gnu -mcpu=pwr8 -disable-ppc-vsx-fma-mutation=false | FileCheck -check-prefix=CHECK-P8 %s
 
 declare double @dummy1(double) #0
 declare double @dummy2(double, double) #0
@@ -9,8 +9,8 @@ declare double @dummy3(double, double, double) #0
 declare float @dummy4(float, float) #0
 
 define double @test_FMADD1(double %A, double %B, double %C) {
-	%D = fmul double %A, %B		; <double> [#uses=1]
-	%E = fadd double %C, %D		; <double> [#uses=1]
+	%D = fmul contract double %A, %B		; <double> [#uses=1]
+	%E = fadd contract double %C, %D		; <double> [#uses=1]
 	ret double %E
 ; CHECK-LABEL: test_FMADD1:
 ; CHECK: fmadd
@@ -22,8 +22,8 @@ define double @test_FMADD1(double %A, double %B, double %C) {
 }
 
 define double @test_FMADD2(double %A, double %B, double %C) {
-	%D = fmul double %A, %B		; <double> [#uses=1]
-	%E = fadd double %D, %C		; <double> [#uses=1]
+	%D = fmul contract double %A, %B		; <double> [#uses=1]
+	%E = fadd contract double %D, %C		; <double> [#uses=1]
 	ret double %E
 ; CHECK-LABEL: test_FMADD2:
 ; CHECK: fmadd
@@ -35,8 +35,8 @@ define double @test_FMADD2(double %A, double %B, double %C) {
 }
 
 define double @test_FMSUB1(double %A, double %B, double %C) {
-	%D = fmul double %A, %B		; <double> [#uses=1]
-	%E = fsub double %D, %C		; <double> [#uses=1]
+	%D = fmul contract double %A, %B		; <double> [#uses=1]
+	%E = fsub contract double %D, %C		; <double> [#uses=1]
 	ret double %E
 ; CHECK-LABEL: test_FMSUB1:
 ; CHECK: fmsub
@@ -48,9 +48,9 @@ define double @test_FMSUB1(double %A, double %B, double %C) {
 }
 
 define double @test_FMSUB2(double %A, double %B, double %C, double %D) {
-	%E = fmul double %A, %B 	; <double> [#uses=2]
-	%F = fadd double %E, %C 	; <double> [#uses=1]
-	%G = fsub double %E, %D 	; <double> [#uses=1]
+	%E = fmul contract double %A, %B 	; <double> [#uses=2]
+	%F = fadd contract double %E, %C 	; <double> [#uses=1]
+	%G = fsub contract double %E, %D 	; <double> [#uses=1]
 	%H = call double @dummy2(double %F, double %G)      ; <double> [#uses=1]
 	ret double %H
 ; CHECK-LABEL: test_FMSUB2:
@@ -63,8 +63,8 @@ define double @test_FMSUB2(double %A, double %B, double %C, double %D) {
 }
 
 define double @test_FNMADD1(double %A, double %B, double %C) {
-	%D = fmul double %A, %B		; <double> [#uses=1]
-	%E = fadd double %D, %C		; <double> [#uses=1]
+	%D = fmul contract double %A, %B		; <double> [#uses=1]
+	%E = fadd contract double %D, %C		; <double> [#uses=1]
 	%F = fsub double -0.000000e+00, %E		; <double> [#uses=1]
 	ret double %F
 ; CHECK-LABEL: test_FNMADD1:
@@ -77,8 +77,8 @@ define double @test_FNMADD1(double %A, double %B, double %C) {
 }
 
 define double @test_FNMADD2(double %A, double %B, double %C) {
-	%D = fmul double %A, %B		; <double> [#uses=1]
-	%E = fadd double %C, %D		; <double> [#uses=1]
+	%D = fmul contract double %A, %B		; <double> [#uses=1]
+	%E = fadd contract double %C, %D		; <double> [#uses=1]
 	%F = fsub double -0.000000e+00, %E		; <double> [#uses=1]
 	ret double %F
 ; CHECK-LABEL: test_FNMADD2:
@@ -91,8 +91,8 @@ define double @test_FNMADD2(double %A, double %B, double %C) {
 }
 
 define double @test_FNMSUB1(double %A, double %B, double %C) {
-	%D = fmul double %A, %B		; <double> [#uses=1]
-	%E = fsub double %C, %D		; <double> [#uses=1]
+	%D = fmul contract double %A, %B		; <double> [#uses=1]
+	%E = fsub contract double %C, %D		; <double> [#uses=1]
 	ret double %E
 ; CHECK-LABEL: test_FNMSUB1:
 ; CHECK: fneg
@@ -106,8 +106,8 @@ define double @test_FNMSUB1(double %A, double %B, double %C) {
 
 ; need nsz flag to generate fnmsub since it may affect sign of zero
 define double @test_FNMSUB1_NSZ(double %A, double %B, double %C) {
-	%D = fmul nsz double %A, %B		; <double> [#uses=1]
-	%E = fsub nsz double %C, %D		; <double> [#uses=1]
+	%D = fmul nsz contract double %A, %B		; <double> [#uses=1]
+	%E = fsub nsz contract double %C, %D		; <double> [#uses=1]
 	ret double %E
 ; CHECK-LABEL: test_FNMSUB1_NSZ:
 ; CHECK: fnmsub
@@ -118,8 +118,8 @@ define double @test_FNMSUB1_NSZ(double %A, double %B, double %C) {
 }
 
 define double @test_FNMSUB2(double %A, double %B, double %C) {
-	%D = fmul double %A, %B		; <double> [#uses=1]
-	%E = fsub double %D, %C		; <double> [#uses=1]
+	%D = fmul contract double %A, %B		; <double> [#uses=1]
+	%E = fsub contract double %D, %C		; <double> [#uses=1]
 	%F = fsub double -0.000000e+00, %E		; <double> [#uses=1]
 	ret double %F
 ; CHECK-LABEL: test_FNMSUB2:
@@ -132,8 +132,8 @@ define double @test_FNMSUB2(double %A, double %B, double %C) {
 }
 
 define float @test_FNMSUBS(float %A, float %B, float %C) {
-	%D = fmul float %A, %B		; <float> [#uses=1]
-	%E = fsub float %D, %C		; <float> [#uses=1]
+	%D = fmul contract float %A, %B		; <float> [#uses=1]
+	%E = fsub contract float %D, %C		; <float> [#uses=1]
 	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]
 	ret float %F
 ; CHECK-LABEL: test_FNMSUBS:
@@ -146,8 +146,8 @@ define float @test_FNMSUBS(float %A, float %B, float %C) {
 }
 
 define float @test_XSMADDMSP(float %A, float %B, float %C) {
-	%D = fmul float %A, %B		; <float> [#uses=1]
-	%E = fadd float %C, %D		; <float> [#uses=1]
+	%D = fmul contract float %A, %B		; <float> [#uses=1]
+	%E = fadd contract float %C, %D		; <float> [#uses=1]
 	ret float %E
 ; CHECK-P8-LABEL: test_XSMADDMSP:
 ; CHECK-P8: xsmaddmsp
@@ -155,8 +155,8 @@ define float @test_XSMADDMSP(float %A, float %B, float %C) {
 }
 
 define float @test_XSMSUBMSP(float %A, float %B, float %C) {
-	%D = fmul float %A, %B		; <float> [#uses=1]
-	%E = fsub float %D, %C		; <float> [#uses=1]
+	%D = fmul contract float %A, %B		; <float> [#uses=1]
+	%E = fsub contract float %D, %C		; <float> [#uses=1]
 	ret float %E
 ; CHECK-P8-LABEL: test_XSMSUBMSP:
 ; CHECK-P8: xsmsubmsp
@@ -164,9 +164,9 @@ define float @test_XSMSUBMSP(float %A, float %B, float %C) {
 }
 
 define float @test_XSMADDASP(float %A, float %B, float %C, float %D) {
-	%E = fmul float %A, %B 	; <float> [#uses=2]
-	%F = fadd float %E, %C 	; <float> [#uses=1]
-	%G = fsub float %E, %D 	; <float> [#uses=1]
+	%E = fmul contract float %A, %B 	; <float> [#uses=2]
+	%F = fadd contract float %E, %C 	; <float> [#uses=1]
+	%G = fsub contract float %E, %D 	; <float> [#uses=1]
 	%H = call float @dummy4(float %F, float %G)      ; <float> [#uses=1]
 	ret float %H
 ; CHECK-P8-LABEL: test_XSMADDASP:
@@ -175,9 +175,9 @@ define float @test_XSMADDASP(float %A, float %B, float %C, float %D) {
 }
 
 define float @test_XSMSUBASP(float %A, float %B, float %C, float %D) {
-	%E = fmul float %A, %B 	; <float> [#uses=2]
-	%F = fsub float %E, %C 	; <float> [#uses=1]
-	%G = fsub float %E, %D 	; <float> [#uses=1]
+	%E = fmul contract float %A, %B 	; <float> [#uses=2]
+	%F = fsub contract float %E, %C 	; <float> [#uses=1]
+	%G = fsub contract float %E, %D 	; <float> [#uses=1]
 	%H = call float @dummy4(float %F, float %G)      ; <float> [#uses=1]
 	ret float %H
 ; CHECK-P8-LABEL: test_XSMSUBASP:
@@ -186,8 +186,8 @@ define float @test_XSMSUBASP(float %A, float %B, float %C, float %D) {
 }
 
 define float @test_XSNMADDMSP(float %A, float %B, float %C) {
-	%D = fmul float %A, %B		; <float> [#uses=1]
-	%E = fadd float %D, %C		; <float> [#uses=1]
+	%D = fmul contract float %A, %B		; <float> [#uses=1]
+	%E = fadd contract float %D, %C		; <float> [#uses=1]
 	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]
 	ret float %F
 ; CHECK-P8-LABEL: test_XSNMADDMSP:
@@ -196,8 +196,8 @@ define float @test_XSNMADDMSP(float %A, float %B, float %C) {
 }
 
 define float @test_XSNMSUBMSP(float %A, float %B, float %C) {
-	%D = fmul float %A, %B		; <float> [#uses=1]
-	%E = fsub float %D, %C		; <float> [#uses=1]
+	%D = fmul contract float %A, %B		; <float> [#uses=1]
+	%E = fsub contract float %D, %C		; <float> [#uses=1]
 	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]
 	ret float %F
 ; CHECK-P8-LABEL: test_XSNMSUBMSP:
@@ -206,8 +206,8 @@ define float @test_XSNMSUBMSP(float %A, float %B, float %C) {
 }
 
 define float @test_XSNMADDASP(float %A, float %B, float %C) {
-	%D = fmul float %A, %B		; <float> [#uses=1]
-	%E = fadd float %D, %C		; <float> [#uses=1]
+	%D = fmul contract float %A, %B		; <float> [#uses=1]
+	%E = fadd contract float %D, %C		; <float> [#uses=1]
 	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]
 	%H = call float @dummy4(float %E, float %F)      ; <float> [#uses=1]
 	ret float %F
@@ -219,8 +219,8 @@ define float @test_XSNMADDASP(float %A, float %B, float %C) {
 }
 
 define float @test_XSNMSUBASP(float %A, float %B, float %C) {
-	%D = fmul float %A, %B		; <float> [#uses=1]
-	%E = fsub float %D, %C		; <float> [#uses=1]
+	%D = fmul contract float %A, %B		; <float> [#uses=1]
+	%E = fsub contract float %D, %C		; <float> [#uses=1]
 	%F = fsub float -0.000000e+00, %E		; <float> [#uses=1]
 	%H = call float @dummy4(float %E, float %F)      ; <float> [#uses=1]
 	ret float %F
diff --git a/llvm/test/CodeGen/PowerPC/ppc440-fp-basic.ll b/llvm/test/CodeGen/PowerPC/ppc440-fp-basic.ll
index fb4985e8b5eed..c0e0517bca8e1 100644
--- a/llvm/test/CodeGen/PowerPC/ppc440-fp-basic.ll
+++ b/llvm/test/CodeGen/PowerPC/ppc440-fp-basic.ll
@@ -1,4 +1,4 @@
-; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -mcpu=440 -fp-contract=fast | FileCheck %s
+; RUN: llc -verify-machineinstrs < %s -mtriple=ppc32-- -mcpu=440 | FileCheck %s
 
 %0 = type { double, double }
 
@@ -10,17 +10,17 @@ entry:
   %b.real = load double, ptr %b
   %b.imagp = getelementptr inbounds %0, ptr %b, i32 0, i32 1
   %b.imag = load double, ptr %b.imagp
-  %mul.rl = fmul double %a.real, %b.real
-  %mul.rr = fmul double %a.imag, %b.imag
-  %mul.r = fsub double %mul.rl, %mul.rr
-  %mul.il = fmul double %a.imag, %b.real
-  %mul.ir = fmul double %a.real, %b.imag
-  %mul.i = fadd double %mul.il, %mul.ir
+  %mul.rl = fmul contract double %a.real, %b.real
+  %mul.rr = fmul contract double %a.imag, %b.imag
+  %mul.r = fsub contract double %mul.rl, %mul.rr
+  %mul.il = fmul contract double %a.imag, %b.real
+  %mul.ir = fmul contract double %a.real, %b.imag
+  %mul.i = fadd contract double %mul.il, %mul.ir
   %c.real = load double, ptr %c
   %c.imagp = getelementptr inbounds %0, ptr %c, i32 0, i32 1
   %c.imag = load double, ptr %c.imagp
-  %add.r = fadd double %mul.r, %c.real
-  %add.i = fadd double %mul.i, %c.imag
+  %add.r = fadd contract double %mul.r, %c.real
+  %add.i = fadd contract double %mul.i, %c.imag
   %imag = getelementptr inbounds %0, ptr %agg.result, i32 0, i32 1
   store double %add.r, ptr %agg.result
   store double %add.i, ptr %imag
diff --git a/llvm/test/CodeGen/PowerPC/vsx-fma-mutate-trivial-copy.ll b/llvm/test/CodeGen/PowerPC/vsx-fma-mutate-trivial-copy.ll
index 539b563691723..c2a3a72208e4d 100644
--- a/llvm/test/CodeGen/PowerPC/vsx-fma-mutate-trivial-copy.ll
+++ b/llvm/test/CodeGen/PowerPC/vsx-fma-mutate-trivial-copy.ll
@@ -1,4 +1,4 @@
-; RUN: llc -verify-machineinstrs -fp-contract=fast < %s | FileCheck %s
+; RUN: llc -verify-machineinstrs < %s | FileCheck %s
 target datalayout = "E-m:e-i64:64-n32:64"
 target triple = "powerpc64-unknown-linux-gnu"
 
@@ -14,11 +14,11 @@ for.body.lr.ph:                                   ; preds = %entry
   br label %for.body
 
 for.body:                                         ; preds = %for.body, %for.body.lr.ph
-  %div = fdiv reassoc arcp float 0.000000e+00, %W
-  %add = fadd reassoc float %div, %d_min
+  %div = fdiv reassoc arcp contract float 0.000000e+00, %W
+  %add = fadd reassoc contract float %div, %d_min
   %conv2 = fpext float %add to double
   %0 = tail call double @llvm.sqrt.f64(double %conv2)
-  %div4 = fdiv reassoc arcp double %conv3, %0
+  %div4 = fdiv reassoc arcp contract double %conv3, %0
   %call = tail call signext i32 @p_col_helper(double %div4) #2
   br label %for.body
 
diff --git a/llvm/test/CodeGen/SPARC/float-ua2007.ll b/llvm/test/CodeGen/SPARC/float-ua2007.ll
index 252b47943fe43..2e83ea8e287a9 100644
--- a/llvm/test/CodeGen/SPARC/float-ua2007.ll
+++ b/llvm/test/CodeGen/SPARC/float-ua2007.ll
@@ -1,6 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
-; RUN: llc -mtriple=sparc64 --fp-contract=fast -mattr=-ua2007 < %s | FileCheck %s -check-prefix=NO-UA2007
-; RUN: llc -mtriple=sparc64 --fp-contract=fast -mattr=+ua2007 < %s | FileCheck %s -check-prefix=UA2007
+; RUN: llc -mtriple=sparc64 -mattr=-ua2007 < %s | FileCheck %s -check-prefix=NO-UA2007
+; RUN: llc -mtriple=sparc64 -mattr=+ua2007 < %s | FileCheck %s -check-prefix=UA2007
 
 define float @fmadds(float %a, float %b, float %c) nounwind {
 ; NO-UA2007-LABEL: fmadds:
@@ -146,8 +146,8 @@ define float @combine_madds(float %a, float %b, float %c) nounwind {
 ; UA2007:       ! %bb.0:
 ; UA2007-NEXT:    retl
 ; UA2007-NEXT:    fmadds %f1, %f3, %f5, %f0
-  %mul = fmul float %a, %b
-  %add = fadd float %mul, %c
+  %mul = fmul contract float %a, %b
+  %add = fadd contract float %mul, %c
   ret float %add
 }
 
@@ -162,8 +162,8 @@ define double @combine_maddd(double %a, double %b, double %c) nounwind {
 ; UA2007:       ! %bb.0:
 ; UA2007-NEXT:    retl
 ; UA2007-NEXT:    fmaddd %f0, %f2, %f4, %f0
-  %mul = fmul double %a, %b
-  %add = fadd double %mul, %c
+  %mul = fmul contract double %a, %b
+  %add = fadd contract double %mul, %c
   ret double %add
 }
 
@@ -178,8 +178,8 @@ define float @combine_msubs(float %a, float %b, float %c) nounwind {
 ; UA2007:       ! %bb.0:
 ; UA2007-NEXT:    retl
 ; UA2007-NEXT:    fmsubs %f1, %f3, %f5, %f0
-  %mul = fmul float %a, %b
-  %sub = fsub float %mul, %c
+  %mul = fmul contract float %a, %b
+  %sub = fsub contract float %mul, %c
   ret float %sub
 }
 
@@ -194,8 +194,8 @@ define double @combine_msubd(double %a, double %b, double %c) nounwind {
 ; UA2007:       ! %bb.0:
 ; UA2007-NEXT:    retl
 ; UA2007-NEXT:    fmsubd %f0, %f2, %f4, %f0
-  %mul = fmul double %a, %b
-  %sub = fsub double %mul, %c
+  %mul = fmul contract double %a, %b
+  %sub = fsub contract double %mul, %c
   ret double %sub
 }
 
@@ -211,8 +211,8 @@ define float @combine_nmadds(float %a, float %b, float %c) nounwind {
 ; UA2007:       ! %bb.0:
 ; UA2007-NEXT:    retl
 ; UA2007-NEXT:    fnmadds %f1, %f3, %f5, %f0
-  %mul = fmul float %a, %b
-  %add = fadd float %mul, %c
+  %mul = fmul contract float %a, %b
+  %add = fadd contract float %mul, %c
   %neg = fneg float %add
   ret float %neg
 }
@@ -229,8 +229,8 @@ define double @combine_nmaddd(double %a, double %b, double %c) nounwind {
 ; UA2007:       ! %bb.0:
 ; UA2007-NEXT:    retl
 ; UA2007-NEXT:    fnmaddd %f0, %f2, %f4, %f0
-  %mul = fmul double %a, %b
-  %add = fadd double %mul, %c
+  %mul = fmul contract double %a, %b
+  %add = fadd contract double %mul, %c
   %neg = fneg double %add
   ret double %neg
 }
@@ -247,8 +247,8 @@ define float @combine_nmsubs(float %a, float %b, float %c) nounwind {
 ; UA2007:       ! %bb.0:
 ; UA2007-NEXT:    retl
 ; UA2007-NEXT:    fnmsubs %f1, %f3, %f5, %f0
-  %mul = fmul float %a, %b
-  %sub = fsub float %mul, %c
+  %mul = fmul contract float %a, %b
+  %sub = fsub contract float %mul, %c
   %neg = fneg float %sub
   ret float %neg
 }
@@ -265,8 +265,8 @@ define double @combine_nmsubd(double %a, double %b, double %c) nounwind {
 ; UA2007:       ! %bb.0:
 ; UA2007-NEXT:    retl
 ; UA2007-NEXT:    fnmsubd %f0, %f2, %f4, %f0
-  %mul = fmul double %a, %b
-  %sub = fsub double %mul, %c
+  %mul = fmul contract double %a, %b
+  %sub = fsub contract double %mul, %c
   %neg = fneg double %sub
   ret double %neg
 }
diff --git a/llvm/test/CodeGen/Thumb2/mve-fmas.ll b/llvm/test/CodeGen/Thumb2/mve-fmas.ll
index 94921c78ad912..ca688cd77d2d9 100644
--- a/llvm/test/CodeGen/Thumb2/mve-fmas.ll
+++ b/llvm/test/CodeGen/Thumb2/mve-fmas.ll
@@ -1,14 +1,8 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
-; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi, -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-MVE-FP
-; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi, -mattr=+mve.fp -fp-contract=fast -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-MVE-VMLA
+; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi, -mattr=+mve.fp -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-MVE-VMLA
 ; RUN: llc -mtriple=thumbv8.1m.main-none-none-eabi -mattr=+mve,+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=CHECK-MVE
 
 define arm_aapcs_vfpcc <8 x half> @vfma16_v1(<8 x half> %src1, <8 x half> %src2, <8 x half> %src3) {
-; CHECK-MVE-FP-LABEL: vfma16_v1:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f16 q1, q1, q2
-; CHECK-MVE-FP-NEXT:    vadd.f16 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma16_v1:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -20,40 +14,35 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v1(<8 x half> %src1, <8 x half> %src2,
 ; CHECK-MVE-NEXT:    vmovx.f16 s13, s0
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s14, s4
-; CHECK-MVE-NEXT:    vmla.f16 s0, s4, s8
-; CHECK-MVE-NEXT:    vmla.f16 s13, s14, s12
+; CHECK-MVE-NEXT:    vfma.f16 s0, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s13, s14, s12
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s1
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s5
-; CHECK-MVE-NEXT:    vmla.f16 s12, s8, s4
-; CHECK-MVE-NEXT:    vmla.f16 s1, s5, s9
+; CHECK-MVE-NEXT:    vfma.f16 s12, s8, s4
+; CHECK-MVE-NEXT:    vfma.f16 s1, s5, s9
 ; CHECK-MVE-NEXT:    vins.f16 s1, s12
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s2
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s6
-; CHECK-MVE-NEXT:    vmla.f16 s12, s8, s4
-; CHECK-MVE-NEXT:    vmla.f16 s2, s6, s10
+; CHECK-MVE-NEXT:    vfma.f16 s12, s8, s4
+; CHECK-MVE-NEXT:    vfma.f16 s2, s6, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s3
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s7
-; CHECK-MVE-NEXT:    vmla.f16 s3, s7, s11
-; CHECK-MVE-NEXT:    vmla.f16 s8, s6, s4
+; CHECK-MVE-NEXT:    vfma.f16 s3, s7, s11
+; CHECK-MVE-NEXT:    vfma.f16 s8, s6, s4
 ; CHECK-MVE-NEXT:    vins.f16 s0, s13
 ; CHECK-MVE-NEXT:    vins.f16 s2, s12
 ; CHECK-MVE-NEXT:    vins.f16 s3, s8
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <8 x half> %src2, %src3
-  %1 = fadd <8 x half> %src1, %0
+  %0 = fmul contract <8 x half> %src2, %src3
+  %1 = fadd contract <8 x half> %src1, %0
   ret <8 x half> %1
 }
 
 define arm_aapcs_vfpcc <8 x half> @vfma16_v2(<8 x half> %src1, <8 x half> %src2, <8 x half> %src3) {
-; CHECK-MVE-FP-LABEL: vfma16_v2:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f16 q1, q1, q2
-; CHECK-MVE-FP-NEXT:    vadd.f16 q0, q1, q0
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma16_v2:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -65,40 +54,35 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v2(<8 x half> %src1, <8 x half> %src2,
 ; CHECK-MVE-NEXT:    vmovx.f16 s13, s0
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s14, s4
-; CHECK-MVE-NEXT:    vmla.f16 s0, s4, s8
-; CHECK-MVE-NEXT:    vmla.f16 s13, s14, s12
+; CHECK-MVE-NEXT:    vfma.f16 s0, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s13, s14, s12
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s1
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s5
-; CHECK-MVE-NEXT:    vmla.f16 s12, s8, s4
-; CHECK-MVE-NEXT:    vmla.f16 s1, s5, s9
+; CHECK-MVE-NEXT:    vfma.f16 s12, s8, s4
+; CHECK-MVE-NEXT:    vfma.f16 s1, s5, s9
 ; CHECK-MVE-NEXT:    vins.f16 s1, s12
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s2
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s6
-; CHECK-MVE-NEXT:    vmla.f16 s12, s8, s4
-; CHECK-MVE-NEXT:    vmla.f16 s2, s6, s10
+; CHECK-MVE-NEXT:    vfma.f16 s12, s8, s4
+; CHECK-MVE-NEXT:    vfma.f16 s2, s6, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s3
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s7
-; CHECK-MVE-NEXT:    vmla.f16 s3, s7, s11
-; CHECK-MVE-NEXT:    vmla.f16 s8, s6, s4
+; CHECK-MVE-NEXT:    vfma.f16 s3, s7, s11
+; CHECK-MVE-NEXT:    vfma.f16 s8, s6, s4
 ; CHECK-MVE-NEXT:    vins.f16 s0, s13
 ; CHECK-MVE-NEXT:    vins.f16 s2, s12
 ; CHECK-MVE-NEXT:    vins.f16 s3, s8
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <8 x half> %src2, %src3
-  %1 = fadd <8 x half> %0, %src1
+  %0 = fmul contract <8 x half> %src2, %src3
+  %1 = fadd contract <8 x half> %0, %src1
   ret <8 x half> %1
 }
 
 define arm_aapcs_vfpcc <8 x half> @vfms16(<8 x half> %src1, <8 x half> %src2, <8 x half> %src3) {
-; CHECK-MVE-FP-LABEL: vfms16:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f16 q1, q1, q2
-; CHECK-MVE-FP-NEXT:    vsub.f16 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfms16:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -110,42 +94,35 @@ define arm_aapcs_vfpcc <8 x half> @vfms16(<8 x half> %src1, <8 x half> %src2, <8
 ; CHECK-MVE-NEXT:    vmovx.f16 s13, s0
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s14, s4
-; CHECK-MVE-NEXT:    vmls.f16 s0, s4, s8
-; CHECK-MVE-NEXT:    vmls.f16 s13, s14, s12
+; CHECK-MVE-NEXT:    vfms.f16 s0, s4, s8
+; CHECK-MVE-NEXT:    vfms.f16 s13, s14, s12
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s1
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s5
-; CHECK-MVE-NEXT:    vmls.f16 s12, s8, s4
-; CHECK-MVE-NEXT:    vmls.f16 s1, s5, s9
+; CHECK-MVE-NEXT:    vfms.f16 s12, s8, s4
+; CHECK-MVE-NEXT:    vfms.f16 s1, s5, s9
 ; CHECK-MVE-NEXT:    vins.f16 s1, s12
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s2
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s6
-; CHECK-MVE-NEXT:    vmls.f16 s12, s8, s4
-; CHECK-MVE-NEXT:    vmls.f16 s2, s6, s10
+; CHECK-MVE-NEXT:    vfms.f16 s12, s8, s4
+; CHECK-MVE-NEXT:    vfms.f16 s2, s6, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s3
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s7
-; CHECK-MVE-NEXT:    vmls.f16 s3, s7, s11
-; CHECK-MVE-NEXT:    vmls.f16 s8, s6, s4
+; CHECK-MVE-NEXT:    vfms.f16 s3, s7, s11
+; CHECK-MVE-NEXT:    vfms.f16 s8, s6, s4
 ; CHECK-MVE-NEXT:    vins.f16 s0, s13
 ; CHECK-MVE-NEXT:    vins.f16 s2, s12
 ; CHECK-MVE-NEXT:    vins.f16 s3, s8
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <8 x half> %src2, %src3
-  %1 = fsub <8 x half> %src1, %0
+  %0 = fmul contract <8 x half> %src2, %src3
+  %1 = fsub contract <8 x half> %src1, %0
   ret <8 x half> %1
 }
 
 define arm_aapcs_vfpcc <8 x half> @vfmar16(<8 x half> %src1, <8 x half> %src2, float %src3o) {
-; CHECK-MVE-FP-LABEL: vfmar16:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vcvtb.f16.f32 s8, s8
-; CHECK-MVE-FP-NEXT:    vmov.f16 r0, s8
-; CHECK-MVE-FP-NEXT:    vmul.f16 q1, q1, r0
-; CHECK-MVE-FP-NEXT:    vadd.f16 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfmar16:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -159,21 +136,21 @@ define arm_aapcs_vfpcc <8 x half> @vfmar16(<8 x half> %src1, <8 x half> %src2, f
 ; CHECK-MVE-NEXT:    vcvtb.f16.f32 s8, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s0
 ; CHECK-MVE-NEXT:    vmovx.f16 s10, s4
-; CHECK-MVE-NEXT:    vmla.f16 s0, s4, s8
-; CHECK-MVE-NEXT:    vmla.f16 s12, s10, s8
+; CHECK-MVE-NEXT:    vfma.f16 s0, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s12, s10, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s10, s1
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
-; CHECK-MVE-NEXT:    vmla.f16 s1, s5, s8
-; CHECK-MVE-NEXT:    vmla.f16 s10, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s1, s5, s8
+; CHECK-MVE-NEXT:    vfma.f16 s10, s4, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
 ; CHECK-MVE-NEXT:    vins.f16 s1, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s10, s2
-; CHECK-MVE-NEXT:    vmla.f16 s10, s4, s8
-; CHECK-MVE-NEXT:    vmla.f16 s2, s6, s8
+; CHECK-MVE-NEXT:    vfma.f16 s10, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s2, s6, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
-; CHECK-MVE-NEXT:    vmla.f16 s6, s4, s8
-; CHECK-MVE-NEXT:    vmla.f16 s3, s7, s8
+; CHECK-MVE-NEXT:    vfma.f16 s6, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s3, s7, s8
 ; CHECK-MVE-NEXT:    vins.f16 s0, s12
 ; CHECK-MVE-NEXT:    vins.f16 s2, s10
 ; CHECK-MVE-NEXT:    vins.f16 s3, s6
@@ -182,19 +159,12 @@ entry:
   %src3 = fptrunc float %src3o to half
   %i = insertelement <8 x half> undef, half %src3, i32 0
   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
-  %0 = fmul <8 x half> %src2, %sp
-  %1 = fadd <8 x half> %src1, %0
+  %0 = fmul contract <8 x half> %src2, %sp
+  %1 = fadd contract <8 x half> %src1, %0
   ret <8 x half> %1
 }
 
 define arm_aapcs_vfpcc <8 x half> @vfma16(<8 x half> %src1, <8 x half> %src2, float %src3o) {
-; CHECK-MVE-FP-LABEL: vfma16:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vcvtb.f16.f32 s8, s8
-; CHECK-MVE-FP-NEXT:    vmul.f16 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    vmov.f16 r0, s8
-; CHECK-MVE-FP-NEXT:    vadd.f16 q0, q0, r0
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma16:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -210,46 +180,41 @@ define arm_aapcs_vfpcc <8 x half> @vfma16(<8 x half> %src1, <8 x half> %src2, fl
 ; CHECK-MVE-NEXT:    vmovx.f16 s0, s4
 ; CHECK-MVE-NEXT:    vmovx.f16 s2, s12
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s3
-; CHECK-MVE-NEXT:    vmla.f16 s8, s2, s0
+; CHECK-MVE-NEXT:    vfma.f16 s8, s2, s0
 ; CHECK-MVE-NEXT:    vmov.f32 s0, s3
-; CHECK-MVE-NEXT:    vmla.f16 s0, s12, s4
+; CHECK-MVE-NEXT:    vfma.f16 s0, s12, s4
 ; CHECK-MVE-NEXT:    vmov.f32 s1, s3
 ; CHECK-MVE-NEXT:    vins.f16 s0, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s2, s5
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s13
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s3
-; CHECK-MVE-NEXT:    vmla.f16 s8, s4, s2
-; CHECK-MVE-NEXT:    vmla.f16 s1, s13, s5
+; CHECK-MVE-NEXT:    vfma.f16 s8, s4, s2
+; CHECK-MVE-NEXT:    vfma.f16 s1, s13, s5
 ; CHECK-MVE-NEXT:    vins.f16 s1, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s2, s6
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s14
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s3
-; CHECK-MVE-NEXT:    vmla.f16 s8, s4, s2
+; CHECK-MVE-NEXT:    vfma.f16 s8, s4, s2
 ; CHECK-MVE-NEXT:    vmov.f32 s2, s3
-; CHECK-MVE-NEXT:    vmla.f16 s2, s14, s6
+; CHECK-MVE-NEXT:    vfma.f16 s2, s14, s6
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
 ; CHECK-MVE-NEXT:    vins.f16 s2, s8
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s3
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s15
-; CHECK-MVE-NEXT:    vmla.f16 s3, s15, s7
-; CHECK-MVE-NEXT:    vmla.f16 s8, s6, s4
+; CHECK-MVE-NEXT:    vfma.f16 s3, s15, s7
+; CHECK-MVE-NEXT:    vfma.f16 s8, s6, s4
 ; CHECK-MVE-NEXT:    vins.f16 s3, s8
 ; CHECK-MVE-NEXT:    bx lr
 entry:
   %src3 = fptrunc float %src3o to half
   %i = insertelement <8 x half> undef, half %src3, i32 0
   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
-  %0 = fmul <8 x half> %src1, %src2
-  %1 = fadd <8 x half> %sp, %0
+  %0 = fmul contract <8 x half> %src1, %src2
+  %1 = fadd contract <8 x half> %sp, %0
   ret <8 x half> %1
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfma32_v1(<4 x float> %src1, <4 x float> %src2, <4 x float> %src3) {
-; CHECK-MVE-FP-LABEL: vfma32_v1:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f32 q1, q1, q2
-; CHECK-MVE-FP-NEXT:    vadd.f32 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma32_v1:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -258,23 +223,18 @@ define arm_aapcs_vfpcc <4 x float> @vfma32_v1(<4 x float> %src1, <4 x float> %sr
 ;
 ; CHECK-MVE-LABEL: vfma32_v1:
 ; CHECK-MVE:       @ %bb.0: @ %entry
-; CHECK-MVE-NEXT:    vmla.f32 s3, s7, s11
-; CHECK-MVE-NEXT:    vmla.f32 s2, s6, s10
-; CHECK-MVE-NEXT:    vmla.f32 s1, s5, s9
-; CHECK-MVE-NEXT:    vmla.f32 s0, s4, s8
+; CHECK-MVE-NEXT:    vfma.f32 s3, s7, s11
+; CHECK-MVE-NEXT:    vfma.f32 s2, s6, s10
+; CHECK-MVE-NEXT:    vfma.f32 s1, s5, s9
+; CHECK-MVE-NEXT:    vfma.f32 s0, s4, s8
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <4 x float> %src2, %src3
-  %1 = fadd <4 x float> %src1, %0
+  %0 = fmul contract <4 x float> %src2, %src3
+  %1 = fadd contract <4 x float> %src1, %0
   ret <4 x float> %1
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfma32_v2(<4 x float> %src1, <4 x float> %src2, <4 x float> %src3) {
-; CHECK-MVE-FP-LABEL: vfma32_v2:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f32 q1, q1, q2
-; CHECK-MVE-FP-NEXT:    vadd.f32 q0, q1, q0
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma32_v2:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -283,23 +243,18 @@ define arm_aapcs_vfpcc <4 x float> @vfma32_v2(<4 x float> %src1, <4 x float> %sr
 ;
 ; CHECK-MVE-LABEL: vfma32_v2:
 ; CHECK-MVE:       @ %bb.0: @ %entry
-; CHECK-MVE-NEXT:    vmla.f32 s3, s7, s11
-; CHECK-MVE-NEXT:    vmla.f32 s2, s6, s10
-; CHECK-MVE-NEXT:    vmla.f32 s1, s5, s9
-; CHECK-MVE-NEXT:    vmla.f32 s0, s4, s8
+; CHECK-MVE-NEXT:    vfma.f32 s3, s7, s11
+; CHECK-MVE-NEXT:    vfma.f32 s2, s6, s10
+; CHECK-MVE-NEXT:    vfma.f32 s1, s5, s9
+; CHECK-MVE-NEXT:    vfma.f32 s0, s4, s8
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <4 x float> %src2, %src3
-  %1 = fadd <4 x float> %0, %src1
+  %0 = fmul contract <4 x float> %src2, %src3
+  %1 = fadd contract <4 x float> %0, %src1
   ret <4 x float> %1
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfms32(<4 x float> %src1, <4 x float> %src2, <4 x float> %src3) {
-; CHECK-MVE-FP-LABEL: vfms32:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f32 q1, q1, q2
-; CHECK-MVE-FP-NEXT:    vsub.f32 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfms32:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -308,24 +263,18 @@ define arm_aapcs_vfpcc <4 x float> @vfms32(<4 x float> %src1, <4 x float> %src2,
 ;
 ; CHECK-MVE-LABEL: vfms32:
 ; CHECK-MVE:       @ %bb.0: @ %entry
-; CHECK-MVE-NEXT:    vmls.f32 s3, s7, s11
-; CHECK-MVE-NEXT:    vmls.f32 s2, s6, s10
-; CHECK-MVE-NEXT:    vmls.f32 s1, s5, s9
-; CHECK-MVE-NEXT:    vmls.f32 s0, s4, s8
+; CHECK-MVE-NEXT:    vfms.f32 s3, s7, s11
+; CHECK-MVE-NEXT:    vfms.f32 s2, s6, s10
+; CHECK-MVE-NEXT:    vfms.f32 s1, s5, s9
+; CHECK-MVE-NEXT:    vfms.f32 s0, s4, s8
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <4 x float> %src2, %src3
-  %1 = fsub <4 x float> %src1, %0
+  %0 = fmul contract <4 x float> %src2, %src3
+  %1 = fsub contract <4 x float> %src1, %0
   ret <4 x float> %1
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfmar32(<4 x float> %src1, <4 x float> %src2, float %src3) {
-; CHECK-MVE-FP-LABEL: vfmar32:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmov r0, s8
-; CHECK-MVE-FP-NEXT:    vmul.f32 q1, q1, r0
-; CHECK-MVE-FP-NEXT:    vadd.f32 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfmar32:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -335,26 +284,20 @@ define arm_aapcs_vfpcc <4 x float> @vfmar32(<4 x float> %src1, <4 x float> %src2
 ;
 ; CHECK-MVE-LABEL: vfmar32:
 ; CHECK-MVE:       @ %bb.0: @ %entry
-; CHECK-MVE-NEXT:    vmla.f32 s3, s7, s8
-; CHECK-MVE-NEXT:    vmla.f32 s2, s6, s8
-; CHECK-MVE-NEXT:    vmla.f32 s1, s5, s8
-; CHECK-MVE-NEXT:    vmla.f32 s0, s4, s8
+; CHECK-MVE-NEXT:    vfma.f32 s3, s7, s8
+; CHECK-MVE-NEXT:    vfma.f32 s2, s6, s8
+; CHECK-MVE-NEXT:    vfma.f32 s1, s5, s8
+; CHECK-MVE-NEXT:    vfma.f32 s0, s4, s8
 ; CHECK-MVE-NEXT:    bx lr
 entry:
   %i = insertelement <4 x float> undef, float %src3, i32 0
   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
-  %0 = fmul <4 x float> %src2, %sp
-  %1 = fadd <4 x float> %src1, %0
+  %0 = fmul contract <4 x float> %src2, %sp
+  %1 = fadd contract <4 x float> %src1, %0
   ret <4 x float> %1
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfmas32(<4 x float> %src1, <4 x float> %src2, float %src3) {
-; CHECK-MVE-FP-LABEL: vfmas32:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmov r0, s8
-; CHECK-MVE-FP-NEXT:    vmul.f32 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    vadd.f32 q0, q0, r0
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfmas32:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -367,17 +310,17 @@ define arm_aapcs_vfpcc <4 x float> @vfmas32(<4 x float> %src1, <4 x float> %src2
 ; CHECK-MVE-NEXT:    vmov.f32 s11, s8
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s8
 ; CHECK-MVE-NEXT:    vmov.f32 s9, s8
-; CHECK-MVE-NEXT:    vmla.f32 s8, s0, s4
-; CHECK-MVE-NEXT:    vmla.f32 s11, s3, s7
-; CHECK-MVE-NEXT:    vmla.f32 s10, s2, s6
-; CHECK-MVE-NEXT:    vmla.f32 s9, s1, s5
+; CHECK-MVE-NEXT:    vfma.f32 s8, s0, s4
+; CHECK-MVE-NEXT:    vfma.f32 s11, s3, s7
+; CHECK-MVE-NEXT:    vfma.f32 s10, s2, s6
+; CHECK-MVE-NEXT:    vfma.f32 s9, s1, s5
 ; CHECK-MVE-NEXT:    vmov q0, q2
 ; CHECK-MVE-NEXT:    bx lr
 entry:
   %i = insertelement <4 x float> undef, float %src3, i32 0
   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
-  %0 = fmul <4 x float> %src1, %src2
-  %1 = fadd <4 x float> %sp, %0
+  %0 = fmul contract <4 x float> %src1, %src2
+  %1 = fadd contract <4 x float> %sp, %0
   ret <4 x float> %1
 }
 
@@ -385,12 +328,6 @@ entry:
 ; Predicated version of the same tests
 
 define arm_aapcs_vfpcc <8 x half> @vfma16_v1_pred(<8 x half> %src1, <8 x half> %src2, <8 x half> %src3) {
-; CHECK-MVE-FP-LABEL: vfma16_v1_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f16 q2, q1, q2
-; CHECK-MVE-FP-NEXT:    vpt.f16 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vaddt.f16 q0, q0, q2
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma16_v1_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -406,10 +343,10 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v1_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s8
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s15, s13
-; CHECK-MVE-NEXT:    vmla.f16 s15, s14, s12
+; CHECK-MVE-NEXT:    vfma.f16 s15, s14, s12
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s0
-; CHECK-MVE-NEXT:    vmla.f16 s14, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s14, s4, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s5
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
 ; CHECK-MVE-NEXT:    cset r0, mi
@@ -425,9 +362,9 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v1_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s1
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s12
 ; CHECK-MVE-NEXT:    vcmp.f16 s5, #0
-; CHECK-MVE-NEXT:    vmla.f16 s14, s8, s4
+; CHECK-MVE-NEXT:    vfma.f16 s14, s8, s4
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s1
-; CHECK-MVE-NEXT:    vmla.f16 s8, s5, s9
+; CHECK-MVE-NEXT:    vfma.f16 s8, s5, s9
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s12, s14
@@ -442,10 +379,10 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v1_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
-; CHECK-MVE-NEXT:    vmla.f16 s14, s8, s4
+; CHECK-MVE-NEXT:    vfma.f16 s14, s8, s4
 ; CHECK-MVE-NEXT:    vcmp.f16 s6, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s2
-; CHECK-MVE-NEXT:    vmla.f16 s8, s6, s10
+; CHECK-MVE-NEXT:    vfma.f16 s8, s6, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s7
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
@@ -460,10 +397,10 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v1_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s8
-; CHECK-MVE-NEXT:    vmla.f16 s10, s6, s4
+; CHECK-MVE-NEXT:    vfma.f16 s10, s6, s4
 ; CHECK-MVE-NEXT:    vcmp.f16 s7, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s6, s3
-; CHECK-MVE-NEXT:    vmla.f16 s6, s7, s11
+; CHECK-MVE-NEXT:    vfma.f16 s6, s7, s11
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s10
@@ -474,20 +411,14 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v1_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <8 x half> %src2, %src3
-  %1 = fadd <8 x half> %src1, %0
+  %0 = fmul contract <8 x half> %src2, %src3
+  %1 = fadd contract <8 x half> %src1, %0
   %c = fcmp olt <8 x half> %src2, zeroinitializer
   %s = select <8 x i1> %c, <8 x half> %1, <8 x half> %src1
   ret <8 x half> %s
 }
 
 define arm_aapcs_vfpcc <8 x half> @vfma16_v2_pred(<8 x half> %src1, <8 x half> %src2, <8 x half> %src3) {
-; CHECK-MVE-FP-LABEL: vfma16_v2_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f16 q2, q1, q2
-; CHECK-MVE-FP-NEXT:    vpt.f16 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vaddt.f16 q0, q2, q0
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma16_v2_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -503,10 +434,10 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v2_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s8
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s15, s13
-; CHECK-MVE-NEXT:    vmla.f16 s15, s14, s12
+; CHECK-MVE-NEXT:    vfma.f16 s15, s14, s12
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s0
-; CHECK-MVE-NEXT:    vmla.f16 s14, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s14, s4, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s5
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
 ; CHECK-MVE-NEXT:    cset r0, mi
@@ -522,9 +453,9 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v2_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s1
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s12
 ; CHECK-MVE-NEXT:    vcmp.f16 s5, #0
-; CHECK-MVE-NEXT:    vmla.f16 s14, s8, s4
+; CHECK-MVE-NEXT:    vfma.f16 s14, s8, s4
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s1
-; CHECK-MVE-NEXT:    vmla.f16 s8, s5, s9
+; CHECK-MVE-NEXT:    vfma.f16 s8, s5, s9
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s12, s14
@@ -539,10 +470,10 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v2_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
-; CHECK-MVE-NEXT:    vmla.f16 s14, s8, s4
+; CHECK-MVE-NEXT:    vfma.f16 s14, s8, s4
 ; CHECK-MVE-NEXT:    vcmp.f16 s6, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s2
-; CHECK-MVE-NEXT:    vmla.f16 s8, s6, s10
+; CHECK-MVE-NEXT:    vfma.f16 s8, s6, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s7
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
@@ -557,10 +488,10 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v2_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s8
-; CHECK-MVE-NEXT:    vmla.f16 s10, s6, s4
+; CHECK-MVE-NEXT:    vfma.f16 s10, s6, s4
 ; CHECK-MVE-NEXT:    vcmp.f16 s7, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s6, s3
-; CHECK-MVE-NEXT:    vmla.f16 s6, s7, s11
+; CHECK-MVE-NEXT:    vfma.f16 s6, s7, s11
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s10
@@ -571,20 +502,14 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_v2_pred(<8 x half> %src1, <8 x half> %
 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <8 x half> %src2, %src3
-  %1 = fadd <8 x half> %0, %src1
+  %0 = fmul contract <8 x half> %src2, %src3
+  %1 = fadd contract <8 x half> %0, %src1
   %c = fcmp olt <8 x half> %src2, zeroinitializer
   %s = select <8 x i1> %c, <8 x half> %1, <8 x half> %src1
   ret <8 x half> %s
 }
 
 define arm_aapcs_vfpcc <8 x half> @vfms16_pred(<8 x half> %src1, <8 x half> %src2, <8 x half> %src3) {
-; CHECK-MVE-FP-LABEL: vfms16_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f16 q2, q1, q2
-; CHECK-MVE-FP-NEXT:    vpt.f16 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vsubt.f16 q0, q0, q2
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfms16_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -600,10 +525,10 @@ define arm_aapcs_vfpcc <8 x half> @vfms16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s8
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s15, s13
-; CHECK-MVE-NEXT:    vmls.f16 s15, s14, s12
+; CHECK-MVE-NEXT:    vfms.f16 s15, s14, s12
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s0
-; CHECK-MVE-NEXT:    vmls.f16 s14, s4, s8
+; CHECK-MVE-NEXT:    vfms.f16 s14, s4, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s8, s5
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s9
 ; CHECK-MVE-NEXT:    cset r0, mi
@@ -619,9 +544,9 @@ define arm_aapcs_vfpcc <8 x half> @vfms16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s1
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s12
 ; CHECK-MVE-NEXT:    vcmp.f16 s5, #0
-; CHECK-MVE-NEXT:    vmls.f16 s14, s8, s4
+; CHECK-MVE-NEXT:    vfms.f16 s14, s8, s4
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s1
-; CHECK-MVE-NEXT:    vmls.f16 s8, s5, s9
+; CHECK-MVE-NEXT:    vfms.f16 s8, s5, s9
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s12, s14
@@ -636,10 +561,10 @@ define arm_aapcs_vfpcc <8 x half> @vfms16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s10
-; CHECK-MVE-NEXT:    vmls.f16 s14, s8, s4
+; CHECK-MVE-NEXT:    vfms.f16 s14, s8, s4
 ; CHECK-MVE-NEXT:    vcmp.f16 s6, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s8, s2
-; CHECK-MVE-NEXT:    vmls.f16 s8, s6, s10
+; CHECK-MVE-NEXT:    vfms.f16 s8, s6, s10
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s7
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
@@ -654,10 +579,10 @@ define arm_aapcs_vfpcc <8 x half> @vfms16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s11
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s8
-; CHECK-MVE-NEXT:    vmls.f16 s10, s6, s4
+; CHECK-MVE-NEXT:    vfms.f16 s10, s6, s4
 ; CHECK-MVE-NEXT:    vcmp.f16 s7, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s6, s3
-; CHECK-MVE-NEXT:    vmls.f16 s6, s7, s11
+; CHECK-MVE-NEXT:    vfms.f16 s6, s7, s11
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s8, s10
@@ -668,23 +593,14 @@ define arm_aapcs_vfpcc <8 x half> @vfms16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vins.f16 s3, s4
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <8 x half> %src2, %src3
-  %1 = fsub <8 x half> %src1, %0
+  %0 = fmul contract <8 x half> %src2, %src3
+  %1 = fsub contract <8 x half> %src1, %0
   %c = fcmp olt <8 x half> %src2, zeroinitializer
   %s = select <8 x i1> %c, <8 x half> %1, <8 x half> %src1
   ret <8 x half> %s
 }
 
 define arm_aapcs_vfpcc <8 x half> @vfmar16_pred(<8 x half> %src1, <8 x half> %src2, float %src3o) {
-; CHECK-MVE-FP-LABEL: vfmar16_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vcvtb.f16.f32 s8, s8
-; CHECK-MVE-FP-NEXT:    vcmp.f16 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vmov.f16 r0, s8
-; CHECK-MVE-FP-NEXT:    vmul.f16 q1, q1, r0
-; CHECK-MVE-FP-NEXT:    vpst
-; CHECK-MVE-FP-NEXT:    vaddt.f16 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfmar16_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -702,14 +618,14 @@ define arm_aapcs_vfpcc <8 x half> @vfmar16_pred(<8 x half> %src1, <8 x half> %sr
 ; CHECK-MVE-NEXT:    vcvtb.f16.f32 s8, s8
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s12
-; CHECK-MVE-NEXT:    vmla.f16 s14, s10, s8
+; CHECK-MVE-NEXT:    vfma.f16 s14, s10, s8
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s10, s12, s14
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s0
-; CHECK-MVE-NEXT:    vmla.f16 s12, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s12, s4, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
 ; CHECK-MVE-NEXT:    cset r0, mi
@@ -720,13 +636,13 @@ define arm_aapcs_vfpcc <8 x half> @vfmar16_pred(<8 x half> %src1, <8 x half> %sr
 ; CHECK-MVE-NEXT:    vmovx.f16 s10, s1
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s10
 ; CHECK-MVE-NEXT:    vcmp.f16 s5, #0
-; CHECK-MVE-NEXT:    vmla.f16 s12, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s12, s4, s8
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s10, s12
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s1
-; CHECK-MVE-NEXT:    vmla.f16 s10, s5, s8
+; CHECK-MVE-NEXT:    vfma.f16 s10, s5, s8
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s1, s1, s10
@@ -736,14 +652,14 @@ define arm_aapcs_vfpcc <8 x half> @vfmar16_pred(<8 x half> %src1, <8 x half> %sr
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s10
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
-; CHECK-MVE-NEXT:    vmla.f16 s12, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s12, s4, s8
 ; CHECK-MVE-NEXT:    vcmp.f16 s6, #0
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s10, s12
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s2
-; CHECK-MVE-NEXT:    vmla.f16 s10, s6, s8
+; CHECK-MVE-NEXT:    vfma.f16 s10, s6, s8
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
@@ -752,7 +668,7 @@ define arm_aapcs_vfpcc <8 x half> @vfmar16_pred(<8 x half> %src1, <8 x half> %sr
 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
-; CHECK-MVE-NEXT:    vmla.f16 s10, s4, s8
+; CHECK-MVE-NEXT:    vfma.f16 s10, s4, s8
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f16 s7, #0
 ; CHECK-MVE-NEXT:    cset r0, mi
@@ -760,7 +676,7 @@ define arm_aapcs_vfpcc <8 x half> @vfmar16_pred(<8 x half> %src1, <8 x half> %sr
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s10
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s6, s3
-; CHECK-MVE-NEXT:    vmla.f16 s6, s7, s8
+; CHECK-MVE-NEXT:    vfma.f16 s6, s7, s8
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s3, s3, s6
@@ -770,22 +686,14 @@ entry:
   %src3 = fptrunc float %src3o to half
   %i = insertelement <8 x half> undef, half %src3, i32 0
   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
-  %0 = fmul <8 x half> %src2, %sp
-  %1 = fadd <8 x half> %src1, %0
+  %0 = fmul contract <8 x half> %src2, %sp
+  %1 = fadd contract <8 x half> %src1, %0
   %c = fcmp olt <8 x half> %src2, zeroinitializer
   %s = select <8 x i1> %c, <8 x half> %1, <8 x half> %src1
   ret <8 x half> %s
 }
 
 define arm_aapcs_vfpcc <8 x half> @vfma16_pred(<8 x half> %src1, <8 x half> %src2, float %src3o) {
-; CHECK-MVE-FP-LABEL: vfma16_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vcvtb.f16.f32 s8, s8
-; CHECK-MVE-FP-NEXT:    vmov.f16 r0, s8
-; CHECK-MVE-FP-NEXT:    vmul.f16 q2, q0, q1
-; CHECK-MVE-FP-NEXT:    vpt.f16 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vaddt.f16 q0, q2, r0
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma16_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -803,14 +711,14 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vmovx.f16 s12, s0
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s8
-; CHECK-MVE-NEXT:    vmla.f16 s14, s12, s10
+; CHECK-MVE-NEXT:    vfma.f16 s14, s12, s10
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s10, s12, s14
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s8
-; CHECK-MVE-NEXT:    vmla.f16 s12, s0, s4
+; CHECK-MVE-NEXT:    vfma.f16 s12, s0, s4
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s5
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
 ; CHECK-MVE-NEXT:    cset r0, mi
@@ -821,13 +729,13 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vmovx.f16 s10, s1
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s8
 ; CHECK-MVE-NEXT:    vcmp.f16 s5, #0
-; CHECK-MVE-NEXT:    vmla.f16 s12, s10, s4
+; CHECK-MVE-NEXT:    vfma.f16 s12, s10, s4
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s10, s12
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s8
-; CHECK-MVE-NEXT:    vmla.f16 s10, s1, s5
+; CHECK-MVE-NEXT:    vfma.f16 s10, s1, s5
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s8
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
@@ -836,7 +744,7 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vins.f16 s1, s4
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s6
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
-; CHECK-MVE-NEXT:    vmla.f16 s12, s10, s4
+; CHECK-MVE-NEXT:    vfma.f16 s12, s10, s4
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f16 s6, #0
 ; CHECK-MVE-NEXT:    cset r0, mi
@@ -844,7 +752,7 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s10, s12
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s8
-; CHECK-MVE-NEXT:    vmla.f16 s10, s2, s6
+; CHECK-MVE-NEXT:    vfma.f16 s10, s2, s6
 ; CHECK-MVE-NEXT:    vmovx.f16 s6, s3
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
@@ -853,10 +761,10 @@ define arm_aapcs_vfpcc <8 x half> @vfma16_pred(<8 x half> %src1, <8 x half> %src
 ; CHECK-MVE-NEXT:    vins.f16 s2, s4
 ; CHECK-MVE-NEXT:    vmovx.f16 s4, s7
 ; CHECK-MVE-NEXT:    vcmp.f16 s4, #0
-; CHECK-MVE-NEXT:    vmla.f16 s10, s6, s4
+; CHECK-MVE-NEXT:    vfma.f16 s10, s6, s4
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f16 s7, #0
-; CHECK-MVE-NEXT:    vmla.f16 s8, s3, s7
+; CHECK-MVE-NEXT:    vfma.f16 s8, s3, s7
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    cmp r0, #0
 ; CHECK-MVE-NEXT:    vseleq.f16 s4, s6, s10
@@ -870,20 +778,14 @@ entry:
   %src3 = fptrunc float %src3o to half
   %i = insertelement <8 x half> undef, half %src3, i32 0
   %sp = shufflevector <8 x half> %i, <8 x half> undef, <8 x i32> zeroinitializer
-  %0 = fmul <8 x half> %src1, %src2
-  %1 = fadd <8 x half> %sp, %0
+  %0 = fmul contract <8 x half> %src1, %src2
+  %1 = fadd contract <8 x half> %sp, %0
   %c = fcmp olt <8 x half> %src2, zeroinitializer
   %s = select <8 x i1> %c, <8 x half> %1, <8 x half> %src1
   ret <8 x half> %s
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfma32_v1_pred(<4 x float> %src1, <4 x float> %src2, <4 x float> %src3) {
-; CHECK-MVE-FP-LABEL: vfma32_v1_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f32 q2, q1, q2
-; CHECK-MVE-FP-NEXT:    vpt.f32 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vaddt.f32 q0, q0, q2
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma32_v1_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -898,15 +800,15 @@ define arm_aapcs_vfpcc <4 x float> @vfma32_v1_pred(<4 x float> %src1, <4 x float
 ; CHECK-MVE-NEXT:    vcmp.f32 s7, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s2
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s3
-; CHECK-MVE-NEXT:    vmla.f32 s12, s6, s10
+; CHECK-MVE-NEXT:    vfma.f32 s12, s6, s10
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s1
-; CHECK-MVE-NEXT:    vmla.f32 s14, s7, s11
-; CHECK-MVE-NEXT:    vmla.f32 s10, s5, s9
+; CHECK-MVE-NEXT:    vfma.f32 s14, s7, s11
+; CHECK-MVE-NEXT:    vfma.f32 s10, s5, s9
 ; CHECK-MVE-NEXT:    vmov.f32 s9, s0
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f32 s5, #0
-; CHECK-MVE-NEXT:    vmla.f32 s9, s4, s8
+; CHECK-MVE-NEXT:    vfma.f32 s9, s4, s8
 ; CHECK-MVE-NEXT:    cset r1, mi
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f32 s6, #0
@@ -923,20 +825,14 @@ define arm_aapcs_vfpcc <4 x float> @vfma32_v1_pred(<4 x float> %src1, <4 x float
 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s0, s9
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <4 x float> %src2, %src3
-  %1 = fadd <4 x float> %src1, %0
+  %0 = fmul contract <4 x float> %src2, %src3
+  %1 = fadd contract <4 x float> %src1, %0
   %c = fcmp olt <4 x float> %src2, zeroinitializer
   %s = select <4 x i1> %c, <4 x float> %1, <4 x float> %src1
   ret <4 x float> %s
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfma32_v2_pred(<4 x float> %src1, <4 x float> %src2, <4 x float> %src3) {
-; CHECK-MVE-FP-LABEL: vfma32_v2_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f32 q2, q1, q2
-; CHECK-MVE-FP-NEXT:    vpt.f32 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vaddt.f32 q0, q2, q0
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfma32_v2_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -951,15 +847,15 @@ define arm_aapcs_vfpcc <4 x float> @vfma32_v2_pred(<4 x float> %src1, <4 x float
 ; CHECK-MVE-NEXT:    vcmp.f32 s7, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s2
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s3
-; CHECK-MVE-NEXT:    vmla.f32 s12, s6, s10
+; CHECK-MVE-NEXT:    vfma.f32 s12, s6, s10
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s1
-; CHECK-MVE-NEXT:    vmla.f32 s14, s7, s11
-; CHECK-MVE-NEXT:    vmla.f32 s10, s5, s9
+; CHECK-MVE-NEXT:    vfma.f32 s14, s7, s11
+; CHECK-MVE-NEXT:    vfma.f32 s10, s5, s9
 ; CHECK-MVE-NEXT:    vmov.f32 s9, s0
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f32 s5, #0
-; CHECK-MVE-NEXT:    vmla.f32 s9, s4, s8
+; CHECK-MVE-NEXT:    vfma.f32 s9, s4, s8
 ; CHECK-MVE-NEXT:    cset r1, mi
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f32 s6, #0
@@ -976,20 +872,14 @@ define arm_aapcs_vfpcc <4 x float> @vfma32_v2_pred(<4 x float> %src1, <4 x float
 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s0, s9
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <4 x float> %src2, %src3
-  %1 = fadd <4 x float> %0, %src1
+  %0 = fmul contract <4 x float> %src2, %src3
+  %1 = fadd contract <4 x float> %0, %src1
   %c = fcmp olt <4 x float> %src2, zeroinitializer
   %s = select <4 x i1> %c, <4 x float> %1, <4 x float> %src1
   ret <4 x float> %s
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfms32_pred(<4 x float> %src1, <4 x float> %src2, <4 x float> %src3) {
-; CHECK-MVE-FP-LABEL: vfms32_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmul.f32 q2, q1, q2
-; CHECK-MVE-FP-NEXT:    vpt.f32 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vsubt.f32 q0, q0, q2
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfms32_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -1004,15 +894,15 @@ define arm_aapcs_vfpcc <4 x float> @vfms32_pred(<4 x float> %src1, <4 x float> %
 ; CHECK-MVE-NEXT:    vcmp.f32 s7, #0
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s2
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s3
-; CHECK-MVE-NEXT:    vmls.f32 s12, s6, s10
+; CHECK-MVE-NEXT:    vfms.f32 s12, s6, s10
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s1
-; CHECK-MVE-NEXT:    vmls.f32 s14, s7, s11
-; CHECK-MVE-NEXT:    vmls.f32 s10, s5, s9
+; CHECK-MVE-NEXT:    vfms.f32 s14, s7, s11
+; CHECK-MVE-NEXT:    vfms.f32 s10, s5, s9
 ; CHECK-MVE-NEXT:    vmov.f32 s9, s0
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f32 s5, #0
-; CHECK-MVE-NEXT:    vmls.f32 s9, s4, s8
+; CHECK-MVE-NEXT:    vfms.f32 s9, s4, s8
 ; CHECK-MVE-NEXT:    cset r1, mi
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f32 s6, #0
@@ -1029,22 +919,14 @@ define arm_aapcs_vfpcc <4 x float> @vfms32_pred(<4 x float> %src1, <4 x float> %
 ; CHECK-MVE-NEXT:    vseleq.f32 s0, s0, s9
 ; CHECK-MVE-NEXT:    bx lr
 entry:
-  %0 = fmul <4 x float> %src2, %src3
-  %1 = fsub <4 x float> %src1, %0
+  %0 = fmul contract <4 x float> %src2, %src3
+  %1 = fsub contract <4 x float> %src1, %0
   %c = fcmp olt <4 x float> %src2, zeroinitializer
   %s = select <4 x i1> %c, <4 x float> %1, <4 x float> %src1
   ret <4 x float> %s
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfmar32_pred(<4 x float> %src1, <4 x float> %src2, float %src3) {
-; CHECK-MVE-FP-LABEL: vfmar32_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmov r0, s8
-; CHECK-MVE-FP-NEXT:    vcmp.f32 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vmul.f32 q1, q1, r0
-; CHECK-MVE-FP-NEXT:    vpst
-; CHECK-MVE-FP-NEXT:    vaddt.f32 q0, q0, q1
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfmar32_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -1062,10 +944,10 @@ define arm_aapcs_vfpcc <4 x float> @vfmar32_pred(<4 x float> %src1, <4 x float>
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s1
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s3
 ; CHECK-MVE-NEXT:    vmov.f32 s9, s0
-; CHECK-MVE-NEXT:    vmla.f32 s10, s6, s8
-; CHECK-MVE-NEXT:    vmla.f32 s12, s5, s8
-; CHECK-MVE-NEXT:    vmla.f32 s14, s7, s8
-; CHECK-MVE-NEXT:    vmla.f32 s9, s4, s8
+; CHECK-MVE-NEXT:    vfma.f32 s10, s6, s8
+; CHECK-MVE-NEXT:    vfma.f32 s12, s5, s8
+; CHECK-MVE-NEXT:    vfma.f32 s14, s7, s8
+; CHECK-MVE-NEXT:    vfma.f32 s9, s4, s8
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f32 s5, #0
@@ -1087,21 +969,14 @@ define arm_aapcs_vfpcc <4 x float> @vfmar32_pred(<4 x float> %src1, <4 x float>
 entry:
   %i = insertelement <4 x float> undef, float %src3, i32 0
   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
-  %0 = fmul <4 x float> %src2, %sp
-  %1 = fadd <4 x float> %src1, %0
+  %0 = fmul contract <4 x float> %src2, %sp
+  %1 = fadd contract <4 x float> %src1, %0
   %c = fcmp olt <4 x float> %src2, zeroinitializer
   %s = select <4 x i1> %c, <4 x float> %1, <4 x float> %src1
   ret <4 x float> %s
 }
 
 define arm_aapcs_vfpcc <4 x float> @vfmas32_pred(<4 x float> %src1, <4 x float> %src2, float %src3) {
-; CHECK-MVE-FP-LABEL: vfmas32_pred:
-; CHECK-MVE-FP:       @ %bb.0: @ %entry
-; CHECK-MVE-FP-NEXT:    vmov r0, s8
-; CHECK-MVE-FP-NEXT:    vmul.f32 q2, q0, q1
-; CHECK-MVE-FP-NEXT:    vpt.f32 lt, q1, zr
-; CHECK-MVE-FP-NEXT:    vaddt.f32 q0, q2, r0
-; CHECK-MVE-FP-NEXT:    bx lr
 ;
 ; CHECK-MVE-VMLA-LABEL: vfmas32_pred:
 ; CHECK-MVE-VMLA:       @ %bb.0: @ %entry
@@ -1118,10 +993,10 @@ define arm_aapcs_vfpcc <4 x float> @vfmas32_pred(<4 x float> %src1, <4 x float>
 ; CHECK-MVE-NEXT:    vmov.f32 s10, s8
 ; CHECK-MVE-NEXT:    vmov.f32 s12, s8
 ; CHECK-MVE-NEXT:    vmov.f32 s14, s8
-; CHECK-MVE-NEXT:    vmla.f32 s8, s0, s4
-; CHECK-MVE-NEXT:    vmla.f32 s10, s2, s6
-; CHECK-MVE-NEXT:    vmla.f32 s12, s1, s5
-; CHECK-MVE-NEXT:    vmla.f32 s14, s3, s7
+; CHECK-MVE-NEXT:    vfma.f32 s8, s0, s4
+; CHECK-MVE-NEXT:    vfma.f32 s10, s2, s6
+; CHECK-MVE-NEXT:    vfma.f32 s12, s1, s5
+; CHECK-MVE-NEXT:    vfma.f32 s14, s3, s7
 ; CHECK-MVE-NEXT:    cset r0, mi
 ; CHECK-MVE-NEXT:    vmrs APSR_nzcv, fpscr
 ; CHECK-MVE-NEXT:    vcmp.f32 s5, #0
@@ -1143,8 +1018,8 @@ define arm_aapcs_vfpcc <4 x float> @vfmas32_pred(<4 x float> %src1, <4 x float>
 entry:
   %i = insertelement <4 x float> undef, float %src3, i32 0
   %sp = shufflevector <4 x float> %i, <4 x float> undef, <4 x i32> zeroinitializer
-  %0 = fmul <4 x float> %src1, %src2
-  %1 = fadd <4 x float> %sp, %0
+  %0 = fmul contract <4 x float> %src1, %src2
+  %1 = fadd contract <4 x float> %sp, %0
   %c = fcmp olt <4 x float> %src2, zeroinitializer
   %s = select <4 x i1> %c, <4 x float> %1, <4 x float> %src1
   ret <4 x float> %s



More information about the cfe-commits mailing list