From 63b99f91c9d89eea387a53df42bcc9d35d3bce21 Mon Sep 17 00:00:00 2001 From: Brian Gaeke Date: Sun, 1 Jun 2003 22:08:29 +0000 Subject: [PATCH] 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 --- lib/ExecutionEngine/JIT/SparcEmitter.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/ExecutionEngine/JIT/SparcEmitter.cpp b/lib/ExecutionEngine/JIT/SparcEmitter.cpp index 062093084b7..a9547ac38ab 100644 --- a/lib/ExecutionEngine/JIT/SparcEmitter.cpp +++ b/lib/ExecutionEngine/JIT/SparcEmitter.cpp @@ -98,16 +98,21 @@ void SparcEmitter::finishFunction(MachineFunction &F) { unsigned *Ref = BBRefs[i].second.first; MachineInstr *MI = BBRefs[i].second.second; std::cerr << "attempting to resolve BB: " << i << "\n"; - for (unsigned i=0, e = MI->getNumOperands(); i != e; ++i) { - MachineOperand &op = MI->getOperand(i); + for (unsigned ii = 0, ee = MI->getNumOperands(); ii != ee; ++ii) { + MachineOperand &op = MI->getOperand(ii); if (op.isPCRelativeDisp()) { // the instruction's branch target is made such that it branches to // PC + (br target * 4), so undo that arithmetic here: // Location is the target of the branch // Ref is the location of the instruction, and hence the PC unsigned branchTarget = (Location - (long)Ref) >> 2; - MI->SetMachineOperandConst(i, MachineOperand::MO_SignExtendedImmed, + MI->SetMachineOperandConst(ii, MachineOperand::MO_SignExtendedImmed, 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: "; unsigned fixedInstr = SparcV9CodeEmitter::getBinaryCodeForInstr(*MI); *Ref = fixedInstr;