Added moveReg2Reg() and moveImm2Reg() to accomodate moving data around due to
authorMisha Brukman <brukman+llvm@gmail.com>
Fri, 13 Dec 2002 09:54:12 +0000 (09:54 +0000)
committerMisha Brukman <brukman+llvm@gmail.com>
Fri, 13 Dec 2002 09:54:12 +0000 (09:54 +0000)
PHI nodes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5001 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Target/MRegisterInfo.h
lib/Target/X86/X86RegisterInfo.cpp
lib/Target/X86/X86RegisterInfo.h

index 099fc9a95fab58a7caa3a9587dc39e8aa23c7de0..577d59c93aad63df34b64f3826bfd0346f75f98c 100644 (file)
@@ -129,6 +129,16 @@ public:
                     unsigned DestReg, unsigned SrcReg,
                     unsigned ImmOffset, unsigned dataSize) const = 0;
 
+  virtual MachineBasicBlock::iterator
+  moveReg2Reg(MachineBasicBlock *MBB,
+              MachineBasicBlock::iterator MBBI,
+              unsigned DestReg, unsigned SrcReg, unsigned dataSize) const = 0;
+
+  virtual MachineBasicBlock::iterator
+  moveImm2Reg(MachineBasicBlock *MBB,
+              MachineBasicBlock::iterator MBBI,
+              unsigned DestReg, unsigned Imm, unsigned dataSize) const = 0;
+
   virtual MachineBasicBlock::iterator
   emitPrologue(MachineBasicBlock *MBB,
                MachineBasicBlock::iterator MBBI,
index cd22d88efbd6acdab4f33e94cbcd8409cb985838..8e049a2c09feac29e21067bddb8c2e3ab1c5cde5 100644 (file)
@@ -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;
index 76950e8d8897163ab638b37760c444e2005369a3..78d3bdda8132e63e032a2e7ab085d5e6bf4d7282 100644 (file)
@@ -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;