diff options
| author | Chris Lattner <sabre@nondot.org> | 2004-02-15 21:38:28 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2004-02-15 21:38:28 +0000 |
| commit | a8d97e4e74d37643988ed2eb55e35cd08d13a54d (patch) | |
| tree | a6439ab9f7df74878095c5365cef0a15812aaed3 /llvm/lib | |
| parent | bbf53937a4de4afa55b73969534019e267551f34 (diff) | |
| download | bcm5719-llvm-a8d97e4e74d37643988ed2eb55e35cd08d13a54d.tar.gz bcm5719-llvm-a8d97e4e74d37643988ed2eb55e35cd08d13a54d.zip | |
Finegrainify namespacification
Remove one of the operands of a two operand instruction
llvm-svn: 11478
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/CodeGen/RegAllocSimple.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/llvm/lib/CodeGen/RegAllocSimple.cpp b/llvm/lib/CodeGen/RegAllocSimple.cpp index a81edda858c..b1726efddc7 100644 --- a/llvm/lib/CodeGen/RegAllocSimple.cpp +++ b/llvm/lib/CodeGen/RegAllocSimple.cpp @@ -25,8 +25,7 @@ #include "Support/Debug.h" #include "Support/Statistic.h" #include <iostream> - -namespace llvm { +using namespace llvm; namespace { Statistic<> NumSpilled ("ra-simple", "Number of registers spilled"); @@ -183,7 +182,9 @@ void RegAllocSimple::AllocateBasicBlock(MachineBasicBlock &MBB) { unsigned physReg = Virt2PhysRegMap[virtualReg]; if (physReg == 0) { if (op.isDef()) { - if (TM->getInstrInfo().isTwoAddrInstr(MI->getOpcode()) && i == 0) { + if (!TM->getInstrInfo().isTwoAddrInstr(MI->getOpcode()) || i) { + physReg = getFreeReg(virtualReg); + } else { // must be same register number as the first operand // This maps a = b + c into b += c, and saves b into a's spot assert(MI->getOperand(1).isRegister() && @@ -192,8 +193,13 @@ void RegAllocSimple::AllocateBasicBlock(MachineBasicBlock &MBB) { "Two address instruction invalid!"); physReg = MI->getOperand(1).getReg(); - } else { - physReg = getFreeReg(virtualReg); + + ++MI; + spillVirtReg(MBB, MI, virtualReg, physReg); + --MI; + MI->getOperand(1).setDef(); + MI->RemoveOperand(0); + break; // This is the last operand to process } ++MI; spillVirtReg(MBB, MI, virtualReg, physReg); @@ -231,8 +237,6 @@ bool RegAllocSimple::runOnMachineFunction(MachineFunction &Fn) { return true; } -FunctionPass *createSimpleRegisterAllocator() { +FunctionPass *llvm::createSimpleRegisterAllocator() { return new RegAllocSimple(); } - -} // End llvm namespace |

