From: Dan Gohman Date: Thu, 16 Apr 2009 20:59:02 +0000 (+0000) Subject: In the list-burr's pseudo two-addr dependency heuristics, don't X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0e4042d30b2b47329166f5f784ef3c70f6b408cc;p=oota-llvm.git In the list-burr's pseudo two-addr dependency heuristics, don't add dependencies on nodes with exactly one successor which is a COPY_TO_REGCLASS node. In the case that the copy is coalesced away, the dependence should be on the user of the copy, rather than the copy itself. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@69309 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp index d7a96362c24..20a081d0544 100644 --- a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp +++ b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp @@ -1389,6 +1389,16 @@ void RegReductionPriorityQueue::AddPseudoTwoAddrDeps() { if (SuccSU->getHeight() < SU->getHeight() && (SU->getHeight() - SuccSU->getHeight()) > 1) continue; + // Skip past COPY_TO_REGCLASS nodes, so that the pseudo edge + // constrains whatever is using the copy, instead of the copy + // itself. In the case that the copy is coalesced, this + // preserves the intent of the pseudo two-address heurietics. + while (SuccSU->Succs.size() == 1 && + SuccSU->getNode()->isMachineOpcode() && + SuccSU->getNode()->getMachineOpcode() == + TargetInstrInfo::COPY_TO_REGCLASS) + SuccSU = SuccSU->Succs.front().getSUnit(); + // Don't constrain non-instruction nodes. if (!SuccSU->getNode() || !SuccSU->getNode()->isMachineOpcode()) continue; // Don't constrain nodes with physical register defs if the