summaryrefslogtreecommitdiff
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorAndrew Trick <atrick@apple.com>2010-12-23 03:43:21 +0000
committerAndrew Trick <atrick@apple.com>2010-12-23 03:43:21 +0000
commitcb7947b81be4cb55fc647ea3722eb7a8613545cb (patch)
tree41b3598a854282a28cb3552e728619c8c00b6852 /lib/CodeGen
parent1b1658741aa4bc88fc488ef217d9603294e16c58 (diff)
downloadllvm-cb7947b81be4cb55fc647ea3722eb7a8613545cb.tar.gz
llvm-cb7947b81be4cb55fc647ea3722eb7a8613545cb.tar.bz2
llvm-cb7947b81be4cb55fc647ea3722eb7a8613545cb.tar.xz
In CheckForLiveRegDef use TRI->getOverlaps.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@122473 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp15
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
index 793fa3d599..21227950d0 100644
--- a/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
+++ b/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp
@@ -659,15 +659,18 @@ static void CheckForLiveRegDef(SUnit *SU, unsigned Reg,
SmallSet<unsigned, 4> &RegAdded,
SmallVector<unsigned, 4> &LRegs,
const TargetRegisterInfo *TRI) {
- if (LiveRegDefs[Reg] && LiveRegDefs[Reg] != SU) {
+ for (const unsigned *AliasI = TRI->getOverlaps(Reg); *AliasI; ++AliasI) {
+
+ // Check if Ref is live.
+ if (!LiveRegDefs[Reg]) continue;
+
+ // Allow multiple uses of the same def.
+ if (LiveRegDefs[Reg] == SU) continue;
+
+ // Add Reg to the set of interfering live regs.
if (RegAdded.insert(Reg))
LRegs.push_back(Reg);
}
- for (const unsigned *Alias = TRI->getAliasSet(Reg); *Alias; ++Alias)
- if (LiveRegDefs[*Alias] && LiveRegDefs[*Alias] != SU) {
- if (RegAdded.insert(*Alias))
- LRegs.push_back(*Alias);
- }
}
/// DelayForLiveRegsBottomUp - Returns true if it is necessary to delay