From fedced7bc3702f2db5c5d78531b7f58e0f6c9c50 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Thu, 20 Apr 2006 23:55:59 +0000 Subject: [PATCH] Fix a really subtle and obnoxious memory bug that caused issues with an llvm-gcc4 boostrap. Whenever a node is deleted by the dag combiner, it *must* be returned by the visit function, or the dag combiner will not know that the node has been processed (and will, e.g., send it to the target dag combine xforms). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@27922 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index 26448bba5b8..7019f8f646a 100644 --- a/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -1080,7 +1080,7 @@ SDOperand DAGCombiner::visitAND(SDNode *N) { // zero_extend, to avoid duplicating things. This will later cause this // AND to be folded. CombineTo(N0.Val, Zext); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } } // fold (and (setcc x), (setcc y)) -> (setcc (and x, y)) @@ -1157,7 +1157,7 @@ SDOperand DAGCombiner::visitAND(SDNode *N) { EVT); AddToWorkList(N); CombineTo(N0.Val, ExtLoad, ExtLoad.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } } // fold (zext_inreg (sextload x)) -> (zextload x) iff load has one use @@ -1172,7 +1172,7 @@ SDOperand DAGCombiner::visitAND(SDNode *N) { EVT); AddToWorkList(N); CombineTo(N0.Val, ExtLoad, ExtLoad.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } } @@ -1212,7 +1212,7 @@ SDOperand DAGCombiner::visitAND(SDNode *N) { N0.getOperand(2), EVT); AddToWorkList(N); CombineTo(N0.Val, Load, Load.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } } @@ -1797,7 +1797,7 @@ SDOperand DAGCombiner::visitSIGN_EXTEND(SDNode *N) { CombineTo(N, ExtLoad); CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad), ExtLoad.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } // fold (sext (sextload x)) -> (sext (truncate (sextload x))) @@ -1810,7 +1810,7 @@ SDOperand DAGCombiner::visitSIGN_EXTEND(SDNode *N) { CombineTo(N, ExtLoad); CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad), ExtLoad.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } return SDOperand(); @@ -1840,7 +1840,7 @@ SDOperand DAGCombiner::visitZERO_EXTEND(SDNode *N) { CombineTo(N, ExtLoad); CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad), ExtLoad.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } // fold (zext (zextload x)) -> (zext (truncate (zextload x))) @@ -1853,7 +1853,7 @@ SDOperand DAGCombiner::visitZERO_EXTEND(SDNode *N) { CombineTo(N, ExtLoad); CombineTo(N0.Val, DAG.getNode(ISD::TRUNCATE, N0.getValueType(), ExtLoad), ExtLoad.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } return SDOperand(); } @@ -1915,7 +1915,7 @@ SDOperand DAGCombiner::visitSIGN_EXTEND_INREG(SDNode *N) { EVT); CombineTo(N, ExtLoad); CombineTo(N0.Val, ExtLoad, ExtLoad.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } // fold (sext_inreg (zextload x)) -> (sextload x) iff load has one use if (N0.getOpcode() == ISD::ZEXTLOAD && N0.hasOneUse() && @@ -1926,7 +1926,7 @@ SDOperand DAGCombiner::visitSIGN_EXTEND_INREG(SDNode *N) { EVT); CombineTo(N, ExtLoad); CombineTo(N0.Val, ExtLoad, ExtLoad.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } return SDOperand(); } @@ -1975,7 +1975,7 @@ SDOperand DAGCombiner::visitTRUNCATE(SDNode *N) { SDOperand Load = DAG.getLoad(VT, N0.getOperand(0), NewPtr,N0.getOperand(2)); AddToWorkList(N); CombineTo(N0.Val, Load, Load.getValue(1)); - return SDOperand(); + return SDOperand(N, 0); // Return N so it doesn't get rechecked! } return SDOperand(); }