diff options
author | Misha Brukman <brukman+llvm@gmail.com> | 2003-05-20 20:32:24 +0000 |
---|---|---|
committer | Misha Brukman <brukman+llvm@gmail.com> | 2003-05-20 20:32:24 +0000 |
commit | 56f4fa10fd5cd09f745f06773adde0b3e9a33eb3 (patch) | |
tree | bab2d4c6b8137d747bb634659727f6d3e1adcf9c /llvm/lib/Target/Sparc/PrologEpilogCodeInserter.cpp | |
parent | e5838c4d72871eb7d7304c045010bb3b72028cdb (diff) | |
download | bcm5719-llvm-56f4fa10fd5cd09f745f06773adde0b3e9a33eb3.tar.gz bcm5719-llvm-56f4fa10fd5cd09f745f06773adde0b3e9a33eb3.zip |
Sparc instruction opcodes now all live under the `V9' namespace.
llvm-svn: 6249
Diffstat (limited to 'llvm/lib/Target/Sparc/PrologEpilogCodeInserter.cpp')
-rw-r--r-- | llvm/lib/Target/Sparc/PrologEpilogCodeInserter.cpp | 67 |
1 files changed, 35 insertions, 32 deletions
diff --git a/llvm/lib/Target/Sparc/PrologEpilogCodeInserter.cpp b/llvm/lib/Target/Sparc/PrologEpilogCodeInserter.cpp index 98391dce5f9..be55e3b0a20 100644 --- a/llvm/lib/Target/Sparc/PrologEpilogCodeInserter.cpp +++ b/llvm/lib/Target/Sparc/PrologEpilogCodeInserter.cpp @@ -61,9 +61,9 @@ void InsertPrologEpilogCode::InsertPrologCode(MachineFunction &MF) int32_t C = - (int) staticStackSize; int SP = TM.getRegInfo().getStackPointer(); - if (TM.getInstrInfo().constantFitsInImmedField(SAVE, staticStackSize)) { - mvec.push_back(BuildMI(SAVE, 3).addMReg(SP).addSImm(C).addMReg(SP, - MOTy::Def)); + if (TM.getInstrInfo().constantFitsInImmedField(V9::SAVE,staticStackSize)) { + mvec.push_back(BuildMI(V9::SAVE, 3).addMReg(SP).addSImm(C).addMReg(SP, + MOTy::Def)); } else { // We have to put the stack size value into a register before SAVE. // Use register %g1 since it is volatile across calls. Note that the @@ -74,19 +74,22 @@ void InsertPrologEpilogCode::InsertPrologCode(MachineFunction &MF) TM.getRegInfo().getRegClassIDOfType(Type::IntTy), SparcIntRegClass::g1); - MachineInstr* M = BuildMI(SETHI, 2).addSImm(C).addMReg(uregNum, MOTy::Def); + MachineInstr* M = BuildMI(V9::SETHI, 2).addSImm(C) + .addMReg(uregNum, MOTy::Def); M->setOperandHi32(0); mvec.push_back(M); - M = BuildMI(OR, 3).addMReg(uregNum).addSImm(C).addMReg(uregNum, MOTy::Def); + M = BuildMI(V9::OR, 3).addMReg(uregNum).addSImm(C) + .addMReg(uregNum, MOTy::Def); M->setOperandLo32(1); mvec.push_back(M); - M = BuildMI(SRA, 3).addMReg(uregNum).addZImm(0).addMReg(uregNum, MOTy::Def); + M = BuildMI(V9::SRA, 3).addMReg(uregNum).addZImm(0) + .addMReg(uregNum, MOTy::Def); mvec.push_back(M); // Now generate the SAVE using the value in register %g1 - M = BuildMI(SAVE, 3).addMReg(SP).addMReg(uregNum).addMReg(SP, MOTy::Def); + M = BuildMI(V9::SAVE, 3).addMReg(SP).addMReg(uregNum).addMReg(SP,MOTy::Def); mvec.push_back(M); } @@ -103,34 +106,34 @@ void InsertPrologEpilogCode::InsertEpilogCode(MachineFunction &MF) BasicBlock &BB = *I->getBasicBlock(); Instruction *TermInst = (Instruction*)BB.getTerminator(); if (TermInst->getOpcode() == Instruction::Ret) + { + int ZR = TM.getRegInfo().getZeroRegNum(); + MachineInstr *Restore = + BuildMI(V9::RESTORE, 3).addMReg(ZR).addSImm(0).addMReg(ZR, MOTy::Def); + + MachineCodeForInstruction &termMvec = + MachineCodeForInstruction::get(TermInst); + + // Remove the NOPs in the delay slots of the return instruction + unsigned numNOPs = 0; + while (termMvec.back()->getOpCode() == V9::NOP) { - int ZR = TM.getRegInfo().getZeroRegNum(); - MachineInstr *Restore = - BuildMI(RESTORE, 3).addMReg(ZR).addSImm(0).addMReg(ZR, MOTy::Def); - - MachineCodeForInstruction &termMvec = - MachineCodeForInstruction::get(TermInst); - - // Remove the NOPs in the delay slots of the return instruction - unsigned numNOPs = 0; - while (termMvec.back()->getOpCode() == NOP) - { - assert( termMvec.back() == MBB.back()); - delete MBB.pop_back(); - termMvec.pop_back(); - ++numNOPs; - } - assert(termMvec.back() == MBB.back()); + assert( termMvec.back() == MBB.back()); + delete MBB.pop_back(); + termMvec.pop_back(); + ++numNOPs; + } + assert(termMvec.back() == MBB.back()); - // Check that we found the right number of NOPs and have the right - // number of instructions to replace them. - unsigned ndelays = MII.getNumDelaySlots(termMvec.back()->getOpCode()); - assert(numNOPs == ndelays && "Missing NOPs in delay slots?"); - assert(ndelays == 1 && "Cannot use epilog code for delay slots?"); + // Check that we found the right number of NOPs and have the right + // number of instructions to replace them. + unsigned ndelays = MII.getNumDelaySlots(termMvec.back()->getOpCode()); + assert(numNOPs == ndelays && "Missing NOPs in delay slots?"); + assert(ndelays == 1 && "Cannot use epilog code for delay slots?"); - // Append the epilog code to the end of the basic block. - MBB.push_back(Restore); - } + // Append the epilog code to the end of the basic block. + MBB.push_back(Restore); + } } } |