diff options
author | Misha Brukman <brukman+llvm@gmail.com> | 2004-07-20 00:42:19 +0000 |
---|---|---|
committer | Misha Brukman <brukman+llvm@gmail.com> | 2004-07-20 00:42:19 +0000 |
commit | 22802cc6cd4974a26cbd4bd5a9951be3b654142a (patch) | |
tree | 4c44cb34ed38c3ddb100787e99079ca697729514 /llvm/lib/Target | |
parent | 818a9dc3170eee44bfdbf1f1c2c1aa847848580d (diff) | |
download | bcm5719-llvm-22802cc6cd4974a26cbd4bd5a9951be3b654142a.tar.gz bcm5719-llvm-22802cc6cd4974a26cbd4bd5a9951be3b654142a.zip |
* Fn args passed in registers are now recorded as used by the call instruction
`-> asm printer updated to not print out those registers with the call instr
All of Shootout tests now work. Great thanks to Nate Begeman for the patch!
llvm-svn: 15015
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r-- | llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp | 24 | ||||
-rw-r--r-- | llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp | 24 |
2 files changed, 36 insertions, 12 deletions
diff --git a/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp b/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp index 184922157df..4e2b90e4b75 100644 --- a/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PPC32AsmPrinter.cpp @@ -492,14 +492,29 @@ void Printer::printMachineInstruction(const MachineInstr *MI) { "Instruction requires 64 bit support"); ++EmittedInsts; + // CALLpcrel and CALLindirect are handled specially here to print only the + // appropriate number of args that the assembler expects. This is because + // may have many arguments appended to record the uses of registers that are + // holding arguments to the called function. if (Opcode == PPC32::IMPLICIT_DEF) { O << "; IMPLICIT DEF "; printOp(MI->getOperand(0)); O << "\n"; return; - } - // FIXME: should probably be converted to cout.width and cout.fill - if (Opcode == PPC32::MovePCtoLR) { + } else if (Opcode == PPC32::CALLpcrel) { + O << TII.getName(MI->getOpcode()) << " "; + printOp(MI->getOperand(0)); + O << "\n"; + return; + } else if (Opcode == PPC32::CALLindirect) { + O << TII.getName(MI->getOpcode()) << " "; + printOp(MI->getOperand(0)); + O << ", "; + printOp(MI->getOperand(1)); + O << "\n"; + return; + } else if (Opcode == PPC32::MovePCtoLR) { + // FIXME: should probably be converted to cout.width and cout.fill O << "bl \"L0000" << labelNumber << "$pb\"\n"; O << "\"L0000" << labelNumber << "$pb\":\n"; O << "\tmflr "; @@ -509,9 +524,6 @@ void Printer::printMachineInstruction(const MachineInstr *MI) { } O << TII.getName(MI->getOpcode()) << " "; - DEBUG(std::cerr << TII.getName(MI->getOpcode()) << " expects " - << ArgCount << " args\n"); - if (Opcode == PPC32::LOADLoAddr) { printOp(MI->getOperand(0)); O << ", lo16("; diff --git a/llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp b/llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp index 184922157df..4e2b90e4b75 100644 --- a/llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp +++ b/llvm/lib/Target/PowerPC/PowerPCAsmPrinter.cpp @@ -492,14 +492,29 @@ void Printer::printMachineInstruction(const MachineInstr *MI) { "Instruction requires 64 bit support"); ++EmittedInsts; + // CALLpcrel and CALLindirect are handled specially here to print only the + // appropriate number of args that the assembler expects. This is because + // may have many arguments appended to record the uses of registers that are + // holding arguments to the called function. if (Opcode == PPC32::IMPLICIT_DEF) { O << "; IMPLICIT DEF "; printOp(MI->getOperand(0)); O << "\n"; return; - } - // FIXME: should probably be converted to cout.width and cout.fill - if (Opcode == PPC32::MovePCtoLR) { + } else if (Opcode == PPC32::CALLpcrel) { + O << TII.getName(MI->getOpcode()) << " "; + printOp(MI->getOperand(0)); + O << "\n"; + return; + } else if (Opcode == PPC32::CALLindirect) { + O << TII.getName(MI->getOpcode()) << " "; + printOp(MI->getOperand(0)); + O << ", "; + printOp(MI->getOperand(1)); + O << "\n"; + return; + } else if (Opcode == PPC32::MovePCtoLR) { + // FIXME: should probably be converted to cout.width and cout.fill O << "bl \"L0000" << labelNumber << "$pb\"\n"; O << "\"L0000" << labelNumber << "$pb\":\n"; O << "\tmflr "; @@ -509,9 +524,6 @@ void Printer::printMachineInstruction(const MachineInstr *MI) { } O << TII.getName(MI->getOpcode()) << " "; - DEBUG(std::cerr << TII.getName(MI->getOpcode()) << " expects " - << ArgCount << " args\n"); - if (Opcode == PPC32::LOADLoAddr) { printOp(MI->getOperand(0)); O << ", lo16("; |