[llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp

Chris Lattner lattner at cs.uiuc.edu
Sun Jan 12 18:52:07 PST 2003


Changes in directory llvm/lib/Target/X86:

X86RegisterInfo.cpp updated: 1.27 -> 1.28

---
Log message:

* Move frame and constant pool indexes to first argument of memory reference
  so we can put an offset in there as well...
* Fix long/ulong stuff



---
Diffs of the changes:

Index: llvm/lib/Target/X86/X86RegisterInfo.cpp
diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.27 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.28
--- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.27	Sat Dec 28 15:08:28 2002
+++ llvm/lib/Target/X86/X86RegisterInfo.cpp	Sun Jan 12 18:50:33 2003
@@ -123,27 +123,29 @@
 
 void X86RegisterInfo::eliminateFrameIndex(MachineFunction &MF,
 					MachineBasicBlock::iterator &II) const {
-  unsigned i = 3;
+  unsigned i = 0;
   MachineInstr &MI = **II;
   while (!MI.getOperand(i).isFrameIndex()) {
     ++i;
     assert(i < MI.getNumOperands() && "Instr doesn't have FrameIndex operand!");
   }
 
+  int FrameIndex = MI.getOperand(i).getFrameIndex();
+
   // This must be part of a four operand memory reference.  Replace the
-  // FrameIndex with the offset and the base register with EBP.
-  MI.SetMachineOperandReg(i-3, hasFP(MF) ? X86::EBP : X86::ESP);
+  // FrameIndex with base register with EBP.  Add add an offset to the offset.
+  MI.SetMachineOperandReg(i, hasFP(MF) ? X86::EBP : X86::ESP);
 
-  // Now replace the frame index itself with the offset from EBP.
-  int FrameIndex = MI.getOperand(i).getFrameIndex();
-  int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex);
+  // Now add the frame object offset to the offset from EBP.
+  int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) +
+               MI.getOperand(i+3).getImmedValue();
 
   if (!hasFP(MF) && hasSPAdjust(MF)) {
     const MachineFrameInfo *MFI = MF.getFrameInfo();
     Offset += MFI->getStackSize() + MFI->getMaxCallFrameSize();
   }
 
-  MI.SetMachineOperandConst(i, MachineOperand::MO_SignExtendedImmed, Offset);
+  MI.SetMachineOperandConst(i+3, MachineOperand::MO_SignExtendedImmed, Offset);
 }
 
 void X86RegisterInfo::processFunctionBeforeFrameFinalized(MachineFunction &MF)
@@ -332,15 +334,14 @@
 const TargetRegisterClass*
 X86RegisterInfo::getRegClassForType(const Type* Ty) const {
   switch (Ty->getPrimitiveID()) {
-  default:                assert(0 && "Invalid type to getClass!");
+  case Type::LongTyID:
+  case Type::ULongTyID: assert(0 && "Long values can't fit in registers!");
+  default:              assert(0 && "Invalid type to getClass!");
   case Type::BoolTyID:
   case Type::SByteTyID:
   case Type::UByteTyID:   return &X86ByteRegisterClassInstance;
   case Type::ShortTyID:
   case Type::UShortTyID:  return &X86ShortRegisterClassInstance;
-  case Type::LongTyID:    // FIXME: Longs are not handled yet!
-  case Type::ULongTyID:   // FIXME: Treat these like ints, this is bogus!
-    
   case Type::IntTyID:
   case Type::UIntTyID:
   case Type::PointerTyID: return &X86IntRegisterClassInstance;





More information about the llvm-commits mailing list