diff options
| author | Andrew Trick <atrick@apple.com> | 2011-03-09 19:12:43 +0000 |
|---|---|---|
| committer | Andrew Trick <atrick@apple.com> | 2011-03-09 19:12:43 +0000 |
| commit | 072ed2ee0d90e5ad2665e956c55c6f088f436188 (patch) | |
| tree | 3666b7001e8b034dad9f726ca875a72c560c4db3 /llvm/lib/CodeGen | |
| parent | 6348dc0566493ebeaad2f3a944734f514b0f1761 (diff) | |
| download | bcm5719-llvm-072ed2ee0d90e5ad2665e956c55c6f088f436188.tar.gz bcm5719-llvm-072ed2ee0d90e5ad2665e956c55c6f088f436188.zip | |
Improve pre-RA-sched register pressure tracking for duplicate operands.
This helps cases like 2008-07-19-movups-spills.ll, but doesn't have an obvious impact on benchmarks
llvm-svn: 127347
Diffstat (limited to 'llvm/lib/CodeGen')
| -rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp index b762af5ca9b..202f7ab4e14 100644 --- a/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp @@ -419,11 +419,15 @@ void ScheduleDAGSDNodes::AddSchedEdges() { ST.adjustSchedDependency(OpSU, SU, const_cast<SDep &>(dep)); } - if (!SU->addPred(dep) && !dep.isCtrl() && OpSU->NumRegDefsLeft > 0) { + if (!SU->addPred(dep) && !dep.isCtrl() && OpSU->NumRegDefsLeft > 1) { // Multiple register uses are combined in the same SUnit. For example, // we could have a set of glued nodes with all their defs consumed by // another set of glued nodes. Register pressure tracking sees this as // a single use, so to keep pressure balanced we reduce the defs. + // + // We can't tell (without more book-keeping) if this results from + // glued nodes or duplicate operands. As long as we don't reduce + // NumRegDefsLeft to zero, we handle the common cases well. --OpSU->NumRegDefsLeft; } } |

