Skip to content

Commit 9ae04a7

Browse files
committed
[RISCV] Don't set nsw/nuw/exact flag after MachineCombiner reassociation.
This matches what PowerPC and X86 do.
1 parent d1e9c7b commit 9ae04a7

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfo.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,9 +1614,18 @@ void RISCVInstrInfo::setSpecialOperandAttr(MachineInstr &OldMI1,
16141614
MachineInstr &OldMI2,
16151615
MachineInstr &NewMI1,
16161616
MachineInstr &NewMI2) const {
1617+
// Propagate FP flags from the original instructions.
1618+
// But clear poison-generating flags because those may not be valid now.
16171619
uint32_t IntersectedFlags = OldMI1.getFlags() & OldMI2.getFlags();
16181620
NewMI1.setFlags(IntersectedFlags);
1621+
NewMI1.clearFlag(MachineInstr::MIFlag::NoSWrap);
1622+
NewMI1.clearFlag(MachineInstr::MIFlag::NoUWrap);
1623+
NewMI1.clearFlag(MachineInstr::MIFlag::IsExact);
1624+
16191625
NewMI2.setFlags(IntersectedFlags);
1626+
NewMI2.clearFlag(MachineInstr::MIFlag::NoSWrap);
1627+
NewMI2.clearFlag(MachineInstr::MIFlag::NoUWrap);
1628+
NewMI2.clearFlag(MachineInstr::MIFlag::IsExact);
16201629
}
16211630

16221631
void RISCVInstrInfo::finalizeInsInstrs(

0 commit comments

Comments
 (0)