diff --git a/llvm/lib/Target/SparcV8/InstSelectSimple.cpp b/llvm/lib/Target/SparcV8/InstSelectSimple.cpp index 8d308edbd8c8..50e58dc95938 100644 --- a/llvm/lib/Target/SparcV8/InstSelectSimple.cpp +++ b/llvm/lib/Target/SparcV8/InstSelectSimple.cpp @@ -452,7 +452,7 @@ void V8ISel::visitCallInst(CallInst &I) { .addReg (ArgReg); } - BuildMI (BB, V8::CALL, 1).addPCDisp (I.getOperand (0)); + BuildMI (BB, V8::CALL, 1).addGlobalAddress(I.getCalledFunction (), true); if (I.getType () == Type::VoidTy) return; unsigned DestReg = getReg (I); @@ -509,7 +509,7 @@ void V8ISel::visitBranchInst(BranchInst &I) { BasicBlock *takenSucc = I.getSuccessor (0); if (!I.isConditional()) { // Unconditional branch? if (I.getSuccessor(0) != NextBB) - BuildMI (BB, V8::BA, 1).addPCDisp (takenSucc); + BuildMI (BB, V8::BA, 1).addMBB (MBBMap[takenSucc]); return; } @@ -519,11 +519,11 @@ void V8ISel::visitBranchInst(BranchInst &I) { BuildMI (BB, V8::CMPri, 2).addSImm (0).addReg (CondReg); if (notTakenSucc == NextBB) { if (takenSucc != NextBB) - BuildMI (BB, V8::BNE, 1).addPCDisp (takenSucc); + BuildMI (BB, V8::BNE, 1).addMBB (MBBMap[takenSucc]); } else { - BuildMI (BB, V8::BE, 1).addPCDisp (notTakenSucc); + BuildMI (BB, V8::BE, 1).addMBB (MBBMap[notTakenSucc]); if (takenSucc != NextBB) - BuildMI (BB, V8::BA, 1).addPCDisp (takenSucc); + BuildMI (BB, V8::BA, 1).addMBB (MBBMap[takenSucc]); } } diff --git a/llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp b/llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp index 342b72065b98..0a5035eb75b0 100644 --- a/llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp +++ b/llvm/lib/Target/SparcV8/SparcV8AsmPrinter.cpp @@ -353,8 +353,9 @@ bool V8Printer::runOnMachineFunction(MachineFunction &MF) { for (MachineFunction::const_iterator I = MF.begin(), E = MF.end(); I != E; ++I) { // Print a label for the basic block. - O << ".LBB" << NumberForBB[I->getBasicBlock()] << ":\t! " - << I->getBasicBlock()->getName() << "\n"; + O << ".LBB" << Mang->getValueName(MF.getFunction ()) + << "_" << I->getNumber () << ":\t! " + << I->getBasicBlock ()->getName () << "\n"; for (MachineBasicBlock::const_iterator II = I->begin(), E = I->end(); II != E; ++II) { // Print the assembly for the instruction. @@ -405,19 +406,17 @@ void V8Printer::printOperand(const MachineInstr *MI, int opNum) { case MachineOperand::MO_UnextendedImmed: O << (int)MO.getImmedValue(); break; - case MachineOperand::MO_PCRelativeDisp: { - if (isa (MO.getVRegValue ())) { - O << Mang->getValueName (MO.getVRegValue ()); - break; - } - assert (isa (MO.getVRegValue ()) - && "Trying to look up something which is not a BB in the NumberForBB map"); - ValueMapTy::const_iterator i = NumberForBB.find(MO.getVRegValue()); - assert (i != NumberForBB.end() - && "Could not find a BB in the NumberForBB map!"); - O << ".LBB" << i->second << " ! PC rel: " << MO.getVRegValue()->getName(); - break; + case MachineOperand::MO_MachineBasicBlock: { + MachineBasicBlock *MBBOp = MO.getMachineBasicBlock(); + O << ".LBB" << Mang->getValueName(MBBOp->getParent()->getFunction()) + << "_" << MBBOp->getNumber () << "\t! " + << MBBOp->getBasicBlock ()->getName (); + return; } + case MachineOperand::MO_PCRelativeDisp: + std::cerr << "Shouldn't use addPCDisp() when building SparcV8 MachineInstrs"; + abort (); + return; case MachineOperand::MO_GlobalAddress: O << Mang->getValueName(MO.getGlobal()); break;