xref: /llvm-project/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp (revision 0f7f59f0737770fbf9393e602de731a3b413e8a5)
1 //===-- PPCFrameLowering.cpp - PPC Frame Information ----------------------===//
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 file contains the PPC implementation of TargetFrameLowering class.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #include "PPCFrameLowering.h"
15 #include "PPCInstrBuilder.h"
16 #include "PPCInstrInfo.h"
17 #include "PPCMachineFunctionInfo.h"
18 #include "PPCSubtarget.h"
19 #include "PPCTargetMachine.h"
20 #include "llvm/CodeGen/MachineFrameInfo.h"
21 #include "llvm/CodeGen/MachineFunction.h"
22 #include "llvm/CodeGen/MachineInstrBuilder.h"
23 #include "llvm/CodeGen/MachineModuleInfo.h"
24 #include "llvm/CodeGen/MachineRegisterInfo.h"
25 #include "llvm/CodeGen/RegisterScavenging.h"
26 #include "llvm/IR/Function.h"
27 #include "llvm/Target/TargetOptions.h"
28 
29 using namespace llvm;
30 
31 /// VRRegNo - Map from a numbered VR register to its enum value.
32 ///
33 static const MCPhysReg VRRegNo[] = {
34  PPC::V0 , PPC::V1 , PPC::V2 , PPC::V3 , PPC::V4 , PPC::V5 , PPC::V6 , PPC::V7 ,
35  PPC::V8 , PPC::V9 , PPC::V10, PPC::V11, PPC::V12, PPC::V13, PPC::V14, PPC::V15,
36  PPC::V16, PPC::V17, PPC::V18, PPC::V19, PPC::V20, PPC::V21, PPC::V22, PPC::V23,
37  PPC::V24, PPC::V25, PPC::V26, PPC::V27, PPC::V28, PPC::V29, PPC::V30, PPC::V31
38 };
39 
40 static unsigned computeReturnSaveOffset(const PPCSubtarget &STI) {
41   if (STI.isDarwinABI())
42     return STI.isPPC64() ? 16 : 8;
43   // SVR4 ABI:
44   return STI.isPPC64() ? 16 : 4;
45 }
46 
47 static unsigned computeTOCSaveOffset(const PPCSubtarget &STI) {
48   return STI.isELFv2ABI() ? 24 : 40;
49 }
50 
51 static unsigned computeFramePointerSaveOffset(const PPCSubtarget &STI) {
52   // For the Darwin ABI:
53   // We cannot use the TOC save slot (offset +20) in the PowerPC linkage area
54   // for saving the frame pointer (if needed.)  While the published ABI has
55   // not used this slot since at least MacOSX 10.2, there is older code
56   // around that does use it, and that needs to continue to work.
57   if (STI.isDarwinABI())
58     return STI.isPPC64() ? -8U : -4U;
59 
60   // SVR4 ABI: First slot in the general register save area.
61   return STI.isPPC64() ? -8U : -4U;
62 }
63 
64 static unsigned computeLinkageSize(const PPCSubtarget &STI) {
65   if (STI.isDarwinABI() || STI.isPPC64())
66     return (STI.isELFv2ABI() ? 4 : 6) * (STI.isPPC64() ? 8 : 4);
67 
68   // SVR4 ABI:
69   return 8;
70 }
71 
72 static unsigned computeBasePointerSaveOffset(const PPCSubtarget &STI) {
73   if (STI.isDarwinABI())
74     return STI.isPPC64() ? -16U : -8U;
75 
76   // SVR4 ABI: First slot in the general register save area.
77   return STI.isPPC64()
78              ? -16U
79              : STI.getTargetMachine().isPositionIndependent() ? -12U : -8U;
80 }
81 
82 PPCFrameLowering::PPCFrameLowering(const PPCSubtarget &STI)
83     : TargetFrameLowering(TargetFrameLowering::StackGrowsDown,
84                           STI.getPlatformStackAlignment(), 0),
85       Subtarget(STI), ReturnSaveOffset(computeReturnSaveOffset(Subtarget)),
86       TOCSaveOffset(computeTOCSaveOffset(Subtarget)),
87       FramePointerSaveOffset(computeFramePointerSaveOffset(Subtarget)),
88       LinkageSize(computeLinkageSize(Subtarget)),
89       BasePointerSaveOffset(computeBasePointerSaveOffset(STI)) {}
90 
91 // With the SVR4 ABI, callee-saved registers have fixed offsets on the stack.
92 const PPCFrameLowering::SpillSlot *PPCFrameLowering::getCalleeSavedSpillSlots(
93     unsigned &NumEntries) const {
94   if (Subtarget.isDarwinABI()) {
95     NumEntries = 1;
96     if (Subtarget.isPPC64()) {
97       static const SpillSlot darwin64Offsets = {PPC::X31, -8};
98       return &darwin64Offsets;
99     } else {
100       static const SpillSlot darwinOffsets = {PPC::R31, -4};
101       return &darwinOffsets;
102     }
103   }
104 
105   // Early exit if not using the SVR4 ABI.
106   if (!Subtarget.isSVR4ABI()) {
107     NumEntries = 0;
108     return nullptr;
109   }
110 
111   // Note that the offsets here overlap, but this is fixed up in
112   // processFunctionBeforeFrameFinalized.
113 
114   static const SpillSlot Offsets[] = {
115       // Floating-point register save area offsets.
116       {PPC::F31, -8},
117       {PPC::F30, -16},
118       {PPC::F29, -24},
119       {PPC::F28, -32},
120       {PPC::F27, -40},
121       {PPC::F26, -48},
122       {PPC::F25, -56},
123       {PPC::F24, -64},
124       {PPC::F23, -72},
125       {PPC::F22, -80},
126       {PPC::F21, -88},
127       {PPC::F20, -96},
128       {PPC::F19, -104},
129       {PPC::F18, -112},
130       {PPC::F17, -120},
131       {PPC::F16, -128},
132       {PPC::F15, -136},
133       {PPC::F14, -144},
134 
135       // General register save area offsets.
136       {PPC::R31, -4},
137       {PPC::R30, -8},
138       {PPC::R29, -12},
139       {PPC::R28, -16},
140       {PPC::R27, -20},
141       {PPC::R26, -24},
142       {PPC::R25, -28},
143       {PPC::R24, -32},
144       {PPC::R23, -36},
145       {PPC::R22, -40},
146       {PPC::R21, -44},
147       {PPC::R20, -48},
148       {PPC::R19, -52},
149       {PPC::R18, -56},
150       {PPC::R17, -60},
151       {PPC::R16, -64},
152       {PPC::R15, -68},
153       {PPC::R14, -72},
154 
155       // CR save area offset.  We map each of the nonvolatile CR fields
156       // to the slot for CR2, which is the first of the nonvolatile CR
157       // fields to be assigned, so that we only allocate one save slot.
158       // See PPCRegisterInfo::hasReservedSpillSlot() for more information.
159       {PPC::CR2, -4},
160 
161       // VRSAVE save area offset.
162       {PPC::VRSAVE, -4},
163 
164       // Vector register save area
165       {PPC::V31, -16},
166       {PPC::V30, -32},
167       {PPC::V29, -48},
168       {PPC::V28, -64},
169       {PPC::V27, -80},
170       {PPC::V26, -96},
171       {PPC::V25, -112},
172       {PPC::V24, -128},
173       {PPC::V23, -144},
174       {PPC::V22, -160},
175       {PPC::V21, -176},
176       {PPC::V20, -192}};
177 
178   static const SpillSlot Offsets64[] = {
179       // Floating-point register save area offsets.
180       {PPC::F31, -8},
181       {PPC::F30, -16},
182       {PPC::F29, -24},
183       {PPC::F28, -32},
184       {PPC::F27, -40},
185       {PPC::F26, -48},
186       {PPC::F25, -56},
187       {PPC::F24, -64},
188       {PPC::F23, -72},
189       {PPC::F22, -80},
190       {PPC::F21, -88},
191       {PPC::F20, -96},
192       {PPC::F19, -104},
193       {PPC::F18, -112},
194       {PPC::F17, -120},
195       {PPC::F16, -128},
196       {PPC::F15, -136},
197       {PPC::F14, -144},
198 
199       // General register save area offsets.
200       {PPC::X31, -8},
201       {PPC::X30, -16},
202       {PPC::X29, -24},
203       {PPC::X28, -32},
204       {PPC::X27, -40},
205       {PPC::X26, -48},
206       {PPC::X25, -56},
207       {PPC::X24, -64},
208       {PPC::X23, -72},
209       {PPC::X22, -80},
210       {PPC::X21, -88},
211       {PPC::X20, -96},
212       {PPC::X19, -104},
213       {PPC::X18, -112},
214       {PPC::X17, -120},
215       {PPC::X16, -128},
216       {PPC::X15, -136},
217       {PPC::X14, -144},
218 
219       // VRSAVE save area offset.
220       {PPC::VRSAVE, -4},
221 
222       // Vector register save area
223       {PPC::V31, -16},
224       {PPC::V30, -32},
225       {PPC::V29, -48},
226       {PPC::V28, -64},
227       {PPC::V27, -80},
228       {PPC::V26, -96},
229       {PPC::V25, -112},
230       {PPC::V24, -128},
231       {PPC::V23, -144},
232       {PPC::V22, -160},
233       {PPC::V21, -176},
234       {PPC::V20, -192}};
235 
236   if (Subtarget.isPPC64()) {
237     NumEntries = array_lengthof(Offsets64);
238 
239     return Offsets64;
240   } else {
241     NumEntries = array_lengthof(Offsets);
242 
243     return Offsets;
244   }
245 }
246 
247 /// RemoveVRSaveCode - We have found that this function does not need any code
248 /// to manipulate the VRSAVE register, even though it uses vector registers.
249 /// This can happen when the only registers used are known to be live in or out
250 /// of the function.  Remove all of the VRSAVE related code from the function.
251 /// FIXME: The removal of the code results in a compile failure at -O0 when the
252 /// function contains a function call, as the GPR containing original VRSAVE
253 /// contents is spilled and reloaded around the call.  Without the prolog code,
254 /// the spill instruction refers to an undefined register.  This code needs
255 /// to account for all uses of that GPR.
256 static void RemoveVRSaveCode(MachineInstr &MI) {
257   MachineBasicBlock *Entry = MI.getParent();
258   MachineFunction *MF = Entry->getParent();
259 
260   // We know that the MTVRSAVE instruction immediately follows MI.  Remove it.
261   MachineBasicBlock::iterator MBBI = MI;
262   ++MBBI;
263   assert(MBBI != Entry->end() && MBBI->getOpcode() == PPC::MTVRSAVE);
264   MBBI->eraseFromParent();
265 
266   bool RemovedAllMTVRSAVEs = true;
267   // See if we can find and remove the MTVRSAVE instruction from all of the
268   // epilog blocks.
269   for (MachineFunction::iterator I = MF->begin(), E = MF->end(); I != E; ++I) {
270     // If last instruction is a return instruction, add an epilogue
271     if (I->isReturnBlock()) {
272       bool FoundIt = false;
273       for (MBBI = I->end(); MBBI != I->begin(); ) {
274         --MBBI;
275         if (MBBI->getOpcode() == PPC::MTVRSAVE) {
276           MBBI->eraseFromParent();  // remove it.
277           FoundIt = true;
278           break;
279         }
280       }
281       RemovedAllMTVRSAVEs &= FoundIt;
282     }
283   }
284 
285   // If we found and removed all MTVRSAVE instructions, remove the read of
286   // VRSAVE as well.
287   if (RemovedAllMTVRSAVEs) {
288     MBBI = MI;
289     assert(MBBI != Entry->begin() && "UPDATE_VRSAVE is first instr in block?");
290     --MBBI;
291     assert(MBBI->getOpcode() == PPC::MFVRSAVE && "VRSAVE instrs wandered?");
292     MBBI->eraseFromParent();
293   }
294 
295   // Finally, nuke the UPDATE_VRSAVE.
296   MI.eraseFromParent();
297 }
298 
299 // HandleVRSaveUpdate - MI is the UPDATE_VRSAVE instruction introduced by the
300 // instruction selector.  Based on the vector registers that have been used,
301 // transform this into the appropriate ORI instruction.
302 static void HandleVRSaveUpdate(MachineInstr &MI, const TargetInstrInfo &TII) {
303   MachineFunction *MF = MI.getParent()->getParent();
304   const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
305   DebugLoc dl = MI.getDebugLoc();
306 
307   const MachineRegisterInfo &MRI = MF->getRegInfo();
308   unsigned UsedRegMask = 0;
309   for (unsigned i = 0; i != 32; ++i)
310     if (MRI.isPhysRegModified(VRRegNo[i]))
311       UsedRegMask |= 1 << (31-i);
312 
313   // Live in and live out values already must be in the mask, so don't bother
314   // marking them.
315   for (std::pair<unsigned, unsigned> LI : MF->getRegInfo().liveins()) {
316     unsigned RegNo = TRI->getEncodingValue(LI.first);
317     if (VRRegNo[RegNo] == LI.first)        // If this really is a vector reg.
318       UsedRegMask &= ~(1 << (31-RegNo));   // Doesn't need to be marked.
319   }
320 
321   // Live out registers appear as use operands on return instructions.
322   for (MachineFunction::const_iterator BI = MF->begin(), BE = MF->end();
323        UsedRegMask != 0 && BI != BE; ++BI) {
324     const MachineBasicBlock &MBB = *BI;
325     if (!MBB.isReturnBlock())
326       continue;
327     const MachineInstr &Ret = MBB.back();
328     for (unsigned I = 0, E = Ret.getNumOperands(); I != E; ++I) {
329       const MachineOperand &MO = Ret.getOperand(I);
330       if (!MO.isReg() || !PPC::VRRCRegClass.contains(MO.getReg()))
331         continue;
332       unsigned RegNo = TRI->getEncodingValue(MO.getReg());
333       UsedRegMask &= ~(1 << (31-RegNo));
334     }
335   }
336 
337   // If no registers are used, turn this into a copy.
338   if (UsedRegMask == 0) {
339     // Remove all VRSAVE code.
340     RemoveVRSaveCode(MI);
341     return;
342   }
343 
344   unsigned SrcReg = MI.getOperand(1).getReg();
345   unsigned DstReg = MI.getOperand(0).getReg();
346 
347   if ((UsedRegMask & 0xFFFF) == UsedRegMask) {
348     if (DstReg != SrcReg)
349       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORI), DstReg)
350           .addReg(SrcReg)
351           .addImm(UsedRegMask);
352     else
353       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORI), DstReg)
354           .addReg(SrcReg, RegState::Kill)
355           .addImm(UsedRegMask);
356   } else if ((UsedRegMask & 0xFFFF0000) == UsedRegMask) {
357     if (DstReg != SrcReg)
358       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORIS), DstReg)
359           .addReg(SrcReg)
360           .addImm(UsedRegMask >> 16);
361     else
362       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORIS), DstReg)
363           .addReg(SrcReg, RegState::Kill)
364           .addImm(UsedRegMask >> 16);
365   } else {
366     if (DstReg != SrcReg)
367       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORIS), DstReg)
368           .addReg(SrcReg)
369           .addImm(UsedRegMask >> 16);
370     else
371       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORIS), DstReg)
372           .addReg(SrcReg, RegState::Kill)
373           .addImm(UsedRegMask >> 16);
374 
375     BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORI), DstReg)
376         .addReg(DstReg, RegState::Kill)
377         .addImm(UsedRegMask & 0xFFFF);
378   }
379 
380   // Remove the old UPDATE_VRSAVE instruction.
381   MI.eraseFromParent();
382 }
383 
384 static bool spillsCR(const MachineFunction &MF) {
385   const PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
386   return FuncInfo->isCRSpilled();
387 }
388 
389 static bool spillsVRSAVE(const MachineFunction &MF) {
390   const PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
391   return FuncInfo->isVRSAVESpilled();
392 }
393 
394 static bool hasSpills(const MachineFunction &MF) {
395   const PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
396   return FuncInfo->hasSpills();
397 }
398 
399 static bool hasNonRISpills(const MachineFunction &MF) {
400   const PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
401   return FuncInfo->hasNonRISpills();
402 }
403 
404 /// MustSaveLR - Return true if this function requires that we save the LR
405 /// register onto the stack in the prolog and restore it in the epilog of the
406 /// function.
407 static bool MustSaveLR(const MachineFunction &MF, unsigned LR) {
408   const PPCFunctionInfo *MFI = MF.getInfo<PPCFunctionInfo>();
409 
410   // We need a save/restore of LR if there is any def of LR (which is
411   // defined by calls, including the PIC setup sequence), or if there is
412   // some use of the LR stack slot (e.g. for builtin_return_address).
413   // (LR comes in 32 and 64 bit versions.)
414   MachineRegisterInfo::def_iterator RI = MF.getRegInfo().def_begin(LR);
415   return RI !=MF.getRegInfo().def_end() || MFI->isLRStoreRequired();
416 }
417 
418 /// determineFrameLayout - Determine the size of the frame and maximum call
419 /// frame size.
420 unsigned PPCFrameLowering::determineFrameLayout(MachineFunction &MF,
421                                                 bool UpdateMF,
422                                                 bool UseEstimate) const {
423   MachineFrameInfo &MFI = MF.getFrameInfo();
424 
425   // Get the number of bytes to allocate from the FrameInfo
426   unsigned FrameSize =
427     UseEstimate ? MFI.estimateStackSize(MF) : MFI.getStackSize();
428 
429   // Get stack alignments. The frame must be aligned to the greatest of these:
430   unsigned TargetAlign = getStackAlignment(); // alignment required per the ABI
431   unsigned MaxAlign = MFI.getMaxAlignment(); // algmt required by data in frame
432   unsigned AlignMask = std::max(MaxAlign, TargetAlign) - 1;
433 
434   const PPCRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
435 
436   unsigned LR = RegInfo->getRARegister();
437   bool DisableRedZone = MF.getFunction().hasFnAttribute(Attribute::NoRedZone);
438   bool CanUseRedZone = !MFI.hasVarSizedObjects() && // No dynamic alloca.
439                        !MFI.adjustsStack() &&       // No calls.
440                        !MustSaveLR(MF, LR) &&       // No need to save LR.
441                        !RegInfo->hasBasePointer(MF); // No special alignment.
442 
443   // Note: for PPC32 SVR4ABI (Non-DarwinABI), we can still generate stackless
444   // code if all local vars are reg-allocated.
445   bool FitsInRedZone = FrameSize <= Subtarget.getRedZoneSize();
446 
447   // Check whether we can skip adjusting the stack pointer (by using red zone)
448   if (!DisableRedZone && CanUseRedZone && FitsInRedZone) {
449     // No need for frame
450     if (UpdateMF)
451       MFI.setStackSize(0);
452     return 0;
453   }
454 
455   // Get the maximum call frame size of all the calls.
456   unsigned maxCallFrameSize = MFI.getMaxCallFrameSize();
457 
458   // Maximum call frame needs to be at least big enough for linkage area.
459   unsigned minCallFrameSize = getLinkageSize();
460   maxCallFrameSize = std::max(maxCallFrameSize, minCallFrameSize);
461 
462   // If we have dynamic alloca then maxCallFrameSize needs to be aligned so
463   // that allocations will be aligned.
464   if (MFI.hasVarSizedObjects())
465     maxCallFrameSize = (maxCallFrameSize + AlignMask) & ~AlignMask;
466 
467   // Update maximum call frame size.
468   if (UpdateMF)
469     MFI.setMaxCallFrameSize(maxCallFrameSize);
470 
471   // Include call frame size in total.
472   FrameSize += maxCallFrameSize;
473 
474   // Make sure the frame is aligned.
475   FrameSize = (FrameSize + AlignMask) & ~AlignMask;
476 
477   // Update frame info.
478   if (UpdateMF)
479     MFI.setStackSize(FrameSize);
480 
481   return FrameSize;
482 }
483 
484 // hasFP - Return true if the specified function actually has a dedicated frame
485 // pointer register.
486 bool PPCFrameLowering::hasFP(const MachineFunction &MF) const {
487   const MachineFrameInfo &MFI = MF.getFrameInfo();
488   // FIXME: This is pretty much broken by design: hasFP() might be called really
489   // early, before the stack layout was calculated and thus hasFP() might return
490   // true or false here depending on the time of call.
491   return (MFI.getStackSize()) && needsFP(MF);
492 }
493 
494 // needsFP - Return true if the specified function should have a dedicated frame
495 // pointer register.  This is true if the function has variable sized allocas or
496 // if frame pointer elimination is disabled.
497 bool PPCFrameLowering::needsFP(const MachineFunction &MF) const {
498   const MachineFrameInfo &MFI = MF.getFrameInfo();
499 
500   // Naked functions have no stack frame pushed, so we don't have a frame
501   // pointer.
502   if (MF.getFunction().hasFnAttribute(Attribute::Naked))
503     return false;
504 
505   return MF.getTarget().Options.DisableFramePointerElim(MF) ||
506     MFI.hasVarSizedObjects() || MFI.hasStackMap() || MFI.hasPatchPoint() ||
507     (MF.getTarget().Options.GuaranteedTailCallOpt &&
508      MF.getInfo<PPCFunctionInfo>()->hasFastCall());
509 }
510 
511 void PPCFrameLowering::replaceFPWithRealFP(MachineFunction &MF) const {
512   bool is31 = needsFP(MF);
513   unsigned FPReg  = is31 ? PPC::R31 : PPC::R1;
514   unsigned FP8Reg = is31 ? PPC::X31 : PPC::X1;
515 
516   const PPCRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
517   bool HasBP = RegInfo->hasBasePointer(MF);
518   unsigned BPReg  = HasBP ? (unsigned) RegInfo->getBaseRegister(MF) : FPReg;
519   unsigned BP8Reg = HasBP ? (unsigned) PPC::X30 : FP8Reg;
520 
521   for (MachineFunction::iterator BI = MF.begin(), BE = MF.end();
522        BI != BE; ++BI)
523     for (MachineBasicBlock::iterator MBBI = BI->end(); MBBI != BI->begin(); ) {
524       --MBBI;
525       for (unsigned I = 0, E = MBBI->getNumOperands(); I != E; ++I) {
526         MachineOperand &MO = MBBI->getOperand(I);
527         if (!MO.isReg())
528           continue;
529 
530         switch (MO.getReg()) {
531         case PPC::FP:
532           MO.setReg(FPReg);
533           break;
534         case PPC::FP8:
535           MO.setReg(FP8Reg);
536           break;
537         case PPC::BP:
538           MO.setReg(BPReg);
539           break;
540         case PPC::BP8:
541           MO.setReg(BP8Reg);
542           break;
543 
544         }
545       }
546     }
547 }
548 
549 /*  This function will do the following:
550     - If MBB is an entry or exit block, set SR1 and SR2 to R0 and R12
551       respectively (defaults recommended by the ABI) and return true
552     - If MBB is not an entry block, initialize the register scavenger and look
553       for available registers.
554     - If the defaults (R0/R12) are available, return true
555     - If TwoUniqueRegsRequired is set to true, it looks for two unique
556       registers. Otherwise, look for a single available register.
557       - If the required registers are found, set SR1 and SR2 and return true.
558       - If the required registers are not found, set SR2 or both SR1 and SR2 to
559         PPC::NoRegister and return false.
560 
561     Note that if both SR1 and SR2 are valid parameters and TwoUniqueRegsRequired
562     is not set, this function will attempt to find two different registers, but
563     still return true if only one register is available (and set SR1 == SR2).
564 */
565 bool
566 PPCFrameLowering::findScratchRegister(MachineBasicBlock *MBB,
567                                       bool UseAtEnd,
568                                       bool TwoUniqueRegsRequired,
569                                       unsigned *SR1,
570                                       unsigned *SR2) const {
571   RegScavenger RS;
572   unsigned R0 =  Subtarget.isPPC64() ? PPC::X0 : PPC::R0;
573   unsigned R12 = Subtarget.isPPC64() ? PPC::X12 : PPC::R12;
574 
575   // Set the defaults for the two scratch registers.
576   if (SR1)
577     *SR1 = R0;
578 
579   if (SR2) {
580     assert (SR1 && "Asking for the second scratch register but not the first?");
581     *SR2 = R12;
582   }
583 
584   // If MBB is an entry or exit block, use R0 and R12 as the scratch registers.
585   if ((UseAtEnd && MBB->isReturnBlock()) ||
586       (!UseAtEnd && (&MBB->getParent()->front() == MBB)))
587     return true;
588 
589   RS.enterBasicBlock(*MBB);
590 
591   if (UseAtEnd && !MBB->empty()) {
592     // The scratch register will be used at the end of the block, so must
593     // consider all registers used within the block
594 
595     MachineBasicBlock::iterator MBBI = MBB->getFirstTerminator();
596     // If no terminator, back iterator up to previous instruction.
597     if (MBBI == MBB->end())
598       MBBI = std::prev(MBBI);
599 
600     if (MBBI != MBB->begin())
601       RS.forward(MBBI);
602   }
603 
604   // If the two registers are available, we're all good.
605   // Note that we only return here if both R0 and R12 are available because
606   // although the function may not require two unique registers, it may benefit
607   // from having two so we should try to provide them.
608   if (!RS.isRegUsed(R0) && !RS.isRegUsed(R12))
609     return true;
610 
611   // Get the list of callee-saved registers for the target.
612   const PPCRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
613   const MCPhysReg *CSRegs = RegInfo->getCalleeSavedRegs(MBB->getParent());
614 
615   // Get all the available registers in the block.
616   BitVector BV = RS.getRegsAvailable(Subtarget.isPPC64() ? &PPC::G8RCRegClass :
617                                      &PPC::GPRCRegClass);
618 
619   // We shouldn't use callee-saved registers as scratch registers as they may be
620   // available when looking for a candidate block for shrink wrapping but not
621   // available when the actual prologue/epilogue is being emitted because they
622   // were added as live-in to the prologue block by PrologueEpilogueInserter.
623   for (int i = 0; CSRegs[i]; ++i)
624     BV.reset(CSRegs[i]);
625 
626   // Set the first scratch register to the first available one.
627   if (SR1) {
628     int FirstScratchReg = BV.find_first();
629     *SR1 = FirstScratchReg == -1 ? (unsigned)PPC::NoRegister : FirstScratchReg;
630   }
631 
632   // If there is another one available, set the second scratch register to that.
633   // Otherwise, set it to either PPC::NoRegister if this function requires two
634   // or to whatever SR1 is set to if this function doesn't require two.
635   if (SR2) {
636     int SecondScratchReg = BV.find_next(*SR1);
637     if (SecondScratchReg != -1)
638       *SR2 = SecondScratchReg;
639     else
640       *SR2 = TwoUniqueRegsRequired ? (unsigned)PPC::NoRegister : *SR1;
641   }
642 
643   // Now that we've done our best to provide both registers, double check
644   // whether we were unable to provide enough.
645   if (BV.count() < (TwoUniqueRegsRequired ? 2U : 1U))
646     return false;
647 
648   return true;
649 }
650 
651 // We need a scratch register for spilling LR and for spilling CR. By default,
652 // we use two scratch registers to hide latency. However, if only one scratch
653 // register is available, we can adjust for that by not overlapping the spill
654 // code. However, if we need to realign the stack (i.e. have a base pointer)
655 // and the stack frame is large, we need two scratch registers.
656 bool
657 PPCFrameLowering::twoUniqueScratchRegsRequired(MachineBasicBlock *MBB) const {
658   const PPCRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
659   MachineFunction &MF = *(MBB->getParent());
660   bool HasBP = RegInfo->hasBasePointer(MF);
661   unsigned FrameSize = determineFrameLayout(MF, false);
662   int NegFrameSize = -FrameSize;
663   bool IsLargeFrame = !isInt<16>(NegFrameSize);
664   MachineFrameInfo &MFI = MF.getFrameInfo();
665   unsigned MaxAlign = MFI.getMaxAlignment();
666   bool HasRedZone = Subtarget.isPPC64() || !Subtarget.isSVR4ABI();
667 
668   return (IsLargeFrame || !HasRedZone) && HasBP && MaxAlign > 1;
669 }
670 
671 bool PPCFrameLowering::canUseAsPrologue(const MachineBasicBlock &MBB) const {
672   MachineBasicBlock *TmpMBB = const_cast<MachineBasicBlock *>(&MBB);
673 
674   return findScratchRegister(TmpMBB, false,
675                              twoUniqueScratchRegsRequired(TmpMBB));
676 }
677 
678 bool PPCFrameLowering::canUseAsEpilogue(const MachineBasicBlock &MBB) const {
679   MachineBasicBlock *TmpMBB = const_cast<MachineBasicBlock *>(&MBB);
680 
681   return findScratchRegister(TmpMBB, true);
682 }
683 
684 void PPCFrameLowering::emitPrologue(MachineFunction &MF,
685                                     MachineBasicBlock &MBB) const {
686   MachineBasicBlock::iterator MBBI = MBB.begin();
687   MachineFrameInfo &MFI = MF.getFrameInfo();
688   const PPCInstrInfo &TII = *Subtarget.getInstrInfo();
689   const PPCRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
690 
691   MachineModuleInfo &MMI = MF.getMMI();
692   const MCRegisterInfo *MRI = MMI.getContext().getRegisterInfo();
693   DebugLoc dl;
694   bool needsCFI = MMI.hasDebugInfo() ||
695     MF.getFunction().needsUnwindTableEntry();
696 
697   // Get processor type.
698   bool isPPC64 = Subtarget.isPPC64();
699   // Get the ABI.
700   bool isSVR4ABI = Subtarget.isSVR4ABI();
701   bool isELFv2ABI = Subtarget.isELFv2ABI();
702   assert((Subtarget.isDarwinABI() || isSVR4ABI) &&
703          "Currently only Darwin and SVR4 ABIs are supported for PowerPC.");
704 
705   // Scan the prolog, looking for an UPDATE_VRSAVE instruction.  If we find it,
706   // process it.
707   if (!isSVR4ABI)
708     for (unsigned i = 0; MBBI != MBB.end(); ++i, ++MBBI) {
709       if (MBBI->getOpcode() == PPC::UPDATE_VRSAVE) {
710         HandleVRSaveUpdate(*MBBI, TII);
711         break;
712       }
713     }
714 
715   // Move MBBI back to the beginning of the prologue block.
716   MBBI = MBB.begin();
717 
718   // Work out frame sizes.
719   unsigned FrameSize = determineFrameLayout(MF);
720   int NegFrameSize = -FrameSize;
721   if (!isInt<32>(NegFrameSize))
722     llvm_unreachable("Unhandled stack size!");
723 
724   if (MFI.isFrameAddressTaken())
725     replaceFPWithRealFP(MF);
726 
727   // Check if the link register (LR) must be saved.
728   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
729   bool MustSaveLR = FI->mustSaveLR();
730   const SmallVectorImpl<unsigned> &MustSaveCRs = FI->getMustSaveCRs();
731   bool MustSaveCR = !MustSaveCRs.empty();
732   // Do we have a frame pointer and/or base pointer for this function?
733   bool HasFP = hasFP(MF);
734   bool HasBP = RegInfo->hasBasePointer(MF);
735   bool HasRedZone = isPPC64 || !isSVR4ABI;
736 
737   unsigned SPReg       = isPPC64 ? PPC::X1  : PPC::R1;
738   unsigned BPReg       = RegInfo->getBaseRegister(MF);
739   unsigned FPReg       = isPPC64 ? PPC::X31 : PPC::R31;
740   unsigned LRReg       = isPPC64 ? PPC::LR8 : PPC::LR;
741   unsigned ScratchReg  = 0;
742   unsigned TempReg     = isPPC64 ? PPC::X12 : PPC::R12; // another scratch reg
743   //  ...(R12/X12 is volatile in both Darwin & SVR4, & can't be a function arg.)
744   const MCInstrDesc& MFLRInst = TII.get(isPPC64 ? PPC::MFLR8
745                                                 : PPC::MFLR );
746   const MCInstrDesc& StoreInst = TII.get(isPPC64 ? PPC::STD
747                                                  : PPC::STW );
748   const MCInstrDesc& StoreUpdtInst = TII.get(isPPC64 ? PPC::STDU
749                                                      : PPC::STWU );
750   const MCInstrDesc& StoreUpdtIdxInst = TII.get(isPPC64 ? PPC::STDUX
751                                                         : PPC::STWUX);
752   const MCInstrDesc& LoadImmShiftedInst = TII.get(isPPC64 ? PPC::LIS8
753                                                           : PPC::LIS );
754   const MCInstrDesc& OrImmInst = TII.get(isPPC64 ? PPC::ORI8
755                                                  : PPC::ORI );
756   const MCInstrDesc& OrInst = TII.get(isPPC64 ? PPC::OR8
757                                               : PPC::OR );
758   const MCInstrDesc& SubtractCarryingInst = TII.get(isPPC64 ? PPC::SUBFC8
759                                                             : PPC::SUBFC);
760   const MCInstrDesc& SubtractImmCarryingInst = TII.get(isPPC64 ? PPC::SUBFIC8
761                                                                : PPC::SUBFIC);
762 
763   // Regarding this assert: Even though LR is saved in the caller's frame (i.e.,
764   // LROffset is positive), that slot is callee-owned. Because PPC32 SVR4 has no
765   // Red Zone, an asynchronous event (a form of "callee") could claim a frame &
766   // overwrite it, so PPC32 SVR4 must claim at least a minimal frame to save LR.
767   assert((isPPC64 || !isSVR4ABI || !(!FrameSize && (MustSaveLR || HasFP))) &&
768          "FrameSize must be >0 to save/restore the FP or LR for 32-bit SVR4.");
769 
770   // Using the same bool variable as below to suppress compiler warnings.
771   bool SingleScratchReg =
772     findScratchRegister(&MBB, false, twoUniqueScratchRegsRequired(&MBB),
773                         &ScratchReg, &TempReg);
774   assert(SingleScratchReg &&
775          "Required number of registers not available in this block");
776 
777   SingleScratchReg = ScratchReg == TempReg;
778 
779   int LROffset = getReturnSaveOffset();
780 
781   int FPOffset = 0;
782   if (HasFP) {
783     if (isSVR4ABI) {
784       MachineFrameInfo &MFI = MF.getFrameInfo();
785       int FPIndex = FI->getFramePointerSaveIndex();
786       assert(FPIndex && "No Frame Pointer Save Slot!");
787       FPOffset = MFI.getObjectOffset(FPIndex);
788     } else {
789       FPOffset = getFramePointerSaveOffset();
790     }
791   }
792 
793   int BPOffset = 0;
794   if (HasBP) {
795     if (isSVR4ABI) {
796       MachineFrameInfo &MFI = MF.getFrameInfo();
797       int BPIndex = FI->getBasePointerSaveIndex();
798       assert(BPIndex && "No Base Pointer Save Slot!");
799       BPOffset = MFI.getObjectOffset(BPIndex);
800     } else {
801       BPOffset = getBasePointerSaveOffset();
802     }
803   }
804 
805   int PBPOffset = 0;
806   if (FI->usesPICBase()) {
807     MachineFrameInfo &MFI = MF.getFrameInfo();
808     int PBPIndex = FI->getPICBasePointerSaveIndex();
809     assert(PBPIndex && "No PIC Base Pointer Save Slot!");
810     PBPOffset = MFI.getObjectOffset(PBPIndex);
811   }
812 
813   // Get stack alignments.
814   unsigned MaxAlign = MFI.getMaxAlignment();
815   if (HasBP && MaxAlign > 1)
816     assert(isPowerOf2_32(MaxAlign) && isInt<16>(MaxAlign) &&
817            "Invalid alignment!");
818 
819   // Frames of 32KB & larger require special handling because they cannot be
820   // indexed into with a simple STDU/STWU/STD/STW immediate offset operand.
821   bool isLargeFrame = !isInt<16>(NegFrameSize);
822 
823   assert((isPPC64 || !MustSaveCR) &&
824          "Prologue CR saving supported only in 64-bit mode");
825 
826   // If we need to spill the CR and the LR but we don't have two separate
827   // registers available, we must spill them one at a time
828   if (MustSaveCR && SingleScratchReg && MustSaveLR) {
829     // In the ELFv2 ABI, we are not required to save all CR fields.
830     // If only one or two CR fields are clobbered, it is more efficient to use
831     // mfocrf to selectively save just those fields, because mfocrf has short
832     // latency compares to mfcr.
833     unsigned MfcrOpcode = PPC::MFCR8;
834     unsigned CrState = RegState::ImplicitKill;
835     if (isELFv2ABI && MustSaveCRs.size() == 1) {
836       MfcrOpcode = PPC::MFOCRF8;
837       CrState = RegState::Kill;
838     }
839     MachineInstrBuilder MIB =
840       BuildMI(MBB, MBBI, dl, TII.get(MfcrOpcode), TempReg);
841     for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i)
842       MIB.addReg(MustSaveCRs[i], CrState);
843     BuildMI(MBB, MBBI, dl, TII.get(PPC::STW8))
844       .addReg(TempReg, getKillRegState(true))
845       .addImm(8)
846       .addReg(SPReg);
847   }
848 
849   if (MustSaveLR)
850     BuildMI(MBB, MBBI, dl, MFLRInst, ScratchReg);
851 
852   if (MustSaveCR &&
853       !(SingleScratchReg && MustSaveLR)) { // will only occur for PPC64
854     // In the ELFv2 ABI, we are not required to save all CR fields.
855     // If only one or two CR fields are clobbered, it is more efficient to use
856     // mfocrf to selectively save just those fields, because mfocrf has short
857     // latency compares to mfcr.
858     unsigned MfcrOpcode = PPC::MFCR8;
859     unsigned CrState = RegState::ImplicitKill;
860     if (isELFv2ABI && MustSaveCRs.size() == 1) {
861       MfcrOpcode = PPC::MFOCRF8;
862       CrState = RegState::Kill;
863     }
864     MachineInstrBuilder MIB =
865       BuildMI(MBB, MBBI, dl, TII.get(MfcrOpcode), TempReg);
866     for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i)
867       MIB.addReg(MustSaveCRs[i], CrState);
868   }
869 
870   if (HasRedZone) {
871     if (HasFP)
872       BuildMI(MBB, MBBI, dl, StoreInst)
873         .addReg(FPReg)
874         .addImm(FPOffset)
875         .addReg(SPReg);
876     if (FI->usesPICBase())
877       BuildMI(MBB, MBBI, dl, StoreInst)
878         .addReg(PPC::R30)
879         .addImm(PBPOffset)
880         .addReg(SPReg);
881     if (HasBP)
882       BuildMI(MBB, MBBI, dl, StoreInst)
883         .addReg(BPReg)
884         .addImm(BPOffset)
885         .addReg(SPReg);
886   }
887 
888   if (MustSaveLR)
889     BuildMI(MBB, MBBI, dl, StoreInst)
890       .addReg(ScratchReg, getKillRegState(true))
891       .addImm(LROffset)
892       .addReg(SPReg);
893 
894   if (MustSaveCR &&
895       !(SingleScratchReg && MustSaveLR)) { // will only occur for PPC64
896     assert(HasRedZone && "A red zone is always available on PPC64");
897     BuildMI(MBB, MBBI, dl, TII.get(PPC::STW8))
898       .addReg(TempReg, getKillRegState(true))
899       .addImm(8)
900       .addReg(SPReg);
901   }
902 
903   // Skip the rest if this is a leaf function & all spills fit in the Red Zone.
904   if (!FrameSize)
905     return;
906 
907   // Adjust stack pointer: r1 += NegFrameSize.
908   // If there is a preferred stack alignment, align R1 now
909 
910   if (HasBP && HasRedZone) {
911     // Save a copy of r1 as the base pointer.
912     BuildMI(MBB, MBBI, dl, OrInst, BPReg)
913       .addReg(SPReg)
914       .addReg(SPReg);
915   }
916 
917   // Have we generated a STUX instruction to claim stack frame? If so,
918   // the negated frame size will be placed in ScratchReg.
919   bool HasSTUX = false;
920 
921   // This condition must be kept in sync with canUseAsPrologue.
922   if (HasBP && MaxAlign > 1) {
923     if (isPPC64)
924       BuildMI(MBB, MBBI, dl, TII.get(PPC::RLDICL), ScratchReg)
925         .addReg(SPReg)
926         .addImm(0)
927         .addImm(64 - Log2_32(MaxAlign));
928     else // PPC32...
929       BuildMI(MBB, MBBI, dl, TII.get(PPC::RLWINM), ScratchReg)
930         .addReg(SPReg)
931         .addImm(0)
932         .addImm(32 - Log2_32(MaxAlign))
933         .addImm(31);
934     if (!isLargeFrame) {
935       BuildMI(MBB, MBBI, dl, SubtractImmCarryingInst, ScratchReg)
936         .addReg(ScratchReg, RegState::Kill)
937         .addImm(NegFrameSize);
938     } else {
939       assert(!SingleScratchReg && "Only a single scratch reg available");
940       BuildMI(MBB, MBBI, dl, LoadImmShiftedInst, TempReg)
941         .addImm(NegFrameSize >> 16);
942       BuildMI(MBB, MBBI, dl, OrImmInst, TempReg)
943         .addReg(TempReg, RegState::Kill)
944         .addImm(NegFrameSize & 0xFFFF);
945       BuildMI(MBB, MBBI, dl, SubtractCarryingInst, ScratchReg)
946         .addReg(ScratchReg, RegState::Kill)
947         .addReg(TempReg, RegState::Kill);
948     }
949 
950     BuildMI(MBB, MBBI, dl, StoreUpdtIdxInst, SPReg)
951       .addReg(SPReg, RegState::Kill)
952       .addReg(SPReg)
953       .addReg(ScratchReg);
954     HasSTUX = true;
955 
956   } else if (!isLargeFrame) {
957     BuildMI(MBB, MBBI, dl, StoreUpdtInst, SPReg)
958       .addReg(SPReg)
959       .addImm(NegFrameSize)
960       .addReg(SPReg);
961 
962   } else {
963     BuildMI(MBB, MBBI, dl, LoadImmShiftedInst, ScratchReg)
964       .addImm(NegFrameSize >> 16);
965     BuildMI(MBB, MBBI, dl, OrImmInst, ScratchReg)
966       .addReg(ScratchReg, RegState::Kill)
967       .addImm(NegFrameSize & 0xFFFF);
968     BuildMI(MBB, MBBI, dl, StoreUpdtIdxInst, SPReg)
969       .addReg(SPReg, RegState::Kill)
970       .addReg(SPReg)
971       .addReg(ScratchReg);
972     HasSTUX = true;
973   }
974 
975   if (!HasRedZone) {
976     assert(!isPPC64 && "A red zone is always available on PPC64");
977     if (HasSTUX) {
978       // The negated frame size is in ScratchReg, and the SPReg has been
979       // decremented by the frame size: SPReg = old SPReg + ScratchReg.
980       // Since FPOffset, PBPOffset, etc. are relative to the beginning of
981       // the stack frame (i.e. the old SP), ideally, we would put the old
982       // SP into a register and use it as the base for the stores. The
983       // problem is that the only available register may be ScratchReg,
984       // which could be R0, and R0 cannot be used as a base address.
985 
986       // First, set ScratchReg to the old SP. This may need to be modified
987       // later.
988       BuildMI(MBB, MBBI, dl, TII.get(PPC::SUBF), ScratchReg)
989         .addReg(ScratchReg, RegState::Kill)
990         .addReg(SPReg);
991 
992       if (ScratchReg == PPC::R0) {
993         // R0 cannot be used as a base register, but it can be used as an
994         // index in a store-indexed.
995         int LastOffset = 0;
996         if (HasFP)  {
997           // R0 += (FPOffset-LastOffset).
998           // Need addic, since addi treats R0 as 0.
999           BuildMI(MBB, MBBI, dl, TII.get(PPC::ADDIC), ScratchReg)
1000             .addReg(ScratchReg)
1001             .addImm(FPOffset-LastOffset);
1002           LastOffset = FPOffset;
1003           // Store FP into *R0.
1004           BuildMI(MBB, MBBI, dl, TII.get(PPC::STWX))
1005             .addReg(FPReg, RegState::Kill)  // Save FP.
1006             .addReg(PPC::ZERO)
1007             .addReg(ScratchReg);  // This will be the index (R0 is ok here).
1008         }
1009         if (FI->usesPICBase()) {
1010           // R0 += (PBPOffset-LastOffset).
1011           BuildMI(MBB, MBBI, dl, TII.get(PPC::ADDIC), ScratchReg)
1012             .addReg(ScratchReg)
1013             .addImm(PBPOffset-LastOffset);
1014           LastOffset = PBPOffset;
1015           BuildMI(MBB, MBBI, dl, TII.get(PPC::STWX))
1016             .addReg(PPC::R30, RegState::Kill)  // Save PIC base pointer.
1017             .addReg(PPC::ZERO)
1018             .addReg(ScratchReg);  // This will be the index (R0 is ok here).
1019         }
1020         if (HasBP) {
1021           // R0 += (BPOffset-LastOffset).
1022           BuildMI(MBB, MBBI, dl, TII.get(PPC::ADDIC), ScratchReg)
1023             .addReg(ScratchReg)
1024             .addImm(BPOffset-LastOffset);
1025           LastOffset = BPOffset;
1026           BuildMI(MBB, MBBI, dl, TII.get(PPC::STWX))
1027             .addReg(BPReg, RegState::Kill)  // Save BP.
1028             .addReg(PPC::ZERO)
1029             .addReg(ScratchReg);  // This will be the index (R0 is ok here).
1030           // BP = R0-LastOffset
1031           BuildMI(MBB, MBBI, dl, TII.get(PPC::ADDIC), BPReg)
1032             .addReg(ScratchReg, RegState::Kill)
1033             .addImm(-LastOffset);
1034         }
1035       } else {
1036         // ScratchReg is not R0, so use it as the base register. It is
1037         // already set to the old SP, so we can use the offsets directly.
1038 
1039         // Now that the stack frame has been allocated, save all the necessary
1040         // registers using ScratchReg as the base address.
1041         if (HasFP)
1042           BuildMI(MBB, MBBI, dl, StoreInst)
1043             .addReg(FPReg)
1044             .addImm(FPOffset)
1045             .addReg(ScratchReg);
1046         if (FI->usesPICBase())
1047           BuildMI(MBB, MBBI, dl, StoreInst)
1048             .addReg(PPC::R30)
1049             .addImm(PBPOffset)
1050             .addReg(ScratchReg);
1051         if (HasBP) {
1052           BuildMI(MBB, MBBI, dl, StoreInst)
1053             .addReg(BPReg)
1054             .addImm(BPOffset)
1055             .addReg(ScratchReg);
1056           BuildMI(MBB, MBBI, dl, OrInst, BPReg)
1057             .addReg(ScratchReg, RegState::Kill)
1058             .addReg(ScratchReg);
1059         }
1060       }
1061     } else {
1062       // The frame size is a known 16-bit constant (fitting in the immediate
1063       // field of STWU). To be here we have to be compiling for PPC32.
1064       // Since the SPReg has been decreased by FrameSize, add it back to each
1065       // offset.
1066       if (HasFP)
1067         BuildMI(MBB, MBBI, dl, StoreInst)
1068           .addReg(FPReg)
1069           .addImm(FrameSize + FPOffset)
1070           .addReg(SPReg);
1071       if (FI->usesPICBase())
1072         BuildMI(MBB, MBBI, dl, StoreInst)
1073           .addReg(PPC::R30)
1074           .addImm(FrameSize + PBPOffset)
1075           .addReg(SPReg);
1076       if (HasBP) {
1077         BuildMI(MBB, MBBI, dl, StoreInst)
1078           .addReg(BPReg)
1079           .addImm(FrameSize + BPOffset)
1080           .addReg(SPReg);
1081         BuildMI(MBB, MBBI, dl, TII.get(PPC::ADDI), BPReg)
1082           .addReg(SPReg)
1083           .addImm(FrameSize);
1084       }
1085     }
1086   }
1087 
1088   // Add Call Frame Information for the instructions we generated above.
1089   if (needsCFI) {
1090     unsigned CFIIndex;
1091 
1092     if (HasBP) {
1093       // Define CFA in terms of BP. Do this in preference to using FP/SP,
1094       // because if the stack needed aligning then CFA won't be at a fixed
1095       // offset from FP/SP.
1096       unsigned Reg = MRI->getDwarfRegNum(BPReg, true);
1097       CFIIndex = MF.addFrameInst(
1098           MCCFIInstruction::createDefCfaRegister(nullptr, Reg));
1099     } else {
1100       // Adjust the definition of CFA to account for the change in SP.
1101       assert(NegFrameSize);
1102       CFIIndex = MF.addFrameInst(
1103           MCCFIInstruction::createDefCfaOffset(nullptr, NegFrameSize));
1104     }
1105     BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1106         .addCFIIndex(CFIIndex);
1107 
1108     if (HasFP) {
1109       // Describe where FP was saved, at a fixed offset from CFA.
1110       unsigned Reg = MRI->getDwarfRegNum(FPReg, true);
1111       CFIIndex = MF.addFrameInst(
1112           MCCFIInstruction::createOffset(nullptr, Reg, FPOffset));
1113       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1114           .addCFIIndex(CFIIndex);
1115     }
1116 
1117     if (FI->usesPICBase()) {
1118       // Describe where FP was saved, at a fixed offset from CFA.
1119       unsigned Reg = MRI->getDwarfRegNum(PPC::R30, true);
1120       CFIIndex = MF.addFrameInst(
1121           MCCFIInstruction::createOffset(nullptr, Reg, PBPOffset));
1122       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1123           .addCFIIndex(CFIIndex);
1124     }
1125 
1126     if (HasBP) {
1127       // Describe where BP was saved, at a fixed offset from CFA.
1128       unsigned Reg = MRI->getDwarfRegNum(BPReg, true);
1129       CFIIndex = MF.addFrameInst(
1130           MCCFIInstruction::createOffset(nullptr, Reg, BPOffset));
1131       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1132           .addCFIIndex(CFIIndex);
1133     }
1134 
1135     if (MustSaveLR) {
1136       // Describe where LR was saved, at a fixed offset from CFA.
1137       unsigned Reg = MRI->getDwarfRegNum(LRReg, true);
1138       CFIIndex = MF.addFrameInst(
1139           MCCFIInstruction::createOffset(nullptr, Reg, LROffset));
1140       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1141           .addCFIIndex(CFIIndex);
1142     }
1143   }
1144 
1145   // If there is a frame pointer, copy R1 into R31
1146   if (HasFP) {
1147     BuildMI(MBB, MBBI, dl, OrInst, FPReg)
1148       .addReg(SPReg)
1149       .addReg(SPReg);
1150 
1151     if (!HasBP && needsCFI) {
1152       // Change the definition of CFA from SP+offset to FP+offset, because SP
1153       // will change at every alloca.
1154       unsigned Reg = MRI->getDwarfRegNum(FPReg, true);
1155       unsigned CFIIndex = MF.addFrameInst(
1156           MCCFIInstruction::createDefCfaRegister(nullptr, Reg));
1157 
1158       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1159           .addCFIIndex(CFIIndex);
1160     }
1161   }
1162 
1163   if (needsCFI) {
1164     // Describe where callee saved registers were saved, at fixed offsets from
1165     // CFA.
1166     const std::vector<CalleeSavedInfo> &CSI = MFI.getCalleeSavedInfo();
1167     for (unsigned I = 0, E = CSI.size(); I != E; ++I) {
1168       unsigned Reg = CSI[I].getReg();
1169       if (Reg == PPC::LR || Reg == PPC::LR8 || Reg == PPC::RM) continue;
1170 
1171       // This is a bit of a hack: CR2LT, CR2GT, CR2EQ and CR2UN are just
1172       // subregisters of CR2. We just need to emit a move of CR2.
1173       if (PPC::CRBITRCRegClass.contains(Reg))
1174         continue;
1175 
1176       // For SVR4, don't emit a move for the CR spill slot if we haven't
1177       // spilled CRs.
1178       if (isSVR4ABI && (PPC::CR2 <= Reg && Reg <= PPC::CR4)
1179           && !MustSaveCR)
1180         continue;
1181 
1182       // For 64-bit SVR4 when we have spilled CRs, the spill location
1183       // is SP+8, not a frame-relative slot.
1184       if (isSVR4ABI && isPPC64 && (PPC::CR2 <= Reg && Reg <= PPC::CR4)) {
1185         // In the ELFv1 ABI, only CR2 is noted in CFI and stands in for
1186         // the whole CR word.  In the ELFv2 ABI, every CR that was
1187         // actually saved gets its own CFI record.
1188         unsigned CRReg = isELFv2ABI? Reg : (unsigned) PPC::CR2;
1189         unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset(
1190             nullptr, MRI->getDwarfRegNum(CRReg, true), 8));
1191         BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1192             .addCFIIndex(CFIIndex);
1193         continue;
1194       }
1195 
1196       int Offset = MFI.getObjectOffset(CSI[I].getFrameIdx());
1197       unsigned CFIIndex = MF.addFrameInst(MCCFIInstruction::createOffset(
1198           nullptr, MRI->getDwarfRegNum(Reg, true), Offset));
1199       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1200           .addCFIIndex(CFIIndex);
1201     }
1202   }
1203 }
1204 
1205 void PPCFrameLowering::emitEpilogue(MachineFunction &MF,
1206                                     MachineBasicBlock &MBB) const {
1207   MachineBasicBlock::iterator MBBI = MBB.getFirstTerminator();
1208   DebugLoc dl;
1209 
1210   if (MBBI != MBB.end())
1211     dl = MBBI->getDebugLoc();
1212 
1213   const PPCInstrInfo &TII = *Subtarget.getInstrInfo();
1214   const PPCRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
1215 
1216   // Get alignment info so we know how to restore the SP.
1217   const MachineFrameInfo &MFI = MF.getFrameInfo();
1218 
1219   // Get the number of bytes allocated from the FrameInfo.
1220   int FrameSize = MFI.getStackSize();
1221 
1222   // Get processor type.
1223   bool isPPC64 = Subtarget.isPPC64();
1224   // Get the ABI.
1225   bool isSVR4ABI = Subtarget.isSVR4ABI();
1226 
1227   // Check if the link register (LR) has been saved.
1228   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
1229   bool MustSaveLR = FI->mustSaveLR();
1230   const SmallVectorImpl<unsigned> &MustSaveCRs = FI->getMustSaveCRs();
1231   bool MustSaveCR = !MustSaveCRs.empty();
1232   // Do we have a frame pointer and/or base pointer for this function?
1233   bool HasFP = hasFP(MF);
1234   bool HasBP = RegInfo->hasBasePointer(MF);
1235   bool HasRedZone = Subtarget.isPPC64() || !Subtarget.isSVR4ABI();
1236 
1237   unsigned SPReg      = isPPC64 ? PPC::X1  : PPC::R1;
1238   unsigned BPReg      = RegInfo->getBaseRegister(MF);
1239   unsigned FPReg      = isPPC64 ? PPC::X31 : PPC::R31;
1240   unsigned ScratchReg = 0;
1241   unsigned TempReg     = isPPC64 ? PPC::X12 : PPC::R12; // another scratch reg
1242   const MCInstrDesc& MTLRInst = TII.get( isPPC64 ? PPC::MTLR8
1243                                                  : PPC::MTLR );
1244   const MCInstrDesc& LoadInst = TII.get( isPPC64 ? PPC::LD
1245                                                  : PPC::LWZ );
1246   const MCInstrDesc& LoadImmShiftedInst = TII.get( isPPC64 ? PPC::LIS8
1247                                                            : PPC::LIS );
1248   const MCInstrDesc& OrInst = TII.get(isPPC64 ? PPC::OR8
1249                                               : PPC::OR );
1250   const MCInstrDesc& OrImmInst = TII.get( isPPC64 ? PPC::ORI8
1251                                                   : PPC::ORI );
1252   const MCInstrDesc& AddImmInst = TII.get( isPPC64 ? PPC::ADDI8
1253                                                    : PPC::ADDI );
1254   const MCInstrDesc& AddInst = TII.get( isPPC64 ? PPC::ADD8
1255                                                 : PPC::ADD4 );
1256 
1257   int LROffset = getReturnSaveOffset();
1258 
1259   int FPOffset = 0;
1260 
1261   // Using the same bool variable as below to suppress compiler warnings.
1262   bool SingleScratchReg = findScratchRegister(&MBB, true, false, &ScratchReg,
1263                                               &TempReg);
1264   assert(SingleScratchReg &&
1265          "Could not find an available scratch register");
1266 
1267   SingleScratchReg = ScratchReg == TempReg;
1268 
1269   if (HasFP) {
1270     if (isSVR4ABI) {
1271       int FPIndex = FI->getFramePointerSaveIndex();
1272       assert(FPIndex && "No Frame Pointer Save Slot!");
1273       FPOffset = MFI.getObjectOffset(FPIndex);
1274     } else {
1275       FPOffset = getFramePointerSaveOffset();
1276     }
1277   }
1278 
1279   int BPOffset = 0;
1280   if (HasBP) {
1281     if (isSVR4ABI) {
1282       int BPIndex = FI->getBasePointerSaveIndex();
1283       assert(BPIndex && "No Base Pointer Save Slot!");
1284       BPOffset = MFI.getObjectOffset(BPIndex);
1285     } else {
1286       BPOffset = getBasePointerSaveOffset();
1287     }
1288   }
1289 
1290   int PBPOffset = 0;
1291   if (FI->usesPICBase()) {
1292     int PBPIndex = FI->getPICBasePointerSaveIndex();
1293     assert(PBPIndex && "No PIC Base Pointer Save Slot!");
1294     PBPOffset = MFI.getObjectOffset(PBPIndex);
1295   }
1296 
1297   bool IsReturnBlock = (MBBI != MBB.end() && MBBI->isReturn());
1298 
1299   if (IsReturnBlock) {
1300     unsigned RetOpcode = MBBI->getOpcode();
1301     bool UsesTCRet =  RetOpcode == PPC::TCRETURNri ||
1302                       RetOpcode == PPC::TCRETURNdi ||
1303                       RetOpcode == PPC::TCRETURNai ||
1304                       RetOpcode == PPC::TCRETURNri8 ||
1305                       RetOpcode == PPC::TCRETURNdi8 ||
1306                       RetOpcode == PPC::TCRETURNai8;
1307 
1308     if (UsesTCRet) {
1309       int MaxTCRetDelta = FI->getTailCallSPDelta();
1310       MachineOperand &StackAdjust = MBBI->getOperand(1);
1311       assert(StackAdjust.isImm() && "Expecting immediate value.");
1312       // Adjust stack pointer.
1313       int StackAdj = StackAdjust.getImm();
1314       int Delta = StackAdj - MaxTCRetDelta;
1315       assert((Delta >= 0) && "Delta must be positive");
1316       if (MaxTCRetDelta>0)
1317         FrameSize += (StackAdj +Delta);
1318       else
1319         FrameSize += StackAdj;
1320     }
1321   }
1322 
1323   // Frames of 32KB & larger require special handling because they cannot be
1324   // indexed into with a simple LD/LWZ immediate offset operand.
1325   bool isLargeFrame = !isInt<16>(FrameSize);
1326 
1327   // On targets without red zone, the SP needs to be restored last, so that
1328   // all live contents of the stack frame are upwards of the SP. This means
1329   // that we cannot restore SP just now, since there may be more registers
1330   // to restore from the stack frame (e.g. R31). If the frame size is not
1331   // a simple immediate value, we will need a spare register to hold the
1332   // restored SP. If the frame size is known and small, we can simply adjust
1333   // the offsets of the registers to be restored, and still use SP to restore
1334   // them. In such case, the final update of SP will be to add the frame
1335   // size to it.
1336   // To simplify the code, set RBReg to the base register used to restore
1337   // values from the stack, and set SPAdd to the value that needs to be added
1338   // to the SP at the end. The default values are as if red zone was present.
1339   unsigned RBReg = SPReg;
1340   unsigned SPAdd = 0;
1341 
1342   if (FrameSize) {
1343     // In the prologue, the loaded (or persistent) stack pointer value is
1344     // offset by the STDU/STDUX/STWU/STWUX instruction. For targets with red
1345     // zone add this offset back now.
1346 
1347     // If this function contained a fastcc call and GuaranteedTailCallOpt is
1348     // enabled (=> hasFastCall()==true) the fastcc call might contain a tail
1349     // call which invalidates the stack pointer value in SP(0). So we use the
1350     // value of R31 in this case.
1351     if (FI->hasFastCall()) {
1352       assert(HasFP && "Expecting a valid frame pointer.");
1353       if (!HasRedZone)
1354         RBReg = FPReg;
1355       if (!isLargeFrame) {
1356         BuildMI(MBB, MBBI, dl, AddImmInst, RBReg)
1357           .addReg(FPReg).addImm(FrameSize);
1358       } else {
1359         BuildMI(MBB, MBBI, dl, LoadImmShiftedInst, ScratchReg)
1360           .addImm(FrameSize >> 16);
1361         BuildMI(MBB, MBBI, dl, OrImmInst, ScratchReg)
1362           .addReg(ScratchReg, RegState::Kill)
1363           .addImm(FrameSize & 0xFFFF);
1364         BuildMI(MBB, MBBI, dl, AddInst)
1365           .addReg(RBReg)
1366           .addReg(FPReg)
1367           .addReg(ScratchReg);
1368       }
1369     } else if (!isLargeFrame && !HasBP && !MFI.hasVarSizedObjects()) {
1370       if (HasRedZone) {
1371         BuildMI(MBB, MBBI, dl, AddImmInst, SPReg)
1372           .addReg(SPReg)
1373           .addImm(FrameSize);
1374       } else {
1375         // Make sure that adding FrameSize will not overflow the max offset
1376         // size.
1377         assert(FPOffset <= 0 && BPOffset <= 0 && PBPOffset <= 0 &&
1378                "Local offsets should be negative");
1379         SPAdd = FrameSize;
1380         FPOffset += FrameSize;
1381         BPOffset += FrameSize;
1382         PBPOffset += FrameSize;
1383       }
1384     } else {
1385       // We don't want to use ScratchReg as a base register, because it
1386       // could happen to be R0. Use FP instead, but make sure to preserve it.
1387       if (!HasRedZone) {
1388         // If FP is not saved, copy it to ScratchReg.
1389         if (!HasFP)
1390           BuildMI(MBB, MBBI, dl, OrInst, ScratchReg)
1391             .addReg(FPReg)
1392             .addReg(FPReg);
1393         RBReg = FPReg;
1394       }
1395       BuildMI(MBB, MBBI, dl, LoadInst, RBReg)
1396         .addImm(0)
1397         .addReg(SPReg);
1398     }
1399   }
1400   assert(RBReg != ScratchReg && "Should have avoided ScratchReg");
1401   // If there is no red zone, ScratchReg may be needed for holding a useful
1402   // value (although not the base register). Make sure it is not overwritten
1403   // too early.
1404 
1405   assert((isPPC64 || !MustSaveCR) &&
1406          "Epilogue CR restoring supported only in 64-bit mode");
1407 
1408   // If we need to restore both the LR and the CR and we only have one
1409   // available scratch register, we must do them one at a time.
1410   if (MustSaveCR && SingleScratchReg && MustSaveLR) {
1411     // Here TempReg == ScratchReg, and in the absence of red zone ScratchReg
1412     // is live here.
1413     assert(HasRedZone && "Expecting red zone");
1414     BuildMI(MBB, MBBI, dl, TII.get(PPC::LWZ8), TempReg)
1415       .addImm(8)
1416       .addReg(SPReg);
1417     for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i)
1418       BuildMI(MBB, MBBI, dl, TII.get(PPC::MTOCRF8), MustSaveCRs[i])
1419         .addReg(TempReg, getKillRegState(i == e-1));
1420   }
1421 
1422   // Delay restoring of the LR if ScratchReg is needed. This is ok, since
1423   // LR is stored in the caller's stack frame. ScratchReg will be needed
1424   // if RBReg is anything other than SP. We shouldn't use ScratchReg as
1425   // a base register anyway, because it may happen to be R0.
1426   bool LoadedLR = false;
1427   if (MustSaveLR && RBReg == SPReg && isInt<16>(LROffset+SPAdd)) {
1428     BuildMI(MBB, MBBI, dl, LoadInst, ScratchReg)
1429       .addImm(LROffset+SPAdd)
1430       .addReg(RBReg);
1431     LoadedLR = true;
1432   }
1433 
1434   if (MustSaveCR && !(SingleScratchReg && MustSaveLR)) {
1435     // This will only occur for PPC64.
1436     assert(isPPC64 && "Expecting 64-bit mode");
1437     assert(RBReg == SPReg && "Should be using SP as a base register");
1438     BuildMI(MBB, MBBI, dl, TII.get(PPC::LWZ8), TempReg)
1439       .addImm(8)
1440       .addReg(RBReg);
1441   }
1442 
1443   if (HasFP) {
1444     // If there is red zone, restore FP directly, since SP has already been
1445     // restored. Otherwise, restore the value of FP into ScratchReg.
1446     if (HasRedZone || RBReg == SPReg)
1447       BuildMI(MBB, MBBI, dl, LoadInst, FPReg)
1448         .addImm(FPOffset)
1449         .addReg(SPReg);
1450     else
1451       BuildMI(MBB, MBBI, dl, LoadInst, ScratchReg)
1452         .addImm(FPOffset)
1453         .addReg(RBReg);
1454   }
1455 
1456   if (FI->usesPICBase())
1457     BuildMI(MBB, MBBI, dl, LoadInst, PPC::R30)
1458       .addImm(PBPOffset)
1459       .addReg(RBReg);
1460 
1461   if (HasBP)
1462     BuildMI(MBB, MBBI, dl, LoadInst, BPReg)
1463       .addImm(BPOffset)
1464       .addReg(RBReg);
1465 
1466   // There is nothing more to be loaded from the stack, so now we can
1467   // restore SP: SP = RBReg + SPAdd.
1468   if (RBReg != SPReg || SPAdd != 0) {
1469     assert(!HasRedZone && "This should not happen with red zone");
1470     // If SPAdd is 0, generate a copy.
1471     if (SPAdd == 0)
1472       BuildMI(MBB, MBBI, dl, OrInst, SPReg)
1473         .addReg(RBReg)
1474         .addReg(RBReg);
1475     else
1476       BuildMI(MBB, MBBI, dl, AddImmInst, SPReg)
1477         .addReg(RBReg)
1478         .addImm(SPAdd);
1479 
1480     assert(RBReg != ScratchReg && "Should be using FP or SP as base register");
1481     if (RBReg == FPReg)
1482       BuildMI(MBB, MBBI, dl, OrInst, FPReg)
1483         .addReg(ScratchReg)
1484         .addReg(ScratchReg);
1485 
1486     // Now load the LR from the caller's stack frame.
1487     if (MustSaveLR && !LoadedLR)
1488       BuildMI(MBB, MBBI, dl, LoadInst, ScratchReg)
1489         .addImm(LROffset)
1490         .addReg(SPReg);
1491   }
1492 
1493   if (MustSaveCR &&
1494       !(SingleScratchReg && MustSaveLR)) // will only occur for PPC64
1495     for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i)
1496       BuildMI(MBB, MBBI, dl, TII.get(PPC::MTOCRF8), MustSaveCRs[i])
1497         .addReg(TempReg, getKillRegState(i == e-1));
1498 
1499   if (MustSaveLR)
1500     BuildMI(MBB, MBBI, dl, MTLRInst).addReg(ScratchReg);
1501 
1502   // Callee pop calling convention. Pop parameter/linkage area. Used for tail
1503   // call optimization
1504   if (IsReturnBlock) {
1505     unsigned RetOpcode = MBBI->getOpcode();
1506     if (MF.getTarget().Options.GuaranteedTailCallOpt &&
1507         (RetOpcode == PPC::BLR || RetOpcode == PPC::BLR8) &&
1508         MF.getFunction().getCallingConv() == CallingConv::Fast) {
1509       PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
1510       unsigned CallerAllocatedAmt = FI->getMinReservedArea();
1511 
1512       if (CallerAllocatedAmt && isInt<16>(CallerAllocatedAmt)) {
1513         BuildMI(MBB, MBBI, dl, AddImmInst, SPReg)
1514           .addReg(SPReg).addImm(CallerAllocatedAmt);
1515       } else {
1516         BuildMI(MBB, MBBI, dl, LoadImmShiftedInst, ScratchReg)
1517           .addImm(CallerAllocatedAmt >> 16);
1518         BuildMI(MBB, MBBI, dl, OrImmInst, ScratchReg)
1519           .addReg(ScratchReg, RegState::Kill)
1520           .addImm(CallerAllocatedAmt & 0xFFFF);
1521         BuildMI(MBB, MBBI, dl, AddInst)
1522           .addReg(SPReg)
1523           .addReg(FPReg)
1524           .addReg(ScratchReg);
1525       }
1526     } else {
1527       createTailCallBranchInstr(MBB);
1528     }
1529   }
1530 }
1531 
1532 void PPCFrameLowering::createTailCallBranchInstr(MachineBasicBlock &MBB) const {
1533   MachineBasicBlock::iterator MBBI = MBB.getFirstTerminator();
1534 
1535   // If we got this far a first terminator should exist.
1536   assert(MBBI != MBB.end() && "Failed to find the first terminator.");
1537 
1538   DebugLoc dl = MBBI->getDebugLoc();
1539   const PPCInstrInfo &TII = *Subtarget.getInstrInfo();
1540 
1541   // Create branch instruction for pseudo tail call return instruction
1542   unsigned RetOpcode = MBBI->getOpcode();
1543   if (RetOpcode == PPC::TCRETURNdi) {
1544     MBBI = MBB.getLastNonDebugInstr();
1545     MachineOperand &JumpTarget = MBBI->getOperand(0);
1546     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILB)).
1547       addGlobalAddress(JumpTarget.getGlobal(), JumpTarget.getOffset());
1548   } else if (RetOpcode == PPC::TCRETURNri) {
1549     MBBI = MBB.getLastNonDebugInstr();
1550     assert(MBBI->getOperand(0).isReg() && "Expecting register operand.");
1551     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILBCTR));
1552   } else if (RetOpcode == PPC::TCRETURNai) {
1553     MBBI = MBB.getLastNonDebugInstr();
1554     MachineOperand &JumpTarget = MBBI->getOperand(0);
1555     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILBA)).addImm(JumpTarget.getImm());
1556   } else if (RetOpcode == PPC::TCRETURNdi8) {
1557     MBBI = MBB.getLastNonDebugInstr();
1558     MachineOperand &JumpTarget = MBBI->getOperand(0);
1559     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILB8)).
1560       addGlobalAddress(JumpTarget.getGlobal(), JumpTarget.getOffset());
1561   } else if (RetOpcode == PPC::TCRETURNri8) {
1562     MBBI = MBB.getLastNonDebugInstr();
1563     assert(MBBI->getOperand(0).isReg() && "Expecting register operand.");
1564     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILBCTR8));
1565   } else if (RetOpcode == PPC::TCRETURNai8) {
1566     MBBI = MBB.getLastNonDebugInstr();
1567     MachineOperand &JumpTarget = MBBI->getOperand(0);
1568     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILBA8)).addImm(JumpTarget.getImm());
1569   }
1570 }
1571 
1572 void PPCFrameLowering::determineCalleeSaves(MachineFunction &MF,
1573                                             BitVector &SavedRegs,
1574                                             RegScavenger *RS) const {
1575   TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS);
1576 
1577   const PPCRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
1578 
1579   //  Save and clear the LR state.
1580   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
1581   unsigned LR = RegInfo->getRARegister();
1582   FI->setMustSaveLR(MustSaveLR(MF, LR));
1583   SavedRegs.reset(LR);
1584 
1585   //  Save R31 if necessary
1586   int FPSI = FI->getFramePointerSaveIndex();
1587   bool isPPC64 = Subtarget.isPPC64();
1588   bool isDarwinABI  = Subtarget.isDarwinABI();
1589   MachineFrameInfo &MFI = MF.getFrameInfo();
1590 
1591   // If the frame pointer save index hasn't been defined yet.
1592   if (!FPSI && needsFP(MF)) {
1593     // Find out what the fix offset of the frame pointer save area.
1594     int FPOffset = getFramePointerSaveOffset();
1595     // Allocate the frame index for frame pointer save area.
1596     FPSI = MFI.CreateFixedObject(isPPC64? 8 : 4, FPOffset, true);
1597     // Save the result.
1598     FI->setFramePointerSaveIndex(FPSI);
1599   }
1600 
1601   int BPSI = FI->getBasePointerSaveIndex();
1602   if (!BPSI && RegInfo->hasBasePointer(MF)) {
1603     int BPOffset = getBasePointerSaveOffset();
1604     // Allocate the frame index for the base pointer save area.
1605     BPSI = MFI.CreateFixedObject(isPPC64? 8 : 4, BPOffset, true);
1606     // Save the result.
1607     FI->setBasePointerSaveIndex(BPSI);
1608   }
1609 
1610   // Reserve stack space for the PIC Base register (R30).
1611   // Only used in SVR4 32-bit.
1612   if (FI->usesPICBase()) {
1613     int PBPSI = MFI.CreateFixedObject(4, -8, true);
1614     FI->setPICBasePointerSaveIndex(PBPSI);
1615   }
1616 
1617   // Make sure we don't explicitly spill r31, because, for example, we have
1618   // some inline asm which explicitly clobbers it, when we otherwise have a
1619   // frame pointer and are using r31's spill slot for the prologue/epilogue
1620   // code. Same goes for the base pointer and the PIC base register.
1621   if (needsFP(MF))
1622     SavedRegs.reset(isPPC64 ? PPC::X31 : PPC::R31);
1623   if (RegInfo->hasBasePointer(MF))
1624     SavedRegs.reset(RegInfo->getBaseRegister(MF));
1625   if (FI->usesPICBase())
1626     SavedRegs.reset(PPC::R30);
1627 
1628   // Reserve stack space to move the linkage area to in case of a tail call.
1629   int TCSPDelta = 0;
1630   if (MF.getTarget().Options.GuaranteedTailCallOpt &&
1631       (TCSPDelta = FI->getTailCallSPDelta()) < 0) {
1632     MFI.CreateFixedObject(-1 * TCSPDelta, TCSPDelta, true);
1633   }
1634 
1635   // For 32-bit SVR4, allocate the nonvolatile CR spill slot iff the
1636   // function uses CR 2, 3, or 4.
1637   if (!isPPC64 && !isDarwinABI &&
1638       (SavedRegs.test(PPC::CR2) ||
1639        SavedRegs.test(PPC::CR3) ||
1640        SavedRegs.test(PPC::CR4))) {
1641     int FrameIdx = MFI.CreateFixedObject((uint64_t)4, (int64_t)-4, true);
1642     FI->setCRSpillFrameIndex(FrameIdx);
1643   }
1644 }
1645 
1646 void PPCFrameLowering::processFunctionBeforeFrameFinalized(MachineFunction &MF,
1647                                                        RegScavenger *RS) const {
1648   // Early exit if not using the SVR4 ABI.
1649   if (!Subtarget.isSVR4ABI()) {
1650     addScavengingSpillSlot(MF, RS);
1651     return;
1652   }
1653 
1654   // Get callee saved register information.
1655   MachineFrameInfo &MFI = MF.getFrameInfo();
1656   const std::vector<CalleeSavedInfo> &CSI = MFI.getCalleeSavedInfo();
1657 
1658   // If the function is shrink-wrapped, and if the function has a tail call, the
1659   // tail call might not be in the new RestoreBlock, so real branch instruction
1660   // won't be generated by emitEpilogue(), because shrink-wrap has chosen new
1661   // RestoreBlock. So we handle this case here.
1662   if (MFI.getSavePoint() && MFI.hasTailCall()) {
1663     MachineBasicBlock *RestoreBlock = MFI.getRestorePoint();
1664     for (MachineBasicBlock &MBB : MF) {
1665       if (MBB.isReturnBlock() && (&MBB) != RestoreBlock)
1666         createTailCallBranchInstr(MBB);
1667     }
1668   }
1669 
1670   // Early exit if no callee saved registers are modified!
1671   if (CSI.empty() && !needsFP(MF)) {
1672     addScavengingSpillSlot(MF, RS);
1673     return;
1674   }
1675 
1676   unsigned MinGPR = PPC::R31;
1677   unsigned MinG8R = PPC::X31;
1678   unsigned MinFPR = PPC::F31;
1679   unsigned MinVR = PPC::V31;
1680 
1681   bool HasGPSaveArea = false;
1682   bool HasG8SaveArea = false;
1683   bool HasFPSaveArea = false;
1684   bool HasVRSAVESaveArea = false;
1685   bool HasVRSaveArea = false;
1686 
1687   SmallVector<CalleeSavedInfo, 18> GPRegs;
1688   SmallVector<CalleeSavedInfo, 18> G8Regs;
1689   SmallVector<CalleeSavedInfo, 18> FPRegs;
1690   SmallVector<CalleeSavedInfo, 18> VRegs;
1691 
1692   for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
1693     unsigned Reg = CSI[i].getReg();
1694     if (PPC::GPRCRegClass.contains(Reg)) {
1695       HasGPSaveArea = true;
1696 
1697       GPRegs.push_back(CSI[i]);
1698 
1699       if (Reg < MinGPR) {
1700         MinGPR = Reg;
1701       }
1702     } else if (PPC::G8RCRegClass.contains(Reg)) {
1703       HasG8SaveArea = true;
1704 
1705       G8Regs.push_back(CSI[i]);
1706 
1707       if (Reg < MinG8R) {
1708         MinG8R = Reg;
1709       }
1710     } else if (PPC::F8RCRegClass.contains(Reg)) {
1711       HasFPSaveArea = true;
1712 
1713       FPRegs.push_back(CSI[i]);
1714 
1715       if (Reg < MinFPR) {
1716         MinFPR = Reg;
1717       }
1718     } else if (PPC::CRBITRCRegClass.contains(Reg) ||
1719                PPC::CRRCRegClass.contains(Reg)) {
1720       ; // do nothing, as we already know whether CRs are spilled
1721     } else if (PPC::VRSAVERCRegClass.contains(Reg)) {
1722       HasVRSAVESaveArea = true;
1723     } else if (PPC::VRRCRegClass.contains(Reg)) {
1724       HasVRSaveArea = true;
1725 
1726       VRegs.push_back(CSI[i]);
1727 
1728       if (Reg < MinVR) {
1729         MinVR = Reg;
1730       }
1731     } else {
1732       llvm_unreachable("Unknown RegisterClass!");
1733     }
1734   }
1735 
1736   PPCFunctionInfo *PFI = MF.getInfo<PPCFunctionInfo>();
1737   const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
1738 
1739   int64_t LowerBound = 0;
1740 
1741   // Take into account stack space reserved for tail calls.
1742   int TCSPDelta = 0;
1743   if (MF.getTarget().Options.GuaranteedTailCallOpt &&
1744       (TCSPDelta = PFI->getTailCallSPDelta()) < 0) {
1745     LowerBound = TCSPDelta;
1746   }
1747 
1748   // The Floating-point register save area is right below the back chain word
1749   // of the previous stack frame.
1750   if (HasFPSaveArea) {
1751     for (unsigned i = 0, e = FPRegs.size(); i != e; ++i) {
1752       int FI = FPRegs[i].getFrameIdx();
1753 
1754       MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1755     }
1756 
1757     LowerBound -= (31 - TRI->getEncodingValue(MinFPR) + 1) * 8;
1758   }
1759 
1760   // Check whether the frame pointer register is allocated. If so, make sure it
1761   // is spilled to the correct offset.
1762   if (needsFP(MF)) {
1763     int FI = PFI->getFramePointerSaveIndex();
1764     assert(FI && "No Frame Pointer Save Slot!");
1765     MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1766     // FP is R31/X31, so no need to update MinGPR/MinG8R.
1767     HasGPSaveArea = true;
1768   }
1769 
1770   if (PFI->usesPICBase()) {
1771     int FI = PFI->getPICBasePointerSaveIndex();
1772     assert(FI && "No PIC Base Pointer Save Slot!");
1773     MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1774 
1775     MinGPR = std::min<unsigned>(MinGPR, PPC::R30);
1776     HasGPSaveArea = true;
1777   }
1778 
1779   const PPCRegisterInfo *RegInfo = Subtarget.getRegisterInfo();
1780   if (RegInfo->hasBasePointer(MF)) {
1781     int FI = PFI->getBasePointerSaveIndex();
1782     assert(FI && "No Base Pointer Save Slot!");
1783     MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1784 
1785     unsigned BP = RegInfo->getBaseRegister(MF);
1786     if (PPC::G8RCRegClass.contains(BP)) {
1787       MinG8R = std::min<unsigned>(MinG8R, BP);
1788       HasG8SaveArea = true;
1789     } else if (PPC::GPRCRegClass.contains(BP)) {
1790       MinGPR = std::min<unsigned>(MinGPR, BP);
1791       HasGPSaveArea = true;
1792     }
1793   }
1794 
1795   // General register save area starts right below the Floating-point
1796   // register save area.
1797   if (HasGPSaveArea || HasG8SaveArea) {
1798     // Move general register save area spill slots down, taking into account
1799     // the size of the Floating-point register save area.
1800     for (unsigned i = 0, e = GPRegs.size(); i != e; ++i) {
1801       int FI = GPRegs[i].getFrameIdx();
1802 
1803       MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1804     }
1805 
1806     // Move general register save area spill slots down, taking into account
1807     // the size of the Floating-point register save area.
1808     for (unsigned i = 0, e = G8Regs.size(); i != e; ++i) {
1809       int FI = G8Regs[i].getFrameIdx();
1810 
1811       MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1812     }
1813 
1814     unsigned MinReg =
1815       std::min<unsigned>(TRI->getEncodingValue(MinGPR),
1816                          TRI->getEncodingValue(MinG8R));
1817 
1818     if (Subtarget.isPPC64()) {
1819       LowerBound -= (31 - MinReg + 1) * 8;
1820     } else {
1821       LowerBound -= (31 - MinReg + 1) * 4;
1822     }
1823   }
1824 
1825   // For 32-bit only, the CR save area is below the general register
1826   // save area.  For 64-bit SVR4, the CR save area is addressed relative
1827   // to the stack pointer and hence does not need an adjustment here.
1828   // Only CR2 (the first nonvolatile spilled) has an associated frame
1829   // index so that we have a single uniform save area.
1830   if (spillsCR(MF) && !(Subtarget.isPPC64() && Subtarget.isSVR4ABI())) {
1831     // Adjust the frame index of the CR spill slot.
1832     for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
1833       unsigned Reg = CSI[i].getReg();
1834 
1835       if ((Subtarget.isSVR4ABI() && Reg == PPC::CR2)
1836           // Leave Darwin logic as-is.
1837           || (!Subtarget.isSVR4ABI() &&
1838               (PPC::CRBITRCRegClass.contains(Reg) ||
1839                PPC::CRRCRegClass.contains(Reg)))) {
1840         int FI = CSI[i].getFrameIdx();
1841 
1842         MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1843       }
1844     }
1845 
1846     LowerBound -= 4; // The CR save area is always 4 bytes long.
1847   }
1848 
1849   if (HasVRSAVESaveArea) {
1850     // FIXME SVR4: Is it actually possible to have multiple elements in CSI
1851     //             which have the VRSAVE register class?
1852     // Adjust the frame index of the VRSAVE spill slot.
1853     for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
1854       unsigned Reg = CSI[i].getReg();
1855 
1856       if (PPC::VRSAVERCRegClass.contains(Reg)) {
1857         int FI = CSI[i].getFrameIdx();
1858 
1859         MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1860       }
1861     }
1862 
1863     LowerBound -= 4; // The VRSAVE save area is always 4 bytes long.
1864   }
1865 
1866   if (HasVRSaveArea) {
1867     // Insert alignment padding, we need 16-byte alignment. Note: for positive
1868     // number the alignment formula is : y = (x + (n-1)) & (~(n-1)). But since
1869     // we are using negative number here (the stack grows downward). We should
1870     // use formula : y = x & (~(n-1)). Where x is the size before aligning, n
1871     // is the alignment size ( n = 16 here) and y is the size after aligning.
1872     assert(LowerBound <= 0 && "Expect LowerBound have a non-positive value!");
1873     LowerBound &= ~(15);
1874 
1875     for (unsigned i = 0, e = VRegs.size(); i != e; ++i) {
1876       int FI = VRegs[i].getFrameIdx();
1877 
1878       MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1879     }
1880   }
1881 
1882   addScavengingSpillSlot(MF, RS);
1883 }
1884 
1885 void
1886 PPCFrameLowering::addScavengingSpillSlot(MachineFunction &MF,
1887                                          RegScavenger *RS) const {
1888   // Reserve a slot closest to SP or frame pointer if we have a dynalloc or
1889   // a large stack, which will require scavenging a register to materialize a
1890   // large offset.
1891 
1892   // We need to have a scavenger spill slot for spills if the frame size is
1893   // large. In case there is no free register for large-offset addressing,
1894   // this slot is used for the necessary emergency spill. Also, we need the
1895   // slot for dynamic stack allocations.
1896 
1897   // The scavenger might be invoked if the frame offset does not fit into
1898   // the 16-bit immediate. We don't know the complete frame size here
1899   // because we've not yet computed callee-saved register spills or the
1900   // needed alignment padding.
1901   unsigned StackSize = determineFrameLayout(MF, false, true);
1902   MachineFrameInfo &MFI = MF.getFrameInfo();
1903   if (MFI.hasVarSizedObjects() || spillsCR(MF) || spillsVRSAVE(MF) ||
1904       hasNonRISpills(MF) || (hasSpills(MF) && !isInt<16>(StackSize))) {
1905     const TargetRegisterClass &GPRC = PPC::GPRCRegClass;
1906     const TargetRegisterClass &G8RC = PPC::G8RCRegClass;
1907     const TargetRegisterClass &RC = Subtarget.isPPC64() ? G8RC : GPRC;
1908     const TargetRegisterInfo &TRI = *Subtarget.getRegisterInfo();
1909     unsigned Size = TRI.getSpillSize(RC);
1910     unsigned Align = TRI.getSpillAlignment(RC);
1911     RS->addScavengingFrameIndex(MFI.CreateStackObject(Size, Align, false));
1912 
1913     // Might we have over-aligned allocas?
1914     bool HasAlVars = MFI.hasVarSizedObjects() &&
1915                      MFI.getMaxAlignment() > getStackAlignment();
1916 
1917     // These kinds of spills might need two registers.
1918     if (spillsCR(MF) || spillsVRSAVE(MF) || HasAlVars)
1919       RS->addScavengingFrameIndex(MFI.CreateStackObject(Size, Align, false));
1920 
1921   }
1922 }
1923 
1924 bool
1925 PPCFrameLowering::spillCalleeSavedRegisters(MachineBasicBlock &MBB,
1926                                      MachineBasicBlock::iterator MI,
1927                                      const std::vector<CalleeSavedInfo> &CSI,
1928                                      const TargetRegisterInfo *TRI) const {
1929 
1930   // Currently, this function only handles SVR4 32- and 64-bit ABIs.
1931   // Return false otherwise to maintain pre-existing behavior.
1932   if (!Subtarget.isSVR4ABI())
1933     return false;
1934 
1935   MachineFunction *MF = MBB.getParent();
1936   const PPCInstrInfo &TII = *Subtarget.getInstrInfo();
1937   DebugLoc DL;
1938   bool CRSpilled = false;
1939   MachineInstrBuilder CRMIB;
1940 
1941   for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
1942     unsigned Reg = CSI[i].getReg();
1943     // Only Darwin actually uses the VRSAVE register, but it can still appear
1944     // here if, for example, @llvm.eh.unwind.init() is used.  If we're not on
1945     // Darwin, ignore it.
1946     if (Reg == PPC::VRSAVE && !Subtarget.isDarwinABI())
1947       continue;
1948 
1949     // CR2 through CR4 are the nonvolatile CR fields.
1950     bool IsCRField = PPC::CR2 <= Reg && Reg <= PPC::CR4;
1951 
1952     // Add the callee-saved register as live-in; it's killed at the spill.
1953     // Do not do this for callee-saved registers that are live-in to the
1954     // function because they will already be marked live-in and this will be
1955     // adding it for a second time. It is an error to add the same register
1956     // to the set more than once.
1957     const MachineRegisterInfo &MRI = MF->getRegInfo();
1958     bool IsLiveIn = MRI.isLiveIn(Reg);
1959     if (!IsLiveIn)
1960        MBB.addLiveIn(Reg);
1961 
1962     if (CRSpilled && IsCRField) {
1963       CRMIB.addReg(Reg, RegState::ImplicitKill);
1964       continue;
1965     }
1966 
1967     // Insert the spill to the stack frame.
1968     if (IsCRField) {
1969       PPCFunctionInfo *FuncInfo = MF->getInfo<PPCFunctionInfo>();
1970       if (Subtarget.isPPC64()) {
1971         // The actual spill will happen at the start of the prologue.
1972         FuncInfo->addMustSaveCR(Reg);
1973       } else {
1974         CRSpilled = true;
1975         FuncInfo->setSpillsCR();
1976 
1977         // 32-bit:  FP-relative.  Note that we made sure CR2-CR4 all have
1978         // the same frame index in PPCRegisterInfo::hasReservedSpillSlot.
1979         CRMIB = BuildMI(*MF, DL, TII.get(PPC::MFCR), PPC::R12)
1980                   .addReg(Reg, RegState::ImplicitKill);
1981 
1982         MBB.insert(MI, CRMIB);
1983         MBB.insert(MI, addFrameReference(BuildMI(*MF, DL, TII.get(PPC::STW))
1984                                          .addReg(PPC::R12,
1985                                                  getKillRegState(true)),
1986                                          CSI[i].getFrameIdx()));
1987       }
1988     } else {
1989       const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
1990       // Use !IsLiveIn for the kill flag.
1991       // We do not want to kill registers that are live in this function
1992       // before their use because they will become undefined registers.
1993       TII.storeRegToStackSlot(MBB, MI, Reg, !IsLiveIn,
1994                               CSI[i].getFrameIdx(), RC, TRI);
1995     }
1996   }
1997   return true;
1998 }
1999 
2000 static void
2001 restoreCRs(bool isPPC64, bool is31,
2002            bool CR2Spilled, bool CR3Spilled, bool CR4Spilled,
2003            MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
2004            const std::vector<CalleeSavedInfo> &CSI, unsigned CSIIndex) {
2005 
2006   MachineFunction *MF = MBB.getParent();
2007   const PPCInstrInfo &TII = *MF->getSubtarget<PPCSubtarget>().getInstrInfo();
2008   DebugLoc DL;
2009   unsigned RestoreOp, MoveReg;
2010 
2011   if (isPPC64)
2012     // This is handled during epilogue generation.
2013     return;
2014   else {
2015     // 32-bit:  FP-relative
2016     MBB.insert(MI, addFrameReference(BuildMI(*MF, DL, TII.get(PPC::LWZ),
2017                                              PPC::R12),
2018                                      CSI[CSIIndex].getFrameIdx()));
2019     RestoreOp = PPC::MTOCRF;
2020     MoveReg = PPC::R12;
2021   }
2022 
2023   if (CR2Spilled)
2024     MBB.insert(MI, BuildMI(*MF, DL, TII.get(RestoreOp), PPC::CR2)
2025                .addReg(MoveReg, getKillRegState(!CR3Spilled && !CR4Spilled)));
2026 
2027   if (CR3Spilled)
2028     MBB.insert(MI, BuildMI(*MF, DL, TII.get(RestoreOp), PPC::CR3)
2029                .addReg(MoveReg, getKillRegState(!CR4Spilled)));
2030 
2031   if (CR4Spilled)
2032     MBB.insert(MI, BuildMI(*MF, DL, TII.get(RestoreOp), PPC::CR4)
2033                .addReg(MoveReg, getKillRegState(true)));
2034 }
2035 
2036 MachineBasicBlock::iterator PPCFrameLowering::
2037 eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
2038                               MachineBasicBlock::iterator I) const {
2039   const TargetInstrInfo &TII = *Subtarget.getInstrInfo();
2040   if (MF.getTarget().Options.GuaranteedTailCallOpt &&
2041       I->getOpcode() == PPC::ADJCALLSTACKUP) {
2042     // Add (actually subtract) back the amount the callee popped on return.
2043     if (int CalleeAmt =  I->getOperand(1).getImm()) {
2044       bool is64Bit = Subtarget.isPPC64();
2045       CalleeAmt *= -1;
2046       unsigned StackReg = is64Bit ? PPC::X1 : PPC::R1;
2047       unsigned TmpReg = is64Bit ? PPC::X0 : PPC::R0;
2048       unsigned ADDIInstr = is64Bit ? PPC::ADDI8 : PPC::ADDI;
2049       unsigned ADDInstr = is64Bit ? PPC::ADD8 : PPC::ADD4;
2050       unsigned LISInstr = is64Bit ? PPC::LIS8 : PPC::LIS;
2051       unsigned ORIInstr = is64Bit ? PPC::ORI8 : PPC::ORI;
2052       const DebugLoc &dl = I->getDebugLoc();
2053 
2054       if (isInt<16>(CalleeAmt)) {
2055         BuildMI(MBB, I, dl, TII.get(ADDIInstr), StackReg)
2056           .addReg(StackReg, RegState::Kill)
2057           .addImm(CalleeAmt);
2058       } else {
2059         MachineBasicBlock::iterator MBBI = I;
2060         BuildMI(MBB, MBBI, dl, TII.get(LISInstr), TmpReg)
2061           .addImm(CalleeAmt >> 16);
2062         BuildMI(MBB, MBBI, dl, TII.get(ORIInstr), TmpReg)
2063           .addReg(TmpReg, RegState::Kill)
2064           .addImm(CalleeAmt & 0xFFFF);
2065         BuildMI(MBB, MBBI, dl, TII.get(ADDInstr), StackReg)
2066           .addReg(StackReg, RegState::Kill)
2067           .addReg(TmpReg);
2068       }
2069     }
2070   }
2071   // Simply discard ADJCALLSTACKDOWN, ADJCALLSTACKUP instructions.
2072   return MBB.erase(I);
2073 }
2074 
2075 bool
2076 PPCFrameLowering::restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
2077                                         MachineBasicBlock::iterator MI,
2078                                         std::vector<CalleeSavedInfo> &CSI,
2079                                         const TargetRegisterInfo *TRI) const {
2080 
2081   // Currently, this function only handles SVR4 32- and 64-bit ABIs.
2082   // Return false otherwise to maintain pre-existing behavior.
2083   if (!Subtarget.isSVR4ABI())
2084     return false;
2085 
2086   MachineFunction *MF = MBB.getParent();
2087   const PPCInstrInfo &TII = *Subtarget.getInstrInfo();
2088   bool CR2Spilled = false;
2089   bool CR3Spilled = false;
2090   bool CR4Spilled = false;
2091   unsigned CSIIndex = 0;
2092 
2093   // Initialize insertion-point logic; we will be restoring in reverse
2094   // order of spill.
2095   MachineBasicBlock::iterator I = MI, BeforeI = I;
2096   bool AtStart = I == MBB.begin();
2097 
2098   if (!AtStart)
2099     --BeforeI;
2100 
2101   for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
2102     unsigned Reg = CSI[i].getReg();
2103 
2104     // Only Darwin actually uses the VRSAVE register, but it can still appear
2105     // here if, for example, @llvm.eh.unwind.init() is used.  If we're not on
2106     // Darwin, ignore it.
2107     if (Reg == PPC::VRSAVE && !Subtarget.isDarwinABI())
2108       continue;
2109 
2110     if (Reg == PPC::CR2) {
2111       CR2Spilled = true;
2112       // The spill slot is associated only with CR2, which is the
2113       // first nonvolatile spilled.  Save it here.
2114       CSIIndex = i;
2115       continue;
2116     } else if (Reg == PPC::CR3) {
2117       CR3Spilled = true;
2118       continue;
2119     } else if (Reg == PPC::CR4) {
2120       CR4Spilled = true;
2121       continue;
2122     } else {
2123       // When we first encounter a non-CR register after seeing at
2124       // least one CR register, restore all spilled CRs together.
2125       if ((CR2Spilled || CR3Spilled || CR4Spilled)
2126           && !(PPC::CR2 <= Reg && Reg <= PPC::CR4)) {
2127         bool is31 = needsFP(*MF);
2128         restoreCRs(Subtarget.isPPC64(), is31,
2129                    CR2Spilled, CR3Spilled, CR4Spilled,
2130                    MBB, I, CSI, CSIIndex);
2131         CR2Spilled = CR3Spilled = CR4Spilled = false;
2132       }
2133 
2134       // Default behavior for non-CR saves.
2135       const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
2136       TII.loadRegFromStackSlot(MBB, I, Reg, CSI[i].getFrameIdx(),
2137                                RC, TRI);
2138       assert(I != MBB.begin() &&
2139              "loadRegFromStackSlot didn't insert any code!");
2140       }
2141 
2142     // Insert in reverse order.
2143     if (AtStart)
2144       I = MBB.begin();
2145     else {
2146       I = BeforeI;
2147       ++I;
2148     }
2149   }
2150 
2151   // If we haven't yet spilled the CRs, do so now.
2152   if (CR2Spilled || CR3Spilled || CR4Spilled) {
2153     bool is31 = needsFP(*MF);
2154     restoreCRs(Subtarget.isPPC64(), is31, CR2Spilled, CR3Spilled, CR4Spilled,
2155                MBB, I, CSI, CSIIndex);
2156   }
2157 
2158   return true;
2159 }
2160 
2161 bool PPCFrameLowering::enableShrinkWrapping(const MachineFunction &MF) const {
2162   if (MF.getInfo<PPCFunctionInfo>()->shrinkWrapDisabled())
2163     return false;
2164   return (MF.getSubtarget<PPCSubtarget>().isSVR4ABI() &&
2165           MF.getSubtarget<PPCSubtarget>().isPPC64());
2166 }
2167