Remove unused #includes.
[oota-llvm.git] / lib / CodeGen / PrologEpilogInserter.cpp
1 //===-- PrologEpilogInserter.cpp - Insert Prolog/Epilog code in function --===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This pass is responsible for finalizing the functions frame layout, saving
11 // callee saved registers, and for emitting prolog & epilog code for the
12 // function.
13 //
14 // This pass must be run after register allocation.  After this pass is
15 // executed, it is illegal to construct MO_FrameIndex operands.
16 //
17 // This pass provides an optional shrink wrapping variant of prolog/epilog
18 // insertion, enabled via --shrink-wrap. See ShrinkWrapping.cpp.
19 //
20 //===----------------------------------------------------------------------===//
21
22 #define DEBUG_TYPE "pei"
23 #include "PrologEpilogInserter.h"
24 #include "llvm/ADT/IndexedMap.h"
25 #include "llvm/ADT/STLExtras.h"
26 #include "llvm/ADT/SmallSet.h"
27 #include "llvm/ADT/Statistic.h"
28 #include "llvm/CodeGen/MachineDominators.h"
29 #include "llvm/CodeGen/MachineFrameInfo.h"
30 #include "llvm/CodeGen/MachineInstr.h"
31 #include "llvm/CodeGen/MachineLoopInfo.h"
32 #include "llvm/CodeGen/MachineRegisterInfo.h"
33 #include "llvm/CodeGen/RegisterScavenging.h"
34 #include "llvm/IR/InlineAsm.h"
35 #include "llvm/Support/CommandLine.h"
36 #include "llvm/Support/Compiler.h"
37 #include "llvm/Support/Debug.h"
38 #include "llvm/Target/TargetFrameLowering.h"
39 #include "llvm/Target/TargetInstrInfo.h"
40 #include "llvm/Target/TargetMachine.h"
41 #include "llvm/Target/TargetRegisterInfo.h"
42 #include <climits>
43
44 using namespace llvm;
45
46 char PEI::ID = 0;
47 char &llvm::PrologEpilogCodeInserterID = PEI::ID;
48
49 INITIALIZE_PASS_BEGIN(PEI, "prologepilog",
50                 "Prologue/Epilogue Insertion", false, false)
51 INITIALIZE_PASS_DEPENDENCY(MachineLoopInfo)
52 INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
53 INITIALIZE_PASS_DEPENDENCY(TargetPassConfig)
54 INITIALIZE_PASS_END(PEI, "prologepilog",
55                     "Prologue/Epilogue Insertion & Frame Finalization",
56                     false, false)
57
58 STATISTIC(NumVirtualFrameRegs, "Number of virtual frame regs encountered");
59 STATISTIC(NumScavengedRegs, "Number of frame index regs scavenged");
60 STATISTIC(NumBytesStackSpace,
61           "Number of bytes used for stack in all functions");
62
63 /// runOnMachineFunction - Insert prolog/epilog code and replace abstract
64 /// frame indexes with appropriate references.
65 ///
66 bool PEI::runOnMachineFunction(MachineFunction &Fn) {
67   const Function* F = Fn.getFunction();
68   const TargetRegisterInfo *TRI = Fn.getTarget().getRegisterInfo();
69   const TargetFrameLowering *TFI = Fn.getTarget().getFrameLowering();
70
71   assert(!Fn.getRegInfo().getNumVirtRegs() && "Regalloc must assign all vregs");
72
73   RS = TRI->requiresRegisterScavenging(Fn) ? new RegScavenger() : NULL;
74   FrameIndexVirtualScavenging = TRI->requiresFrameIndexScavenging(Fn);
75
76   // Calculate the MaxCallFrameSize and AdjustsStack variables for the
77   // function's frame information. Also eliminates call frame pseudo
78   // instructions.
79   calculateCallsInformation(Fn);
80
81   // Allow the target machine to make some adjustments to the function
82   // e.g. UsedPhysRegs before calculateCalleeSavedRegisters.
83   TFI->processFunctionBeforeCalleeSavedScan(Fn, RS);
84
85   // Scan the function for modified callee saved registers and insert spill code
86   // for any callee saved registers that are modified.
87   calculateCalleeSavedRegisters(Fn);
88
89   // Determine placement of CSR spill/restore code:
90   //  - With shrink wrapping, place spills and restores to tightly
91   //    enclose regions in the Machine CFG of the function where
92   //    they are used.
93   //  - Without shink wrapping (default), place all spills in the
94   //    entry block, all restores in return blocks.
95   placeCSRSpillsAndRestores(Fn);
96
97   // Add the code to save and restore the callee saved registers
98   if (!F->getAttributes().hasAttribute(AttributeSet::FunctionIndex,
99                                        Attribute::Naked))
100     insertCSRSpillsAndRestores(Fn);
101
102   // Allow the target machine to make final modifications to the function
103   // before the frame layout is finalized.
104   TFI->processFunctionBeforeFrameFinalized(Fn);
105
106   // Calculate actual frame offsets for all abstract stack objects...
107   calculateFrameObjectOffsets(Fn);
108
109   // Add prolog and epilog code to the function.  This function is required
110   // to align the stack frame as necessary for any stack variables or
111   // called functions.  Because of this, calculateCalleeSavedRegisters()
112   // must be called before this function in order to set the AdjustsStack
113   // and MaxCallFrameSize variables.
114   if (!F->getAttributes().hasAttribute(AttributeSet::FunctionIndex,
115                                        Attribute::Naked))
116     insertPrologEpilogCode(Fn);
117
118   // Replace all MO_FrameIndex operands with physical register references
119   // and actual offsets.
120   //
121   replaceFrameIndices(Fn);
122
123   // If register scavenging is needed, as we've enabled doing it as a
124   // post-pass, scavenge the virtual registers that frame index elimiation
125   // inserted.
126   if (TRI->requiresRegisterScavenging(Fn) && FrameIndexVirtualScavenging)
127     scavengeFrameVirtualRegs(Fn);
128
129   // Clear any vregs created by virtual scavenging.
130   Fn.getRegInfo().clearVirtRegs();
131
132   delete RS;
133   clearAllSets();
134   return true;
135 }
136
137 /// calculateCallsInformation - Calculate the MaxCallFrameSize and AdjustsStack
138 /// variables for the function's frame information and eliminate call frame
139 /// pseudo instructions.
140 void PEI::calculateCallsInformation(MachineFunction &Fn) {
141   const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo();
142   const TargetFrameLowering *TFI = Fn.getTarget().getFrameLowering();
143   MachineFrameInfo *MFI = Fn.getFrameInfo();
144
145   unsigned MaxCallFrameSize = 0;
146   bool AdjustsStack = MFI->adjustsStack();
147
148   // Get the function call frame set-up and tear-down instruction opcode
149   int FrameSetupOpcode   = TII.getCallFrameSetupOpcode();
150   int FrameDestroyOpcode = TII.getCallFrameDestroyOpcode();
151
152   // Early exit for targets which have no call frame setup/destroy pseudo
153   // instructions.
154   if (FrameSetupOpcode == -1 && FrameDestroyOpcode == -1)
155     return;
156
157   std::vector<MachineBasicBlock::iterator> FrameSDOps;
158   for (MachineFunction::iterator BB = Fn.begin(), E = Fn.end(); BB != E; ++BB)
159     for (MachineBasicBlock::iterator I = BB->begin(); I != BB->end(); ++I)
160       if (I->getOpcode() == FrameSetupOpcode ||
161           I->getOpcode() == FrameDestroyOpcode) {
162         assert(I->getNumOperands() >= 1 && "Call Frame Setup/Destroy Pseudo"
163                " instructions should have a single immediate argument!");
164         unsigned Size = I->getOperand(0).getImm();
165         if (Size > MaxCallFrameSize) MaxCallFrameSize = Size;
166         AdjustsStack = true;
167         FrameSDOps.push_back(I);
168       } else if (I->isInlineAsm()) {
169         // Some inline asm's need a stack frame, as indicated by operand 1.
170         unsigned ExtraInfo = I->getOperand(InlineAsm::MIOp_ExtraInfo).getImm();
171         if (ExtraInfo & InlineAsm::Extra_IsAlignStack)
172           AdjustsStack = true;
173       }
174
175   MFI->setAdjustsStack(AdjustsStack);
176   MFI->setMaxCallFrameSize(MaxCallFrameSize);
177
178   for (std::vector<MachineBasicBlock::iterator>::iterator
179          i = FrameSDOps.begin(), e = FrameSDOps.end(); i != e; ++i) {
180     MachineBasicBlock::iterator I = *i;
181
182     // If call frames are not being included as part of the stack frame, and
183     // the target doesn't indicate otherwise, remove the call frame pseudos
184     // here. The sub/add sp instruction pairs are still inserted, but we don't
185     // need to track the SP adjustment for frame index elimination.
186     if (TFI->canSimplifyCallFramePseudos(Fn))
187       TFI->eliminateCallFramePseudoInstr(Fn, *I->getParent(), I);
188   }
189 }
190
191
192 /// calculateCalleeSavedRegisters - Scan the function for modified callee saved
193 /// registers.
194 void PEI::calculateCalleeSavedRegisters(MachineFunction &F) {
195   const TargetRegisterInfo *RegInfo = F.getTarget().getRegisterInfo();
196   const TargetFrameLowering *TFI = F.getTarget().getFrameLowering();
197   MachineFrameInfo *MFI = F.getFrameInfo();
198
199   // Get the callee saved register list...
200   const uint16_t *CSRegs = RegInfo->getCalleeSavedRegs(&F);
201
202   // These are used to keep track the callee-save area. Initialize them.
203   MinCSFrameIndex = INT_MAX;
204   MaxCSFrameIndex = 0;
205
206   // Early exit for targets which have no callee saved registers.
207   if (CSRegs == 0 || CSRegs[0] == 0)
208     return;
209
210   // In Naked functions we aren't going to save any registers.
211   if (F.getFunction()->getAttributes().hasAttribute(AttributeSet::FunctionIndex,
212                                                     Attribute::Naked))
213     return;
214
215   std::vector<CalleeSavedInfo> CSI;
216   for (unsigned i = 0; CSRegs[i]; ++i) {
217     unsigned Reg = CSRegs[i];
218     if (F.getRegInfo().isPhysRegUsed(Reg)) {
219       // If the reg is modified, save it!
220       CSI.push_back(CalleeSavedInfo(Reg));
221     }
222   }
223
224   if (CSI.empty())
225     return;   // Early exit if no callee saved registers are modified!
226
227   unsigned NumFixedSpillSlots;
228   const TargetFrameLowering::SpillSlot *FixedSpillSlots =
229     TFI->getCalleeSavedSpillSlots(NumFixedSpillSlots);
230
231   // Now that we know which registers need to be saved and restored, allocate
232   // stack slots for them.
233   for (std::vector<CalleeSavedInfo>::iterator
234          I = CSI.begin(), E = CSI.end(); I != E; ++I) {
235     unsigned Reg = I->getReg();
236     const TargetRegisterClass *RC = RegInfo->getMinimalPhysRegClass(Reg);
237
238     int FrameIdx;
239     if (RegInfo->hasReservedSpillSlot(F, Reg, FrameIdx)) {
240       I->setFrameIdx(FrameIdx);
241       continue;
242     }
243
244     // Check to see if this physreg must be spilled to a particular stack slot
245     // on this target.
246     const TargetFrameLowering::SpillSlot *FixedSlot = FixedSpillSlots;
247     while (FixedSlot != FixedSpillSlots+NumFixedSpillSlots &&
248            FixedSlot->Reg != Reg)
249       ++FixedSlot;
250
251     if (FixedSlot == FixedSpillSlots + NumFixedSpillSlots) {
252       // Nope, just spill it anywhere convenient.
253       unsigned Align = RC->getAlignment();
254       unsigned StackAlign = TFI->getStackAlignment();
255
256       // We may not be able to satisfy the desired alignment specification of
257       // the TargetRegisterClass if the stack alignment is smaller. Use the
258       // min.
259       Align = std::min(Align, StackAlign);
260       FrameIdx = MFI->CreateStackObject(RC->getSize(), Align, true);
261       if ((unsigned)FrameIdx < MinCSFrameIndex) MinCSFrameIndex = FrameIdx;
262       if ((unsigned)FrameIdx > MaxCSFrameIndex) MaxCSFrameIndex = FrameIdx;
263     } else {
264       // Spill it to the stack where we must.
265       FrameIdx = MFI->CreateFixedObject(RC->getSize(), FixedSlot->Offset, true);
266     }
267
268     I->setFrameIdx(FrameIdx);
269   }
270
271   MFI->setCalleeSavedInfo(CSI);
272 }
273
274 /// insertCSRSpillsAndRestores - Insert spill and restore code for
275 /// callee saved registers used in the function, handling shrink wrapping.
276 ///
277 void PEI::insertCSRSpillsAndRestores(MachineFunction &Fn) {
278   // Get callee saved register information.
279   MachineFrameInfo *MFI = Fn.getFrameInfo();
280   const std::vector<CalleeSavedInfo> &CSI = MFI->getCalleeSavedInfo();
281
282   MFI->setCalleeSavedInfoValid(true);
283
284   // Early exit if no callee saved registers are modified!
285   if (CSI.empty())
286     return;
287
288   const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo();
289   const TargetFrameLowering *TFI = Fn.getTarget().getFrameLowering();
290   const TargetRegisterInfo *TRI = Fn.getTarget().getRegisterInfo();
291   MachineBasicBlock::iterator I;
292
293   if (!ShrinkWrapThisFunction) {
294     // Spill using target interface.
295     I = EntryBlock->begin();
296     if (!TFI->spillCalleeSavedRegisters(*EntryBlock, I, CSI, TRI)) {
297       for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
298         // Add the callee-saved register as live-in.
299         // It's killed at the spill.
300         EntryBlock->addLiveIn(CSI[i].getReg());
301
302         // Insert the spill to the stack frame.
303         unsigned Reg = CSI[i].getReg();
304         const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
305         TII.storeRegToStackSlot(*EntryBlock, I, Reg, true,
306                                 CSI[i].getFrameIdx(), RC, TRI);
307       }
308     }
309
310     // Restore using target interface.
311     for (unsigned ri = 0, re = ReturnBlocks.size(); ri != re; ++ri) {
312       MachineBasicBlock* MBB = ReturnBlocks[ri];
313       I = MBB->end(); --I;
314
315       // Skip over all terminator instructions, which are part of the return
316       // sequence.
317       MachineBasicBlock::iterator I2 = I;
318       while (I2 != MBB->begin() && (--I2)->isTerminator())
319         I = I2;
320
321       bool AtStart = I == MBB->begin();
322       MachineBasicBlock::iterator BeforeI = I;
323       if (!AtStart)
324         --BeforeI;
325
326       // Restore all registers immediately before the return and any
327       // terminators that precede it.
328       if (!TFI->restoreCalleeSavedRegisters(*MBB, I, CSI, TRI)) {
329         for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
330           unsigned Reg = CSI[i].getReg();
331           const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
332           TII.loadRegFromStackSlot(*MBB, I, Reg,
333                                    CSI[i].getFrameIdx(),
334                                    RC, TRI);
335           assert(I != MBB->begin() &&
336                  "loadRegFromStackSlot didn't insert any code!");
337           // Insert in reverse order.  loadRegFromStackSlot can insert
338           // multiple instructions.
339           if (AtStart)
340             I = MBB->begin();
341           else {
342             I = BeforeI;
343             ++I;
344           }
345         }
346       }
347     }
348     return;
349   }
350
351   // Insert spills.
352   std::vector<CalleeSavedInfo> blockCSI;
353   for (CSRegBlockMap::iterator BI = CSRSave.begin(),
354          BE = CSRSave.end(); BI != BE; ++BI) {
355     MachineBasicBlock* MBB = BI->first;
356     CSRegSet save = BI->second;
357
358     if (save.empty())
359       continue;
360
361     blockCSI.clear();
362     for (CSRegSet::iterator RI = save.begin(),
363            RE = save.end(); RI != RE; ++RI) {
364       blockCSI.push_back(CSI[*RI]);
365     }
366     assert(blockCSI.size() > 0 &&
367            "Could not collect callee saved register info");
368
369     I = MBB->begin();
370
371     // When shrink wrapping, use stack slot stores/loads.
372     for (unsigned i = 0, e = blockCSI.size(); i != e; ++i) {
373       // Add the callee-saved register as live-in.
374       // It's killed at the spill.
375       MBB->addLiveIn(blockCSI[i].getReg());
376
377       // Insert the spill to the stack frame.
378       unsigned Reg = blockCSI[i].getReg();
379       const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
380       TII.storeRegToStackSlot(*MBB, I, Reg,
381                               true,
382                               blockCSI[i].getFrameIdx(),
383                               RC, TRI);
384     }
385   }
386
387   for (CSRegBlockMap::iterator BI = CSRRestore.begin(),
388          BE = CSRRestore.end(); BI != BE; ++BI) {
389     MachineBasicBlock* MBB = BI->first;
390     CSRegSet restore = BI->second;
391
392     if (restore.empty())
393       continue;
394
395     blockCSI.clear();
396     for (CSRegSet::iterator RI = restore.begin(),
397            RE = restore.end(); RI != RE; ++RI) {
398       blockCSI.push_back(CSI[*RI]);
399     }
400     assert(blockCSI.size() > 0 &&
401            "Could not find callee saved register info");
402
403     // If MBB is empty and needs restores, insert at the _beginning_.
404     if (MBB->empty()) {
405       I = MBB->begin();
406     } else {
407       I = MBB->end();
408       --I;
409
410       // Skip over all terminator instructions, which are part of the
411       // return sequence.
412       if (! I->isTerminator()) {
413         ++I;
414       } else {
415         MachineBasicBlock::iterator I2 = I;
416         while (I2 != MBB->begin() && (--I2)->isTerminator())
417           I = I2;
418       }
419     }
420
421     bool AtStart = I == MBB->begin();
422     MachineBasicBlock::iterator BeforeI = I;
423     if (!AtStart)
424       --BeforeI;
425
426     // Restore all registers immediately before the return and any
427     // terminators that precede it.
428     for (unsigned i = 0, e = blockCSI.size(); i != e; ++i) {
429       unsigned Reg = blockCSI[i].getReg();
430       const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
431       TII.loadRegFromStackSlot(*MBB, I, Reg,
432                                blockCSI[i].getFrameIdx(),
433                                RC, TRI);
434       assert(I != MBB->begin() &&
435              "loadRegFromStackSlot didn't insert any code!");
436       // Insert in reverse order.  loadRegFromStackSlot can insert
437       // multiple instructions.
438       if (AtStart)
439         I = MBB->begin();
440       else {
441         I = BeforeI;
442         ++I;
443       }
444     }
445   }
446 }
447
448 /// AdjustStackOffset - Helper function used to adjust the stack frame offset.
449 static inline void
450 AdjustStackOffset(MachineFrameInfo *MFI, int FrameIdx,
451                   bool StackGrowsDown, int64_t &Offset,
452                   unsigned &MaxAlign) {
453   // If the stack grows down, add the object size to find the lowest address.
454   if (StackGrowsDown)
455     Offset += MFI->getObjectSize(FrameIdx);
456
457   unsigned Align = MFI->getObjectAlignment(FrameIdx);
458
459   // If the alignment of this object is greater than that of the stack, then
460   // increase the stack alignment to match.
461   MaxAlign = std::max(MaxAlign, Align);
462
463   // Adjust to alignment boundary.
464   Offset = (Offset + Align - 1) / Align * Align;
465
466   if (StackGrowsDown) {
467     DEBUG(dbgs() << "alloc FI(" << FrameIdx << ") at SP[" << -Offset << "]\n");
468     MFI->setObjectOffset(FrameIdx, -Offset); // Set the computed offset
469   } else {
470     DEBUG(dbgs() << "alloc FI(" << FrameIdx << ") at SP[" << Offset << "]\n");
471     MFI->setObjectOffset(FrameIdx, Offset);
472     Offset += MFI->getObjectSize(FrameIdx);
473   }
474 }
475
476 /// calculateFrameObjectOffsets - Calculate actual frame offsets for all of the
477 /// abstract stack objects.
478 ///
479 void PEI::calculateFrameObjectOffsets(MachineFunction &Fn) {
480   const TargetFrameLowering &TFI = *Fn.getTarget().getFrameLowering();
481
482   bool StackGrowsDown =
483     TFI.getStackGrowthDirection() == TargetFrameLowering::StackGrowsDown;
484
485   // Loop over all of the stack objects, assigning sequential addresses...
486   MachineFrameInfo *MFI = Fn.getFrameInfo();
487
488   // Start at the beginning of the local area.
489   // The Offset is the distance from the stack top in the direction
490   // of stack growth -- so it's always nonnegative.
491   int LocalAreaOffset = TFI.getOffsetOfLocalArea();
492   if (StackGrowsDown)
493     LocalAreaOffset = -LocalAreaOffset;
494   assert(LocalAreaOffset >= 0
495          && "Local area offset should be in direction of stack growth");
496   int64_t Offset = LocalAreaOffset;
497
498   // If there are fixed sized objects that are preallocated in the local area,
499   // non-fixed objects can't be allocated right at the start of local area.
500   // We currently don't support filling in holes in between fixed sized
501   // objects, so we adjust 'Offset' to point to the end of last fixed sized
502   // preallocated object.
503   for (int i = MFI->getObjectIndexBegin(); i != 0; ++i) {
504     int64_t FixedOff;
505     if (StackGrowsDown) {
506       // The maximum distance from the stack pointer is at lower address of
507       // the object -- which is given by offset. For down growing stack
508       // the offset is negative, so we negate the offset to get the distance.
509       FixedOff = -MFI->getObjectOffset(i);
510     } else {
511       // The maximum distance from the start pointer is at the upper
512       // address of the object.
513       FixedOff = MFI->getObjectOffset(i) + MFI->getObjectSize(i);
514     }
515     if (FixedOff > Offset) Offset = FixedOff;
516   }
517
518   // First assign frame offsets to stack objects that are used to spill
519   // callee saved registers.
520   if (StackGrowsDown) {
521     for (unsigned i = MinCSFrameIndex; i <= MaxCSFrameIndex; ++i) {
522       // If the stack grows down, we need to add the size to find the lowest
523       // address of the object.
524       Offset += MFI->getObjectSize(i);
525
526       unsigned Align = MFI->getObjectAlignment(i);
527       // Adjust to alignment boundary
528       Offset = (Offset+Align-1)/Align*Align;
529
530       MFI->setObjectOffset(i, -Offset);        // Set the computed offset
531     }
532   } else {
533     int MaxCSFI = MaxCSFrameIndex, MinCSFI = MinCSFrameIndex;
534     for (int i = MaxCSFI; i >= MinCSFI ; --i) {
535       unsigned Align = MFI->getObjectAlignment(i);
536       // Adjust to alignment boundary
537       Offset = (Offset+Align-1)/Align*Align;
538
539       MFI->setObjectOffset(i, Offset);
540       Offset += MFI->getObjectSize(i);
541     }
542   }
543
544   unsigned MaxAlign = MFI->getMaxAlignment();
545
546   // Make sure the special register scavenging spill slot is closest to the
547   // frame pointer if a frame pointer is required.
548   const TargetRegisterInfo *RegInfo = Fn.getTarget().getRegisterInfo();
549   if (RS && TFI.hasFP(Fn) && RegInfo->useFPForScavengingIndex(Fn) &&
550       !RegInfo->needsStackRealignment(Fn)) {
551     int SFI = RS->getScavengingFrameIndex();
552     if (SFI >= 0)
553       AdjustStackOffset(MFI, SFI, StackGrowsDown, Offset, MaxAlign);
554   }
555
556   // FIXME: Once this is working, then enable flag will change to a target
557   // check for whether the frame is large enough to want to use virtual
558   // frame index registers. Functions which don't want/need this optimization
559   // will continue to use the existing code path.
560   if (MFI->getUseLocalStackAllocationBlock()) {
561     unsigned Align = MFI->getLocalFrameMaxAlign();
562
563     // Adjust to alignment boundary.
564     Offset = (Offset + Align - 1) / Align * Align;
565
566     DEBUG(dbgs() << "Local frame base offset: " << Offset << "\n");
567
568     // Resolve offsets for objects in the local block.
569     for (unsigned i = 0, e = MFI->getLocalFrameObjectCount(); i != e; ++i) {
570       std::pair<int, int64_t> Entry = MFI->getLocalFrameObjectMap(i);
571       int64_t FIOffset = (StackGrowsDown ? -Offset : Offset) + Entry.second;
572       DEBUG(dbgs() << "alloc FI(" << Entry.first << ") at SP[" <<
573             FIOffset << "]\n");
574       MFI->setObjectOffset(Entry.first, FIOffset);
575     }
576     // Allocate the local block
577     Offset += MFI->getLocalFrameSize();
578
579     MaxAlign = std::max(Align, MaxAlign);
580   }
581
582   // Make sure that the stack protector comes before the local variables on the
583   // stack.
584   SmallSet<int, 16> LargeStackObjs;
585   if (MFI->getStackProtectorIndex() >= 0) {
586     AdjustStackOffset(MFI, MFI->getStackProtectorIndex(), StackGrowsDown,
587                       Offset, MaxAlign);
588
589     // Assign large stack objects first.
590     for (unsigned i = 0, e = MFI->getObjectIndexEnd(); i != e; ++i) {
591       if (MFI->isObjectPreAllocated(i) &&
592           MFI->getUseLocalStackAllocationBlock())
593         continue;
594       if (i >= MinCSFrameIndex && i <= MaxCSFrameIndex)
595         continue;
596       if (RS && (int)i == RS->getScavengingFrameIndex())
597         continue;
598       if (MFI->isDeadObjectIndex(i))
599         continue;
600       if (MFI->getStackProtectorIndex() == (int)i)
601         continue;
602       if (!MFI->MayNeedStackProtector(i))
603         continue;
604
605       AdjustStackOffset(MFI, i, StackGrowsDown, Offset, MaxAlign);
606       LargeStackObjs.insert(i);
607     }
608   }
609
610   // Then assign frame offsets to stack objects that are not used to spill
611   // callee saved registers.
612   for (unsigned i = 0, e = MFI->getObjectIndexEnd(); i != e; ++i) {
613     if (MFI->isObjectPreAllocated(i) &&
614         MFI->getUseLocalStackAllocationBlock())
615       continue;
616     if (i >= MinCSFrameIndex && i <= MaxCSFrameIndex)
617       continue;
618     if (RS && (int)i == RS->getScavengingFrameIndex())
619       continue;
620     if (MFI->isDeadObjectIndex(i))
621       continue;
622     if (MFI->getStackProtectorIndex() == (int)i)
623       continue;
624     if (LargeStackObjs.count(i))
625       continue;
626
627     AdjustStackOffset(MFI, i, StackGrowsDown, Offset, MaxAlign);
628   }
629
630   // Make sure the special register scavenging spill slot is closest to the
631   // stack pointer.
632   if (RS && (!TFI.hasFP(Fn) || RegInfo->needsStackRealignment(Fn) ||
633              !RegInfo->useFPForScavengingIndex(Fn))) {
634     int SFI = RS->getScavengingFrameIndex();
635     if (SFI >= 0)
636       AdjustStackOffset(MFI, SFI, StackGrowsDown, Offset, MaxAlign);
637   }
638
639   if (!TFI.targetHandlesStackFrameRounding()) {
640     // If we have reserved argument space for call sites in the function
641     // immediately on entry to the current function, count it as part of the
642     // overall stack size.
643     if (MFI->adjustsStack() && TFI.hasReservedCallFrame(Fn))
644       Offset += MFI->getMaxCallFrameSize();
645
646     // Round up the size to a multiple of the alignment.  If the function has
647     // any calls or alloca's, align to the target's StackAlignment value to
648     // ensure that the callee's frame or the alloca data is suitably aligned;
649     // otherwise, for leaf functions, align to the TransientStackAlignment
650     // value.
651     unsigned StackAlign;
652     if (MFI->adjustsStack() || MFI->hasVarSizedObjects() ||
653         (RegInfo->needsStackRealignment(Fn) && MFI->getObjectIndexEnd() != 0))
654       StackAlign = TFI.getStackAlignment();
655     else
656       StackAlign = TFI.getTransientStackAlignment();
657
658     // If the frame pointer is eliminated, all frame offsets will be relative to
659     // SP not FP. Align to MaxAlign so this works.
660     StackAlign = std::max(StackAlign, MaxAlign);
661     unsigned AlignMask = StackAlign - 1;
662     Offset = (Offset + AlignMask) & ~uint64_t(AlignMask);
663   }
664
665   // Update frame info to pretend that this is part of the stack...
666   int64_t StackSize = Offset - LocalAreaOffset;
667   MFI->setStackSize(StackSize);
668   NumBytesStackSpace += StackSize;
669 }
670
671 /// insertPrologEpilogCode - Scan the function for modified callee saved
672 /// registers, insert spill code for these callee saved registers, then add
673 /// prolog and epilog code to the function.
674 ///
675 void PEI::insertPrologEpilogCode(MachineFunction &Fn) {
676   const TargetFrameLowering &TFI = *Fn.getTarget().getFrameLowering();
677
678   // Add prologue to the function...
679   TFI.emitPrologue(Fn);
680
681   // Add epilogue to restore the callee-save registers in each exiting block
682   for (MachineFunction::iterator I = Fn.begin(), E = Fn.end(); I != E; ++I) {
683     // If last instruction is a return instruction, add an epilogue
684     if (!I->empty() && I->back().isReturn())
685       TFI.emitEpilogue(Fn, *I);
686   }
687
688   // Emit additional code that is required to support segmented stacks, if
689   // we've been asked for it.  This, when linked with a runtime with support
690   // for segmented stacks (libgcc is one), will result in allocating stack
691   // space in small chunks instead of one large contiguous block.
692   if (Fn.getTarget().Options.EnableSegmentedStacks)
693     TFI.adjustForSegmentedStacks(Fn);
694
695   // Emit additional code that is required to explicitly handle the stack in
696   // HiPE native code (if needed) when loaded in the Erlang/OTP runtime. The
697   // approach is rather similar to that of Segmented Stacks, but it uses a
698   // different conditional check and another BIF for allocating more stack
699   // space.
700   if (Fn.getFunction()->getCallingConv() == CallingConv::HiPE)
701     TFI.adjustForHiPEPrologue(Fn);
702 }
703
704 /// replaceFrameIndices - Replace all MO_FrameIndex operands with physical
705 /// register references and actual offsets.
706 ///
707 void PEI::replaceFrameIndices(MachineFunction &Fn) {
708   if (!Fn.getFrameInfo()->hasStackObjects()) return; // Nothing to do?
709
710   const TargetMachine &TM = Fn.getTarget();
711   assert(TM.getRegisterInfo() && "TM::getRegisterInfo() must be implemented!");
712   const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo();
713   const TargetRegisterInfo &TRI = *TM.getRegisterInfo();
714   const TargetFrameLowering *TFI = TM.getFrameLowering();
715   bool StackGrowsDown =
716     TFI->getStackGrowthDirection() == TargetFrameLowering::StackGrowsDown;
717   int FrameSetupOpcode   = TII.getCallFrameSetupOpcode();
718   int FrameDestroyOpcode = TII.getCallFrameDestroyOpcode();
719
720   for (MachineFunction::iterator BB = Fn.begin(),
721          E = Fn.end(); BB != E; ++BB) {
722 #ifndef NDEBUG
723     int SPAdjCount = 0; // frame setup / destroy count.
724 #endif
725     int SPAdj = 0;  // SP offset due to call frame setup / destroy.
726     if (RS && !FrameIndexVirtualScavenging) RS->enterBasicBlock(BB);
727
728     for (MachineBasicBlock::iterator I = BB->begin(); I != BB->end(); ) {
729
730       if (I->getOpcode() == FrameSetupOpcode ||
731           I->getOpcode() == FrameDestroyOpcode) {
732 #ifndef NDEBUG
733         // Track whether we see even pairs of them
734         SPAdjCount += I->getOpcode() == FrameSetupOpcode ? 1 : -1;
735 #endif
736         // Remember how much SP has been adjusted to create the call
737         // frame.
738         int Size = I->getOperand(0).getImm();
739
740         if ((!StackGrowsDown && I->getOpcode() == FrameSetupOpcode) ||
741             (StackGrowsDown && I->getOpcode() == FrameDestroyOpcode))
742           Size = -Size;
743
744         SPAdj += Size;
745
746         MachineBasicBlock::iterator PrevI = BB->end();
747         if (I != BB->begin()) PrevI = prior(I);
748         TFI->eliminateCallFramePseudoInstr(Fn, *BB, I);
749
750         // Visit the instructions created by eliminateCallFramePseudoInstr().
751         if (PrevI == BB->end())
752           I = BB->begin();     // The replaced instr was the first in the block.
753         else
754           I = llvm::next(PrevI);
755         continue;
756       }
757
758       MachineInstr *MI = I;
759       bool DoIncr = true;
760       for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
761         if (!MI->getOperand(i).isFI())
762             continue;
763
764         // Some instructions (e.g. inline asm instructions) can have
765         // multiple frame indices and/or cause eliminateFrameIndex
766         // to insert more than one instruction. We need the register
767         // scavenger to go through all of these instructions so that
768         // it can update its register information. We keep the
769         // iterator at the point before insertion so that we can
770         // revisit them in full.
771         bool AtBeginning = (I == BB->begin());
772         if (!AtBeginning) --I;
773
774         // If this instruction has a FrameIndex operand, we need to
775         // use that target machine register info object to eliminate
776         // it.
777         TRI.eliminateFrameIndex(MI, SPAdj, i,
778                                 FrameIndexVirtualScavenging ?  NULL : RS);
779
780         // Reset the iterator if we were at the beginning of the BB.
781         if (AtBeginning) {
782           I = BB->begin();
783           DoIncr = false;
784         }
785
786         MI = 0;
787         break;
788       }
789
790       if (DoIncr && I != BB->end()) ++I;
791
792       // Update register states.
793       if (RS && !FrameIndexVirtualScavenging && MI) RS->forward(MI);
794     }
795
796     // If we have evenly matched pairs of frame setup / destroy instructions,
797     // make sure the adjustments come out to zero. If we don't have matched
798     // pairs, we can't be sure the missing bit isn't in another basic block
799     // due to a custom inserter playing tricks, so just asserting SPAdj==0
800     // isn't sufficient. See tMOVCC on Thumb1, for example.
801     assert((SPAdjCount || SPAdj == 0) &&
802            "Unbalanced call frame setup / destroy pairs?");
803   }
804 }
805
806 /// scavengeFrameVirtualRegs - Replace all frame index virtual registers
807 /// with physical registers. Use the register scavenger to find an
808 /// appropriate register to use.
809 ///
810 /// FIXME: Iterating over the instruction stream is unnecessary. We can simply
811 /// iterate over the vreg use list, which at this point only contains machine
812 /// operands for which eliminateFrameIndex need a new scratch reg.
813 void PEI::scavengeFrameVirtualRegs(MachineFunction &Fn) {
814   // Run through the instructions and find any virtual registers.
815   for (MachineFunction::iterator BB = Fn.begin(),
816        E = Fn.end(); BB != E; ++BB) {
817     RS->enterBasicBlock(BB);
818
819     unsigned VirtReg = 0;
820     unsigned ScratchReg = 0;
821     int SPAdj = 0;
822
823     // The instruction stream may change in the loop, so check BB->end()
824     // directly.
825     for (MachineBasicBlock::iterator I = BB->begin(); I != BB->end(); ) {
826       MachineInstr *MI = I;
827       for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) {
828         if (MI->getOperand(i).isReg()) {
829           MachineOperand &MO = MI->getOperand(i);
830           unsigned Reg = MO.getReg();
831           if (Reg == 0)
832             continue;
833           if (!TargetRegisterInfo::isVirtualRegister(Reg))
834             continue;
835
836           ++NumVirtualFrameRegs;
837
838           // Have we already allocated a scratch register for this virtual?
839           if (Reg != VirtReg) {
840             // When we first encounter a new virtual register, it
841             // must be a definition.
842             assert(MI->getOperand(i).isDef() &&
843                    "frame index virtual missing def!");
844             // Scavenge a new scratch register
845             VirtReg = Reg;
846             const TargetRegisterClass *RC = Fn.getRegInfo().getRegClass(Reg);
847             ScratchReg = RS->scavengeRegister(RC, I, SPAdj);
848             ++NumScavengedRegs;
849           }
850           // Replace this reference to the virtual register with the
851           // scratch register.
852           assert (ScratchReg && "Missing scratch register!");
853           MI->getOperand(i).setReg(ScratchReg);
854
855         }
856       }
857       RS->forward(I);
858       ++I;
859     }
860   }
861 }