; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=riscv64 -mattr=+v -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s declare @llvm.vp.fmul.nxv1f64( %x, %y, %m, i32 %vl) declare @llvm.vp.fsub.nxv1f64( %x, %y, %m, i32 %vl) declare @llvm.vp.fneg.nxv1f64( %x, %m, i32 %vl) ; (fsub (fmul x, y), z)) -> (fma x, y, (fneg z)) define @test1( %x, %y, %z, %m, i32 zeroext %vl) { ; CHECK-LABEL: test1: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma ; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t ; CHECK-NEXT: vmv.v.v v8, v9 ; CHECK-NEXT: ret %1 = call fast @llvm.vp.fmul.nxv1f64( %x, %y, %m, i32 %vl) %2 = call fast @llvm.vp.fsub.nxv1f64( %1, %z, %m, i32 %vl) ret %2 } ; (fsub z, (fmul x, y))) -> (fma (fneg y), x, z) define @test2( %x, %y, %z, %m, i32 zeroext %vl) { ; CHECK-LABEL: test2: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma ; CHECK-NEXT: vfnmsub.vv v9, v8, v10, v0.t ; CHECK-NEXT: vmv.v.v v8, v9 ; CHECK-NEXT: ret %1 = call fast @llvm.vp.fmul.nxv1f64( %x, %y, %m, i32 %vl) %2 = call fast @llvm.vp.fsub.nxv1f64( %z, %1, %m, i32 %vl) ret %2 } ; (fsub (fneg (fmul x, y))), z) -> (fma (fneg x), y, (fneg z)) define @test3( %x, %y, %z, %m, i32 zeroext %vl) { ; CHECK-LABEL: test3: ; CHECK: # %bb.0: ; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma ; CHECK-NEXT: vfmsub.vv v9, v8, v10, v0.t ; CHECK-NEXT: vmv.v.v v8, v9 ; CHECK-NEXT: ret %1 = call fast @llvm.vp.fmul.nxv1f64( %x, %y, %m, i32 %vl) %2 = call fast @llvm.vp.fneg.nxv1f64( %1, %m, i32 %vl) %3 = call fast @llvm.vp.fsub.nxv1f64( %1, %z, %m, i32 %vl) ret %3 }