mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-19 04:32:19 +00:00
Add a xform to the DAG combiner.
Transform: (fsub x, (fadd x, y)) -> (fneg y) and (fsub x, (fadd y, x)) -> (fneg y) if 'unsafe math' is specified. <rdar://problem/7540295> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152777 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
59c5d7bf2c
commit
5a89434236
@ -5568,6 +5568,23 @@ SDValue DAGCombiner::visitFSUB(SDNode *N) {
|
||||
return DAG.getNode(ISD::FADD, N->getDebugLoc(), VT, N0,
|
||||
GetNegatedExpression(N1, DAG, LegalOperations));
|
||||
|
||||
// If 'unsafe math' is enabled, fold
|
||||
// (fsub x, (fadd x, y)) -> (fneg y) &
|
||||
// (fsub x, (fadd y, x)) -> (fneg y)
|
||||
if (DAG.getTarget().Options.UnsafeFPMath) {
|
||||
if (N1.getOpcode() == ISD::FADD) {
|
||||
SDValue N10 = N1->getOperand(0);
|
||||
SDValue N11 = N1->getOperand(1);
|
||||
|
||||
if (N10 == N0 && isNegatibleForFree(N11, LegalOperations, TLI,
|
||||
&DAG.getTarget().Options))
|
||||
return GetNegatedExpression(N11, DAG, LegalOperations);
|
||||
else if (N11 == N0 && isNegatibleForFree(N10, LegalOperations, TLI,
|
||||
&DAG.getTarget().Options))
|
||||
return GetNegatedExpression(N10, DAG, LegalOperations);
|
||||
}
|
||||
}
|
||||
|
||||
return SDValue();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user