diff --git a/llvm/lib/Target/X86/X86InstrInfo.cpp b/llvm/lib/Target/X86/X86InstrInfo.cpp index f41a27aba3ffb8..245346d827311e 100644 --- a/llvm/lib/Target/X86/X86InstrInfo.cpp +++ b/llvm/lib/Target/X86/X86InstrInfo.cpp @@ -4704,6 +4704,10 @@ static MachineInstr *FuseInst(MachineFunction &MF, unsigned Opcode, updateOperandRegConstraints(MF, *NewMI, TII); + // Copy the NoFPExcept flag from the instruction we're fusing. + if (MI.getFlag(MachineInstr::MIFlag::NoFPExcept)) + NewMI->setFlag(MachineInstr::MIFlag::NoFPExcept); + MachineBasicBlock *MBB = InsertPt->getParent(); MBB->insert(InsertPt, NewMI); diff --git a/llvm/test/CodeGen/X86/stack-folding-fp-nofpexcept.mir b/llvm/test/CodeGen/X86/stack-folding-fp-nofpexcept.mir index 7a838482d1bbd9..479c5d45a1942f 100644 --- a/llvm/test/CodeGen/X86/stack-folding-fp-nofpexcept.mir +++ b/llvm/test/CodeGen/X86/stack-folding-fp-nofpexcept.mir @@ -39,8 +39,8 @@ body: | ; CHECK: MOVAPSmr %stack.0, 1, $noreg, 0, $noreg, $xmm1 :: (store 16 into %stack.0) ; CHECK: [[COPY:%[0-9]+]]:vr128 = COPY $xmm0 ; CHECK: INLINEASM &nop, 1, 7405578, def dead %2, 12, implicit-def dead early-clobber $xmm2, 12, implicit-def dead early-clobber $xmm3, 12, implicit-def dead early-clobber $xmm4, 12, implicit-def dead early-clobber $xmm5, 12, implicit-def dead early-clobber $xmm6, 12, implicit-def dead early-clobber $xmm7, 12, implicit-def dead early-clobber $xmm8, 12, implicit-def dead early-clobber $xmm9, 12, implicit-def dead early-clobber $xmm10, 12, implicit-def dead early-clobber $xmm11, 12, implicit-def dead early-clobber $xmm12, 12, implicit-def dead early-clobber $xmm13, 12, implicit-def dead early-clobber $xmm14, 12, implicit-def dead early-clobber $xmm15, 12, implicit-def dead early-clobber $eflags - ; CHECK: [[ADDPDrm:%[0-9]+]]:vr128 = ADDPDrm [[ADDPDrm]], %stack.0, 1, $noreg, 0, $noreg, implicit $mxcsr :: (load 16 from %stack.0) - ; CHECK: $xmm0 = COPY [[ADDPDrm]] + ; CHECK: [[COPY]]:vr128 = nofpexcept ADDPDrm [[COPY]], %stack.0, 1, $noreg, 0, $noreg, implicit $mxcsr :: (load 16 from %stack.0) + ; CHECK: $xmm0 = COPY [[COPY]] ; CHECK: RET 0, $xmm0 %1:vr128 = COPY $xmm1 %3:vr128 = COPY $xmm0