mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-25 00:29:20 +00:00
[AArch64] FPLoadBalancing: move ownership of the chain to its current accumulator register
and forget about the previously used accumulator. Coming up with a simple testcase is not easy, as this highly depends on what the register allocator is doing: this issue showed up while working with the PBQP allocator, which produced a different allocation scheme. A testcase would need to come up with chain starting in D[0-7], then moving to D[8-15], followed by a call to a function whose regmask clobbers the starting accumulator in D[0-7], then another use of the chain. Fixed some formatting, added some invariant checks while there. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216721 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
622de3b2eb
commit
123c92cbe0
@ -193,10 +193,10 @@ public:
|
||||
/// instruction can be more tricky.
|
||||
Color LastColor;
|
||||
|
||||
Chain(MachineInstr *MI, unsigned Idx, Color C) :
|
||||
StartInst(MI), LastInst(MI), KillInst(NULL),
|
||||
StartInstIdx(Idx), LastInstIdx(Idx), KillInstIdx(0),
|
||||
LastColor(C) {
|
||||
Chain(MachineInstr *MI, unsigned Idx, Color C)
|
||||
: StartInst(MI), LastInst(MI), KillInst(nullptr),
|
||||
StartInstIdx(Idx), LastInstIdx(Idx), KillInstIdx(0),
|
||||
LastColor(C) {
|
||||
Insts.insert(MI);
|
||||
}
|
||||
|
||||
@ -206,6 +206,9 @@ public:
|
||||
LastInst = MI;
|
||||
LastInstIdx = Idx;
|
||||
LastColor = C;
|
||||
assert((KillInstIdx == 0 || LastInstIdx < KillInstIdx) &&
|
||||
"Chain: broken invariant. A Chain can only be killed after its last "
|
||||
"def");
|
||||
|
||||
Insts.insert(MI);
|
||||
}
|
||||
@ -224,6 +227,9 @@ public:
|
||||
KillInst = MI;
|
||||
KillInstIdx = Idx;
|
||||
KillIsImmutable = Immutable;
|
||||
assert((KillInstIdx == 0 || LastInstIdx < KillInstIdx) &&
|
||||
"Chain: broken invariant. A Chain can only be killed after its last "
|
||||
"def");
|
||||
}
|
||||
|
||||
/// Return the first instruction in the chain.
|
||||
@ -626,7 +632,10 @@ scanInstruction(MachineInstr *MI, unsigned Idx,
|
||||
DEBUG(dbgs() << "Instruction was successfully added to chain.\n");
|
||||
ActiveChains[AccumReg]->add(MI, Idx, getColor(DestReg));
|
||||
// Handle cases where the destination is not the same as the accumulator.
|
||||
ActiveChains[DestReg] = ActiveChains[AccumReg];
|
||||
if (DestReg != AccumReg) {
|
||||
ActiveChains[DestReg] = ActiveChains[AccumReg];
|
||||
ActiveChains.erase(AccumReg);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user