mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-19 01:27:40 +00:00
Fold multiply by 0 or 1 when in UnsafeFPMath mode in SelectionDAG::getNode().
This folding happens as early as possible for performance reasons, and to make sure it isn't foiled by other transforms (e.g. forming FMAs). llvm-svn: 163519
This commit is contained in:
parent
eb6c004862
commit
d331ea92fa
@ -2816,6 +2816,24 @@ SDValue SelectionDAG::getNode(unsigned Opcode, DebugLoc DL, EVT VT,
|
||||
if (ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N2))
|
||||
if (CFP->getValueAPF().isZero())
|
||||
return N1;
|
||||
} else if (Opcode == ISD::FMUL) {
|
||||
ConstantFPSDNode *CFP = dyn_cast<ConstantFPSDNode>(N1);
|
||||
SDValue V = N2;
|
||||
|
||||
// If the first operand isn't the constant, try the second
|
||||
if (!CFP) {
|
||||
CFP = dyn_cast<ConstantFPSDNode>(N2);
|
||||
V = N1;
|
||||
}
|
||||
|
||||
if (CFP) {
|
||||
// 0*x --> 0
|
||||
if (CFP->isZero())
|
||||
return SDValue(CFP,0);
|
||||
// 1*x --> x
|
||||
if (CFP->isExactlyValue(1.0))
|
||||
return V;
|
||||
}
|
||||
}
|
||||
}
|
||||
assert(VT.isFloatingPoint() && "This operator only applies to FP types!");
|
||||
|
Loading…
Reference in New Issue
Block a user