mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Fix a bug where DAGCombine was producing an illegal ConstantFP
node after legalize, and remove the workaround code from the ARM backend. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78615 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -3721,7 +3721,18 @@ SDValue DAGCombiner::visitBIT_CONVERT(SDNode *N) {
|
||||
// If the input is a constant, let getNode fold it.
|
||||
if (isa<ConstantSDNode>(N0) || isa<ConstantFPSDNode>(N0)) {
|
||||
SDValue Res = DAG.getNode(ISD::BIT_CONVERT, N->getDebugLoc(), VT, N0);
|
||||
if (Res.getNode() != N) return Res;
|
||||
if (Res.getNode() != N) {
|
||||
if (!LegalOperations ||
|
||||
TLI.isOperationLegal(Res.getNode()->getOpcode(), VT))
|
||||
return Res;
|
||||
|
||||
// Folding it resulted in an illegal node, and it's too late to
|
||||
// do that. Clean up the old node and forego the transformation.
|
||||
// Ideally this won't happen very often, because instcombine
|
||||
// and the earlier dagcombine runs (where illegal nodes are
|
||||
// permitted) should have folded most of them already.
|
||||
DAG.DeleteNode(Res.getNode());
|
||||
}
|
||||
}
|
||||
|
||||
// (conv (conv x, t1), t2) -> (conv x, t2)
|
||||
|
Reference in New Issue
Block a user