mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 00:11:00 +00:00
Revert "[DAGCombiner] Split up an indexed load if only the base pointer value is live"
This reverts r208640 (I've just XFAILed the test) because it broke ppc64/Linux self-hosting. Because nearly every regression test triggers a segfault, I hope this will be easy to fix. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@209747 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e8075c6877
commit
9b77161927
@ -167,7 +167,6 @@ namespace {
|
||||
|
||||
bool CombineToPreIndexedLoadStore(SDNode *N);
|
||||
bool CombineToPostIndexedLoadStore(SDNode *N);
|
||||
SDValue SplitIndexingFromLoad(LoadSDNode *LD);
|
||||
bool SliceUpLoad(SDNode *N);
|
||||
|
||||
void ReplaceLoadWithPromotedLoad(SDNode *Load, SDNode *ExtLoad);
|
||||
@ -762,14 +761,10 @@ CommitTargetLoweringOpt(const TargetLowering::TargetLoweringOpt &TLO) {
|
||||
|
||||
// If the operands of this node are only used by the node, they will now
|
||||
// be dead. Make sure to visit them first to delete dead nodes early.
|
||||
for (unsigned i = 0, e = TLO.Old.getNode()->getNumOperands(); i != e; ++i) {
|
||||
SDNode *Op = TLO.Old.getNode()->getOperand(i).getNode();
|
||||
// For an operand generating multiple values, one of the values may
|
||||
// become dead allowing further simplification (e.g. split index
|
||||
// arithmetic from an indexed load).
|
||||
if (Op->hasOneUse() || Op->getNumValues() > 1)
|
||||
AddToWorkList(Op);
|
||||
}
|
||||
for (unsigned i = 0, e = TLO.Old.getNode()->getNumOperands(); i != e; ++i)
|
||||
if (TLO.Old.getNode()->getOperand(i).getNode()->hasOneUse())
|
||||
AddToWorkList(TLO.Old.getNode()->getOperand(i).getNode());
|
||||
|
||||
DAG.DeleteNode(TLO.Old.getNode());
|
||||
}
|
||||
}
|
||||
@ -7849,17 +7844,6 @@ bool DAGCombiner::CombineToPostIndexedLoadStore(SDNode *N) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// \brief Return the base-pointer arithmetic from an indexed \p LD.
|
||||
SDValue DAGCombiner::SplitIndexingFromLoad(LoadSDNode *LD) {
|
||||
ISD::MemIndexedMode AM = LD->getAddressingMode();
|
||||
assert(AM != ISD::UNINDEXED);
|
||||
SDValue BP = LD->getOperand(1);
|
||||
SDValue Inc = LD->getOperand(2);
|
||||
unsigned Opc =
|
||||
(AM == ISD::PRE_INC || AM == ISD::POST_INC ? ISD::ADD : ISD::SUB);
|
||||
return DAG.getNode(Opc, SDLoc(LD), BP.getSimpleValueType(), BP, Inc);
|
||||
}
|
||||
|
||||
SDValue DAGCombiner::visitLOAD(SDNode *N) {
|
||||
LoadSDNode *LD = cast<LoadSDNode>(N);
|
||||
SDValue Chain = LD->getChain();
|
||||
@ -7896,16 +7880,8 @@ SDValue DAGCombiner::visitLOAD(SDNode *N) {
|
||||
} else {
|
||||
// Indexed loads.
|
||||
assert(N->getValueType(2) == MVT::Other && "Malformed indexed loads?");
|
||||
if (!N->hasAnyUseOfValue(0)) {
|
||||
if (!N->hasAnyUseOfValue(0) && !N->hasAnyUseOfValue(1)) {
|
||||
SDValue Undef = DAG.getUNDEF(N->getValueType(0));
|
||||
SDValue Index;
|
||||
if (N->hasAnyUseOfValue(1)) {
|
||||
Index = SplitIndexingFromLoad(LD);
|
||||
// Try to fold the base pointer arithmetic into subsequent loads and
|
||||
// stores.
|
||||
AddUsersToWorkList(N);
|
||||
} else
|
||||
Index = DAG.getUNDEF(N->getValueType(1));
|
||||
DEBUG(dbgs() << "\nReplacing.7 ";
|
||||
N->dump(&DAG);
|
||||
dbgs() << "\nWith: ";
|
||||
@ -7913,7 +7889,8 @@ SDValue DAGCombiner::visitLOAD(SDNode *N) {
|
||||
dbgs() << " and 2 other values\n");
|
||||
WorkListRemover DeadNodes(*this);
|
||||
DAG.ReplaceAllUsesOfValueWith(SDValue(N, 0), Undef);
|
||||
DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1), Index);
|
||||
DAG.ReplaceAllUsesOfValueWith(SDValue(N, 1),
|
||||
DAG.getUNDEF(N->getValueType(1)));
|
||||
DAG.ReplaceAllUsesOfValueWith(SDValue(N, 2), Chain);
|
||||
removeFromWorkList(N);
|
||||
DAG.DeleteNode(N);
|
||||
|
@ -1,5 +1,8 @@
|
||||
; RUN: llc -mcpu=cyclone < %s | FileCheck %s
|
||||
|
||||
; r208640 broke ppc64/Linux self-hosting; xfailing while this is worked on.
|
||||
; XFAIL: *
|
||||
|
||||
target datalayout = "e-i64:64-n32:64-S128"
|
||||
target triple = "arm64-apple-ios"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user