Changes in directory llvm/lib/CodeGen/SelectionDAG:
ScheduleDAGRRList.cpp updated: 1.31 -> 1.32 --- Log message: Remove the "special tie breaker" because it resulted in inconsistent ordering and thus violated the strict weak ordering requirement of priority_queue. Uncovered by _GLIBCXX_DEBUG. --- Diffs of the changes: (+12 -10) ScheduleDAGRRList.cpp | 22 ++++++++++++---------- 1 files changed, 12 insertions(+), 10 deletions(-) Index: llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp diff -u llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.31 llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.32 --- llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp:1.31 Thu Jun 21 20:35:51 2007 +++ llvm/lib/CodeGen/SelectionDAG/ScheduleDAGRRList.cpp Thu Jun 28 21:48:09 2007 @@ -618,16 +618,18 @@ bool LIsTarget = left->Node->isTargetOpcode(); bool RIsTarget = right->Node->isTargetOpcode(); - // Special tie breaker: if two nodes share a operand, the one that use it - // as a def&use operand is preferred. - if (LIsTarget && RIsTarget) { - if (left->isTwoAddress && !right->isTwoAddress) - if (SPQ->isDUOperand(left, right)) - return false; - if (!left->isTwoAddress && right->isTwoAddress) - if (SPQ->isDUOperand(right, left)) - return true; - } + // Cray: There used to be a special tie breaker here that looked for + // two-address instructions and preferred the instruction with a + // def&use operand. The special case triggered diagnostics when + // _GLIBCXX_DEBUG was enabled because it broke the strict weak + // ordering that priority_queue requires. It didn't help much anyway + // because AddPseudoTwoAddrDeps already covers many of the cases + // where it would have applied. In addition, it's counter-intuitive + // that a tie breaker would be the first thing attempted. There's a + // "real" tie breaker below that is the operation of last resort. + // The fact that the "special tie breaker" would trigger when there + // wasn't otherwise a tie is what broke the strict weak ordering + // constraint. unsigned LPriority = SPQ->getNodePriority(left); unsigned RPriority = SPQ->getNodePriority(right); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits