X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FCodeGen%2FMachineFunction.cpp;h=30896172883e431b5d45ed6305b243900a359d00;hb=63e3cd4e0f3731d6801ac24199652e4d7b4b3729;hp=595159b15f2d8a0f1b5f89bdf5f7d489723d176c;hpb=84bc5427d6883f73cfeae3da640acd011d35c006;p=oota-llvm.git diff --git a/lib/CodeGen/MachineFunction.cpp b/lib/CodeGen/MachineFunction.cpp index 595159b15f2..30896172883 100644 --- a/lib/CodeGen/MachineFunction.cpp +++ b/lib/CodeGen/MachineFunction.cpp @@ -111,12 +111,14 @@ MachineBasicBlock* ilist_traits::createSentinel() { } void ilist_traits::transferNodesFromList( - iplist >& toList, - ilist_iterator first, - ilist_iterator last) { - if (Parent != toList.Parent) - for (; first != last; ++first) - first->Parent = toList.Parent; + iplist >& toList, + ilist_iterator first, + ilist_iterator last) { + // If splicing withing the same function, no change. + if (Parent == toList.Parent) return; + + for (; first != last; ++first) + first->setParent(toList.Parent); } MachineFunction::MachineFunction(const Function *F, @@ -124,7 +126,7 @@ MachineFunction::MachineFunction(const Function *F, : Annotation(MF_AID), Fn(F), Target(TM) { RegInfo = new MachineRegisterInfo(*TM.getRegisterInfo()); MFInfo = 0; - FrameInfo = new MachineFrameInfo(); + FrameInfo = new MachineFrameInfo(*TM.getFrameInfo()); ConstantPool = new MachineConstantPool(TM.getTargetData()); // Set up jump table. @@ -205,14 +207,14 @@ void MachineFunction::print(std::ostream &OS) const { // Print Constant Pool getConstantPool()->print(OS); - const MRegisterInfo *MRI = getTarget().getRegisterInfo(); + const TargetRegisterInfo *TRI = getTarget().getRegisterInfo(); if (!RegInfo->livein_empty()) { OS << "Live Ins:"; for (MachineRegisterInfo::livein_iterator I = RegInfo->livein_begin(), E = RegInfo->livein_end(); I != E; ++I) { - if (MRI) - OS << " " << MRI->getName(I->first); + if (TRI) + OS << " " << TRI->getName(I->first); else OS << " Reg #" << I->first; @@ -225,8 +227,8 @@ void MachineFunction::print(std::ostream &OS) const { OS << "Live Outs:"; for (MachineRegisterInfo::liveout_iterator I = RegInfo->liveout_begin(), E = RegInfo->liveout_end(); I != E; ++I) - if (MRI) - OS << " " << MRI->getName(*I); + if (TRI) + OS << " " << TRI->getName(*I); else OS << " Reg #" << *I; OS << "\n"; @@ -329,6 +331,19 @@ MachineFunction& MachineFunction::get(const Function *F) // MachineFrameInfo implementation //===----------------------------------------------------------------------===// +/// CreateFixedObject - Create a new object at a fixed location on the stack. +/// All fixed objects should be created before other objects are created for +/// efficiency. By default, fixed objects are immutable. This returns an +/// index with a negative value. +/// +int MachineFrameInfo::CreateFixedObject(uint64_t Size, int64_t SPOffset, + bool Immutable) { + assert(Size != 0 && "Cannot allocate zero size fixed stack objects!"); + Objects.insert(Objects.begin(), StackObject(Size, 1, SPOffset, Immutable)); + return -++NumFixedObjects; +} + + void MachineFrameInfo::print(const MachineFunction &MF, std::ostream &OS) const{ int ValOffset = MF.getTarget().getFrameInfo()->getOffsetOfLocalArea();