diff options
| author | Misha Brukman <brukman+llvm@gmail.com> | 2002-12-13 09:54:12 +0000 |
|---|---|---|
| committer | Misha Brukman <brukman+llvm@gmail.com> | 2002-12-13 09:54:12 +0000 |
| commit | 78401cbb3cfbe5f1d2b1f827ff550ba51c43bbb2 (patch) | |
| tree | 9a0e41eebfce78981081251115f9a7bfde97d2f6 /llvm/lib/Target | |
| parent | 34cd32d42a8ec5c0fcb690d808a52a66a0108a8c (diff) | |
| download | bcm5719-llvm-78401cbb3cfbe5f1d2b1f827ff550ba51c43bbb2.tar.gz bcm5719-llvm-78401cbb3cfbe5f1d2b1f827ff550ba51c43bbb2.zip | |
Added moveReg2Reg() and moveImm2Reg() to accomodate moving data around due to
PHI nodes.
llvm-svn: 5001
Diffstat (limited to 'llvm/lib/Target')
| -rw-r--r-- | llvm/lib/Target/X86/X86RegisterInfo.cpp | 36 | ||||
| -rw-r--r-- | llvm/lib/Target/X86/X86RegisterInfo.h | 10 |
2 files changed, 46 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp index cd22d88efbd..8e049a2c09f 100644 --- a/llvm/lib/Target/X86/X86RegisterInfo.cpp +++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp @@ -63,6 +63,42 @@ X86RegisterInfo::loadRegOffset2Reg(MachineBasicBlock *MBB, return ++(MBB->insert(MBBI, MI)); } +MachineBasicBlock::iterator +X86RegisterInfo::moveReg2Reg(MachineBasicBlock *MBB, + MachineBasicBlock::iterator MBBI, + unsigned DestReg, unsigned SrcReg, + unsigned dataSize) const +{ + unsigned opcode; + switch (dataSize) { + case 1: opcode = X86::MOVrr8; break; + case 2: opcode = X86::MOVrr16; break; + case 4: opcode = X86::MOVrr32; break; + default: assert(0 && "Invalid data size!"); + } + + MachineInstr *MI = BuildMI(opcode, 2).addReg(DestReg).addReg(SrcReg); + return ++(MBB->insert(MBBI, MI)); +} + +MachineBasicBlock::iterator +X86RegisterInfo::moveImm2Reg(MachineBasicBlock *MBB, + MachineBasicBlock::iterator MBBI, + unsigned DestReg, unsigned Imm, unsigned dataSize) + const +{ + unsigned opcode; + switch (dataSize) { + case 1: opcode = X86::MOVir8; break; + case 2: opcode = X86::MOVir16; break; + case 4: opcode = X86::MOVir32; break; + default: assert(0 && "Invalid data size!"); + } + + MachineInstr *MI = BuildMI(opcode, 2).addReg(DestReg).addReg(Imm); + return ++(MBB->insert(MBBI, MI)); +} + unsigned X86RegisterInfo::getFramePointer() const { return X86::EBP; diff --git a/llvm/lib/Target/X86/X86RegisterInfo.h b/llvm/lib/Target/X86/X86RegisterInfo.h index 76950e8d889..78d3bdda813 100644 --- a/llvm/lib/Target/X86/X86RegisterInfo.h +++ b/llvm/lib/Target/X86/X86RegisterInfo.h @@ -29,6 +29,16 @@ struct X86RegisterInfo : public MRegisterInfo { unsigned DestReg, unsigned SrcReg, unsigned ImmOffset, unsigned dataSize) const; + MachineBasicBlock::iterator + moveReg2Reg(MachineBasicBlock *MBB, + MachineBasicBlock::iterator MBBI, + unsigned DestReg, unsigned SrcReg, unsigned dataSize) const; + + MachineBasicBlock::iterator + moveImm2Reg(MachineBasicBlock *MBB, + MachineBasicBlock::iterator MBBI, + unsigned DestReg, unsigned Imm, unsigned dataSize) const; + unsigned getFramePointer() const; unsigned getStackPointer() const; |

