Changes in directory llvm/lib/CodeGen/SelectionDAG:
DAGCombiner.cpp updated: 1.274 -> 1.275 --- Log message: Avoid combining indexed load further. --- Diffs of the changes: (+14 -8) DAGCombiner.cpp | 22 ++++++++++++++-------- 1 files changed, 14 insertions(+), 8 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.274 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.275 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.274 Sun Mar 4 14:40:38 2007 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Wed Mar 7 02:07:03 2007 @@ -1245,7 +1245,7 @@ SimplifyDemandedBits(SDOperand(N, 0))) return SDOperand(N, 0); // fold (zext_inreg (extload x)) -> (zextload x) - if (ISD::isEXTLoad(N0.Val)) { + if (ISD::isEXTLoad(N0.Val) && ISD::isUNINDEXEDLoad(N0.Val)) { LoadSDNode *LN0 = cast<LoadSDNode>(N0); MVT::ValueType EVT = LN0->getLoadedVT(); // If we zero all the possible extended bits, then we can turn this into @@ -1261,7 +1261,8 @@ } } // fold (zext_inreg (sextload x)) -> (zextload x) iff load has one use - if (ISD::isSEXTLoad(N0.Val) && N0.hasOneUse()) { + if (ISD::isSEXTLoad(N0.Val) && ISD::isUNINDEXEDLoad(N0.Val) && + N0.hasOneUse()) { LoadSDNode *LN0 = cast<LoadSDNode>(N0); MVT::ValueType EVT = LN0->getLoadedVT(); // If we zero all the possible extended bits, then we can turn this into @@ -1282,6 +1283,7 @@ if (N1C && N0.getOpcode() == ISD::LOAD) { LoadSDNode *LN0 = cast<LoadSDNode>(N0); if (LN0->getExtensionType() != ISD::SEXTLOAD && + LN0->getAddressingMode() == ISD::UNINDEXED && N0.hasOneUse()) { MVT::ValueType EVT, LoadedVT; if (N1C->getValue() == 255) @@ -2064,7 +2066,8 @@ // fold (sext (sextload x)) -> (sext (truncate (sextload x))) // fold (sext ( extload x)) -> (sext (truncate (sextload x))) - if ((ISD::isSEXTLoad(N0.Val) || ISD::isEXTLoad(N0.Val)) && N0.hasOneUse()) { + if ((ISD::isSEXTLoad(N0.Val) || ISD::isEXTLoad(N0.Val)) && + ISD::isUNINDEXEDLoad(N0.Val) && N0.hasOneUse()) { LoadSDNode *LN0 = cast<LoadSDNode>(N0); MVT::ValueType EVT = LN0->getLoadedVT(); if (!AfterLegalize || TLI.isLoadXLegal(ISD::SEXTLOAD, EVT)) { @@ -2135,7 +2138,8 @@ // fold (zext (zextload x)) -> (zext (truncate (zextload x))) // fold (zext ( extload x)) -> (zext (truncate (zextload x))) - if ((ISD::isZEXTLoad(N0.Val) || ISD::isEXTLoad(N0.Val)) && N0.hasOneUse()) { + if ((ISD::isZEXTLoad(N0.Val) || ISD::isEXTLoad(N0.Val)) && + ISD::isUNINDEXEDLoad(N0.Val) && N0.hasOneUse()) { LoadSDNode *LN0 = cast<LoadSDNode>(N0); MVT::ValueType EVT = LN0->getLoadedVT(); SDOperand ExtLoad = DAG.getExtLoad(ISD::ZEXTLOAD, VT, LN0->getChain(), @@ -2205,7 +2209,8 @@ // fold (aext (zextload x)) -> (aext (truncate (zextload x))) // fold (aext (sextload x)) -> (aext (truncate (sextload x))) // fold (aext ( extload x)) -> (aext (truncate (extload x))) - if (N0.getOpcode() == ISD::LOAD && !ISD::isNON_EXTLoad(N0.Val) && + if (N0.getOpcode() == ISD::LOAD && + !ISD::isNON_EXTLoad(N0.Val) && ISD::isUNINDEXEDLoad(N0.Val) && N0.hasOneUse()) { LoadSDNode *LN0 = cast<LoadSDNode>(N0); MVT::ValueType EVT = LN0->getLoadedVT(); @@ -2263,6 +2268,7 @@ // fold (sext_inreg (extload x)) -> (sextload x) if (ISD::isEXTLoad(N0.Val) && + ISD::isUNINDEXEDLoad(N0.Val) && EVT == cast<LoadSDNode>(N0)->getLoadedVT() && (!AfterLegalize || TLI.isLoadXLegal(ISD::SEXTLOAD, EVT))) { LoadSDNode *LN0 = cast<LoadSDNode>(N0); @@ -2274,7 +2280,8 @@ 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 (ISD::isZEXTLoad(N0.Val) && N0.hasOneUse() && + if (ISD::isZEXTLoad(N0.Val) && ISD::isUNINDEXEDLoad(N0.Val) && + N0.hasOneUse() && EVT == cast<LoadSDNode>(N0)->getLoadedVT() && (!AfterLegalize || TLI.isLoadXLegal(ISD::SEXTLOAD, EVT))) { LoadSDNode *LN0 = cast<LoadSDNode>(N0); @@ -2868,8 +2875,7 @@ if (LD->getAddressingMode() != ISD::UNINDEXED) return false; VT = LD->getLoadedVT(); - if (LD->getAddressingMode() != ISD::UNINDEXED && - !TLI.isIndexedLoadLegal(ISD::PRE_INC, VT) && + if (!TLI.isIndexedLoadLegal(ISD::PRE_INC, VT) && !TLI.isIndexedLoadLegal(ISD::PRE_DEC, VT)) return false; Ptr = LD->getBasePtr(); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits