mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-12 22:26:14 +00:00
Fix induction variable name clash in for loops, in finishFunction().
Modify new MachineOperand so that its flags match the old MachineOperand's flags, for the flags that matter. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6513 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
76e3dc798b
commit
63b99f91c9
@ -98,16 +98,21 @@ void SparcEmitter::finishFunction(MachineFunction &F) {
|
|||||||
unsigned *Ref = BBRefs[i].second.first;
|
unsigned *Ref = BBRefs[i].second.first;
|
||||||
MachineInstr *MI = BBRefs[i].second.second;
|
MachineInstr *MI = BBRefs[i].second.second;
|
||||||
std::cerr << "attempting to resolve BB: " << i << "\n";
|
std::cerr << "attempting to resolve BB: " << i << "\n";
|
||||||
for (unsigned i=0, e = MI->getNumOperands(); i != e; ++i) {
|
for (unsigned ii = 0, ee = MI->getNumOperands(); ii != ee; ++ii) {
|
||||||
MachineOperand &op = MI->getOperand(i);
|
MachineOperand &op = MI->getOperand(ii);
|
||||||
if (op.isPCRelativeDisp()) {
|
if (op.isPCRelativeDisp()) {
|
||||||
// the instruction's branch target is made such that it branches to
|
// the instruction's branch target is made such that it branches to
|
||||||
// PC + (br target * 4), so undo that arithmetic here:
|
// PC + (br target * 4), so undo that arithmetic here:
|
||||||
// Location is the target of the branch
|
// Location is the target of the branch
|
||||||
// Ref is the location of the instruction, and hence the PC
|
// Ref is the location of the instruction, and hence the PC
|
||||||
unsigned branchTarget = (Location - (long)Ref) >> 2;
|
unsigned branchTarget = (Location - (long)Ref) >> 2;
|
||||||
MI->SetMachineOperandConst(i, MachineOperand::MO_SignExtendedImmed,
|
MI->SetMachineOperandConst(ii, MachineOperand::MO_SignExtendedImmed,
|
||||||
branchTarget);
|
branchTarget);
|
||||||
|
// Copy the flags.
|
||||||
|
if (op.opLoBits32()) { MI->setOperandLo32(ii); }
|
||||||
|
else if (op.opHiBits32()) { MI->setOperandHi32(ii); }
|
||||||
|
else if (op.opLoBits64()) { MI->setOperandLo64(ii); }
|
||||||
|
else if (op.opHiBits64()) { MI->setOperandHi64(ii); }
|
||||||
std::cerr << "Rewrote BB ref: ";
|
std::cerr << "Rewrote BB ref: ";
|
||||||
unsigned fixedInstr = SparcV9CodeEmitter::getBinaryCodeForInstr(*MI);
|
unsigned fixedInstr = SparcV9CodeEmitter::getBinaryCodeForInstr(*MI);
|
||||||
*Ref = fixedInstr;
|
*Ref = fixedInstr;
|
||||||
|
Loading…
Reference in New Issue
Block a user