mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-24 13:18:17 +00:00
Fix pr3954. The register scavenger asserts for inline assembly with
register destinations that are tied to source operands. The TargetInstrDescr::findTiedToSrcOperand method silently fails for inline assembly. The existing MachineInstr::isRegReDefinedByTwoAddr was very close to doing what is needed, so this revision makes a few changes to that method and also renames it to isRegTiedToUseOperand (for consistency with the very similar isRegTiedToDefOperand and because it handles both two-address instructions and inline assembly with tied registers). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@68714 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -803,7 +803,7 @@ void PreAllocSplitting::RenumberValno(VNInfo* VN) {
|
||||
MachineInstr* MI = LIs->getInstructionFromIndex(*KI);
|
||||
unsigned DefIdx = MI->findRegisterDefOperandIdx(CurrLI->reg);
|
||||
if (DefIdx == ~0U) continue;
|
||||
if (MI->isRegReDefinedByTwoAddr(DefIdx)) {
|
||||
if (MI->isRegTiedToUseOperand(DefIdx)) {
|
||||
VNInfo* NextVN =
|
||||
CurrLI->findDefinedVNInfo(LiveIntervals::getDefIndex(*KI));
|
||||
if (NextVN == OldVN) continue;
|
||||
@@ -1214,7 +1214,7 @@ unsigned PreAllocSplitting::getNumberOfNonSpills(
|
||||
NonSpills++;
|
||||
|
||||
int DefIdx = (*UI)->findRegisterDefOperandIdx(Reg);
|
||||
if (DefIdx != -1 && (*UI)->isRegReDefinedByTwoAddr(DefIdx))
|
||||
if (DefIdx != -1 && (*UI)->isRegTiedToUseOperand(DefIdx))
|
||||
FeedsTwoAddr = true;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user