mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
Proper fix for PR1037: to determine is a VR is a modref, check 1) whether it is
tied to another oeprand, 2) whether is is being tied to by another operand. So the destination operand of a two-address MI can be correctly identified. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32354 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7814ad0bf3
commit
5c2a46052b
@ -97,7 +97,9 @@ void VirtRegMap::virtFolded(unsigned VirtReg, MachineInstr *OldMI,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ModRef MRInfo;
|
ModRef MRInfo;
|
||||||
if (TII.getOperandConstraint(OldMI->getOpcode(), OpNo, TOI::TIED_TO)) {
|
const TargetInstrDescriptor *TID = OldMI->getInstrDescriptor();
|
||||||
|
if (TID->getOperandConstraint(OpNo, TOI::TIED_TO) != -1 ||
|
||||||
|
TII.findTiedToSrcOperand(TID, OpNo) != -1) {
|
||||||
// Folded a two-address operand.
|
// Folded a two-address operand.
|
||||||
MRInfo = isModRef;
|
MRInfo = isModRef;
|
||||||
} else if (OldMI->getOperand(OpNo).isDef()) {
|
} else if (OldMI->getOperand(OpNo).isDef()) {
|
||||||
@ -849,7 +851,7 @@ void LocalSpiller::RewriteMBB(MachineBasicBlock &MBB, VirtRegMap &VRM) {
|
|||||||
// If this def is part of a two-address operand, make sure to execute
|
// If this def is part of a two-address operand, make sure to execute
|
||||||
// the store from the correct physical register.
|
// the store from the correct physical register.
|
||||||
unsigned PhysReg;
|
unsigned PhysReg;
|
||||||
int TiedOp = TII->findTiedToSrcOperand(MI.getOpcode(), i);
|
int TiedOp = TII->findTiedToSrcOperand(MI.getInstrDescriptor(), i);
|
||||||
if (TiedOp != -1)
|
if (TiedOp != -1)
|
||||||
PhysReg = MI.getOperand(TiedOp).getReg();
|
PhysReg = MI.getOperand(TiedOp).getReg();
|
||||||
else {
|
else {
|
||||||
|
Loading…
Reference in New Issue
Block a user