mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37794 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8a46d342d8
commit
a4ab2e8c72
@ -618,16 +618,18 @@ bool bu_ls_rr_sort::operator()(const SUnit *left, const SUnit *right) const {
|
|||||||
bool LIsTarget = left->Node->isTargetOpcode();
|
bool LIsTarget = left->Node->isTargetOpcode();
|
||||||
bool RIsTarget = right->Node->isTargetOpcode();
|
bool RIsTarget = right->Node->isTargetOpcode();
|
||||||
|
|
||||||
// Special tie breaker: if two nodes share a operand, the one that use it
|
// Cray: There used to be a special tie breaker here that looked for
|
||||||
// as a def&use operand is preferred.
|
// two-address instructions and preferred the instruction with a
|
||||||
if (LIsTarget && RIsTarget) {
|
// def&use operand. The special case triggered diagnostics when
|
||||||
if (left->isTwoAddress && !right->isTwoAddress)
|
// _GLIBCXX_DEBUG was enabled because it broke the strict weak
|
||||||
if (SPQ->isDUOperand(left, right))
|
// ordering that priority_queue requires. It didn't help much anyway
|
||||||
return false;
|
// because AddPseudoTwoAddrDeps already covers many of the cases
|
||||||
if (!left->isTwoAddress && right->isTwoAddress)
|
// where it would have applied. In addition, it's counter-intuitive
|
||||||
if (SPQ->isDUOperand(right, left))
|
// that a tie breaker would be the first thing attempted. There's a
|
||||||
return true;
|
// "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 LPriority = SPQ->getNodePriority(left);
|
||||||
unsigned RPriority = SPQ->getNodePriority(right);
|
unsigned RPriority = SPQ->getNodePriority(right);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user