xref: /llvm-project/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp (revision 020ec299bff6dbc9a4f8dd1d19e09a3f26441f30)
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 (MachineRegisterInfo::livein_iterator
316        I = MF->getRegInfo().livein_begin(),
317        E = MF->getRegInfo().livein_end(); I != E; ++I) {
318     unsigned RegNo = TRI->getEncodingValue(I->first);
319     if (VRRegNo[RegNo] == I->first)        // If this really is a vector reg.
320       UsedRegMask &= ~(1 << (31-RegNo));   // Doesn't need to be marked.
321   }
322 
323   // Live out registers appear as use operands on return instructions.
324   for (MachineFunction::const_iterator BI = MF->begin(), BE = MF->end();
325        UsedRegMask != 0 && BI != BE; ++BI) {
326     const MachineBasicBlock &MBB = *BI;
327     if (!MBB.isReturnBlock())
328       continue;
329     const MachineInstr &Ret = MBB.back();
330     for (unsigned I = 0, E = Ret.getNumOperands(); I != E; ++I) {
331       const MachineOperand &MO = Ret.getOperand(I);
332       if (!MO.isReg() || !PPC::VRRCRegClass.contains(MO.getReg()))
333         continue;
334       unsigned RegNo = TRI->getEncodingValue(MO.getReg());
335       UsedRegMask &= ~(1 << (31-RegNo));
336     }
337   }
338 
339   // If no registers are used, turn this into a copy.
340   if (UsedRegMask == 0) {
341     // Remove all VRSAVE code.
342     RemoveVRSaveCode(MI);
343     return;
344   }
345 
346   unsigned SrcReg = MI.getOperand(1).getReg();
347   unsigned DstReg = MI.getOperand(0).getReg();
348 
349   if ((UsedRegMask & 0xFFFF) == UsedRegMask) {
350     if (DstReg != SrcReg)
351       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORI), DstReg)
352           .addReg(SrcReg)
353           .addImm(UsedRegMask);
354     else
355       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORI), DstReg)
356           .addReg(SrcReg, RegState::Kill)
357           .addImm(UsedRegMask);
358   } else if ((UsedRegMask & 0xFFFF0000) == UsedRegMask) {
359     if (DstReg != SrcReg)
360       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORIS), DstReg)
361           .addReg(SrcReg)
362           .addImm(UsedRegMask >> 16);
363     else
364       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORIS), DstReg)
365           .addReg(SrcReg, RegState::Kill)
366           .addImm(UsedRegMask >> 16);
367   } else {
368     if (DstReg != SrcReg)
369       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORIS), DstReg)
370           .addReg(SrcReg)
371           .addImm(UsedRegMask >> 16);
372     else
373       BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORIS), DstReg)
374           .addReg(SrcReg, RegState::Kill)
375           .addImm(UsedRegMask >> 16);
376 
377     BuildMI(*MI.getParent(), MI, dl, TII.get(PPC::ORI), DstReg)
378         .addReg(DstReg, RegState::Kill)
379         .addImm(UsedRegMask & 0xFFFF);
380   }
381 
382   // Remove the old UPDATE_VRSAVE instruction.
383   MI.eraseFromParent();
384 }
385 
386 static bool spillsCR(const MachineFunction &MF) {
387   const PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
388   return FuncInfo->isCRSpilled();
389 }
390 
391 static bool spillsVRSAVE(const MachineFunction &MF) {
392   const PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
393   return FuncInfo->isVRSAVESpilled();
394 }
395 
396 static bool hasSpills(const MachineFunction &MF) {
397   const PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
398   return FuncInfo->hasSpills();
399 }
400 
401 static bool hasNonRISpills(const MachineFunction &MF) {
402   const PPCFunctionInfo *FuncInfo = MF.getInfo<PPCFunctionInfo>();
403   return FuncInfo->hasNonRISpills();
404 }
405 
406 /// MustSaveLR - Return true if this function requires that we save the LR
407 /// register onto the stack in the prolog and restore it in the epilog of the
408 /// function.
409 static bool MustSaveLR(const MachineFunction &MF, unsigned LR) {
410   const PPCFunctionInfo *MFI = MF.getInfo<PPCFunctionInfo>();
411 
412   // We need a save/restore of LR if there is any def of LR (which is
413   // defined by calls, including the PIC setup sequence), or if there is
414   // some use of the LR stack slot (e.g. for builtin_return_address).
415   // (LR comes in 32 and 64 bit versions.)
416   MachineRegisterInfo::def_iterator RI = MF.getRegInfo().def_begin(LR);
417   return RI !=MF.getRegInfo().def_end() || MFI->isLRStoreRequired();
418 }
419 
420 /// determineFrameLayout - Determine the size of the frame and maximum call
421 /// frame size.
422 unsigned PPCFrameLowering::determineFrameLayout(MachineFunction &MF,
423                                                 bool UpdateMF,
424                                                 bool UseEstimate) const {
425   MachineFrameInfo &MFI = MF.getFrameInfo();
426 
427   // Get the number of bytes to allocate from the FrameInfo
428   unsigned FrameSize =
429     UseEstimate ? MFI.estimateStackSize(MF) : MFI.getStackSize();
430 
431   // Get stack alignments. The frame must be aligned to the greatest of these:
432   unsigned TargetAlign = getStackAlignment(); // alignment required per the ABI
433   unsigned MaxAlign = MFI.getMaxAlignment(); // algmt required by data in frame
434   unsigned AlignMask = std::max(MaxAlign, TargetAlign) - 1;
435 
436   const PPCRegisterInfo *RegInfo =
437       static_cast<const PPCRegisterInfo *>(Subtarget.getRegisterInfo());
438 
439   // If we are a leaf function, and use up to 224 bytes of stack space,
440   // don't have a frame pointer, calls, or dynamic alloca then we do not need
441   // to adjust the stack pointer (we fit in the Red Zone).
442   // The 32-bit SVR4 ABI has no Red Zone. However, it can still generate
443   // stackless code if all local vars are reg-allocated.
444   bool DisableRedZone = MF.getFunction()->hasFnAttribute(Attribute::NoRedZone);
445   unsigned LR = RegInfo->getRARegister();
446   if (!DisableRedZone &&
447       (Subtarget.isPPC64() ||                      // 32-bit SVR4, no stack-
448        !Subtarget.isSVR4ABI() ||                   //   allocated locals.
449         FrameSize == 0) &&
450       FrameSize <= 224 &&                          // Fits in red zone.
451       !MFI.hasVarSizedObjects() &&                 // No dynamic alloca.
452       !MFI.adjustsStack() &&                       // No calls.
453       !MustSaveLR(MF, LR) &&
454       !RegInfo->hasBasePointer(MF)) { // No special alignment.
455     // No need for frame
456     if (UpdateMF)
457       MFI.setStackSize(0);
458     return 0;
459   }
460 
461   // Get the maximum call frame size of all the calls.
462   unsigned maxCallFrameSize = MFI.getMaxCallFrameSize();
463 
464   // Maximum call frame needs to be at least big enough for linkage area.
465   unsigned minCallFrameSize = getLinkageSize();
466   maxCallFrameSize = std::max(maxCallFrameSize, minCallFrameSize);
467 
468   // If we have dynamic alloca then maxCallFrameSize needs to be aligned so
469   // that allocations will be aligned.
470   if (MFI.hasVarSizedObjects())
471     maxCallFrameSize = (maxCallFrameSize + AlignMask) & ~AlignMask;
472 
473   // Update maximum call frame size.
474   if (UpdateMF)
475     MFI.setMaxCallFrameSize(maxCallFrameSize);
476 
477   // Include call frame size in total.
478   FrameSize += maxCallFrameSize;
479 
480   // Make sure the frame is aligned.
481   FrameSize = (FrameSize + AlignMask) & ~AlignMask;
482 
483   // Update frame info.
484   if (UpdateMF)
485     MFI.setStackSize(FrameSize);
486 
487   return FrameSize;
488 }
489 
490 // hasFP - Return true if the specified function actually has a dedicated frame
491 // pointer register.
492 bool PPCFrameLowering::hasFP(const MachineFunction &MF) const {
493   const MachineFrameInfo &MFI = MF.getFrameInfo();
494   // FIXME: This is pretty much broken by design: hasFP() might be called really
495   // early, before the stack layout was calculated and thus hasFP() might return
496   // true or false here depending on the time of call.
497   return (MFI.getStackSize()) && needsFP(MF);
498 }
499 
500 // needsFP - Return true if the specified function should have a dedicated frame
501 // pointer register.  This is true if the function has variable sized allocas or
502 // if frame pointer elimination is disabled.
503 bool PPCFrameLowering::needsFP(const MachineFunction &MF) const {
504   const MachineFrameInfo &MFI = MF.getFrameInfo();
505 
506   // Naked functions have no stack frame pushed, so we don't have a frame
507   // pointer.
508   if (MF.getFunction()->hasFnAttribute(Attribute::Naked))
509     return false;
510 
511   return MF.getTarget().Options.DisableFramePointerElim(MF) ||
512     MFI.hasVarSizedObjects() || MFI.hasStackMap() || MFI.hasPatchPoint() ||
513     (MF.getTarget().Options.GuaranteedTailCallOpt &&
514      MF.getInfo<PPCFunctionInfo>()->hasFastCall());
515 }
516 
517 void PPCFrameLowering::replaceFPWithRealFP(MachineFunction &MF) const {
518   bool is31 = needsFP(MF);
519   unsigned FPReg  = is31 ? PPC::R31 : PPC::R1;
520   unsigned FP8Reg = is31 ? PPC::X31 : PPC::X1;
521 
522   const PPCRegisterInfo *RegInfo =
523       static_cast<const PPCRegisterInfo *>(Subtarget.getRegisterInfo());
524   bool HasBP = RegInfo->hasBasePointer(MF);
525   unsigned BPReg  = HasBP ? (unsigned) RegInfo->getBaseRegister(MF) : FPReg;
526   unsigned BP8Reg = HasBP ? (unsigned) PPC::X30 : FPReg;
527 
528   for (MachineFunction::iterator BI = MF.begin(), BE = MF.end();
529        BI != BE; ++BI)
530     for (MachineBasicBlock::iterator MBBI = BI->end(); MBBI != BI->begin(); ) {
531       --MBBI;
532       for (unsigned I = 0, E = MBBI->getNumOperands(); I != E; ++I) {
533         MachineOperand &MO = MBBI->getOperand(I);
534         if (!MO.isReg())
535           continue;
536 
537         switch (MO.getReg()) {
538         case PPC::FP:
539           MO.setReg(FPReg);
540           break;
541         case PPC::FP8:
542           MO.setReg(FP8Reg);
543           break;
544         case PPC::BP:
545           MO.setReg(BPReg);
546           break;
547         case PPC::BP8:
548           MO.setReg(BP8Reg);
549           break;
550 
551         }
552       }
553     }
554 }
555 
556 /*  This function will do the following:
557     - If MBB is an entry or exit block, set SR1 and SR2 to R0 and R12
558       respectively (defaults recommended by the ABI) and return true
559     - If MBB is not an entry block, initialize the register scavenger and look
560       for available registers.
561     - If the defaults (R0/R12) are available, return true
562     - If TwoUniqueRegsRequired is set to true, it looks for two unique
563       registers. Otherwise, look for a single available register.
564       - If the required registers are found, set SR1 and SR2 and return true.
565       - If the required registers are not found, set SR2 or both SR1 and SR2 to
566         PPC::NoRegister and return false.
567 
568     Note that if both SR1 and SR2 are valid parameters and TwoUniqueRegsRequired
569     is not set, this function will attempt to find two different registers, but
570     still return true if only one register is available (and set SR1 == SR2).
571 */
572 bool
573 PPCFrameLowering::findScratchRegister(MachineBasicBlock *MBB,
574                                       bool UseAtEnd,
575                                       bool TwoUniqueRegsRequired,
576                                       unsigned *SR1,
577                                       unsigned *SR2) const {
578   RegScavenger RS;
579   unsigned R0 =  Subtarget.isPPC64() ? PPC::X0 : PPC::R0;
580   unsigned R12 = Subtarget.isPPC64() ? PPC::X12 : PPC::R12;
581 
582   // Set the defaults for the two scratch registers.
583   if (SR1)
584     *SR1 = R0;
585 
586   if (SR2) {
587     assert (SR1 && "Asking for the second scratch register but not the first?");
588     *SR2 = R12;
589   }
590 
591   // If MBB is an entry or exit block, use R0 and R12 as the scratch registers.
592   if ((UseAtEnd && MBB->isReturnBlock()) ||
593       (!UseAtEnd && (&MBB->getParent()->front() == MBB)))
594     return true;
595 
596   RS.enterBasicBlock(*MBB);
597 
598   if (UseAtEnd && !MBB->empty()) {
599     // The scratch register will be used at the end of the block, so must
600     // consider all registers used within the block
601 
602     MachineBasicBlock::iterator MBBI = MBB->getFirstTerminator();
603     // If no terminator, back iterator up to previous instruction.
604     if (MBBI == MBB->end())
605       MBBI = std::prev(MBBI);
606 
607     if (MBBI != MBB->begin())
608       RS.forward(MBBI);
609   }
610 
611   // If the two registers are available, we're all good.
612   // Note that we only return here if both R0 and R12 are available because
613   // although the function may not require two unique registers, it may benefit
614   // from having two so we should try to provide them.
615   if (!RS.isRegUsed(R0) && !RS.isRegUsed(R12))
616     return true;
617 
618   // Get the list of callee-saved registers for the target.
619   const PPCRegisterInfo *RegInfo =
620       static_cast<const PPCRegisterInfo *>(Subtarget.getRegisterInfo());
621   const MCPhysReg *CSRegs = RegInfo->getCalleeSavedRegs(MBB->getParent());
622 
623   // Get all the available registers in the block.
624   BitVector BV = RS.getRegsAvailable(Subtarget.isPPC64() ? &PPC::G8RCRegClass :
625                                      &PPC::GPRCRegClass);
626 
627   // We shouldn't use callee-saved registers as scratch registers as they may be
628   // available when looking for a candidate block for shrink wrapping but not
629   // available when the actual prologue/epilogue is being emitted because they
630   // were added as live-in to the prologue block by PrologueEpilogueInserter.
631   for (int i = 0; CSRegs[i]; ++i)
632     BV.reset(CSRegs[i]);
633 
634   // Set the first scratch register to the first available one.
635   if (SR1) {
636     int FirstScratchReg = BV.find_first();
637     *SR1 = FirstScratchReg == -1 ? (unsigned)PPC::NoRegister : FirstScratchReg;
638   }
639 
640   // If there is another one available, set the second scratch register to that.
641   // Otherwise, set it to either PPC::NoRegister if this function requires two
642   // or to whatever SR1 is set to if this function doesn't require two.
643   if (SR2) {
644     int SecondScratchReg = BV.find_next(*SR1);
645     if (SecondScratchReg != -1)
646       *SR2 = SecondScratchReg;
647     else
648       *SR2 = TwoUniqueRegsRequired ? (unsigned)PPC::NoRegister : *SR1;
649   }
650 
651   // Now that we've done our best to provide both registers, double check
652   // whether we were unable to provide enough.
653   if (BV.count() < (TwoUniqueRegsRequired ? 2U : 1U))
654     return false;
655 
656   return true;
657 }
658 
659 // We need a scratch register for spilling LR and for spilling CR. By default,
660 // we use two scratch registers to hide latency. However, if only one scratch
661 // register is available, we can adjust for that by not overlapping the spill
662 // code. However, if we need to realign the stack (i.e. have a base pointer)
663 // and the stack frame is large, we need two scratch registers.
664 bool
665 PPCFrameLowering::twoUniqueScratchRegsRequired(MachineBasicBlock *MBB) const {
666   const PPCRegisterInfo *RegInfo =
667       static_cast<const PPCRegisterInfo *>(Subtarget.getRegisterInfo());
668   MachineFunction &MF = *(MBB->getParent());
669   bool HasBP = RegInfo->hasBasePointer(MF);
670   unsigned FrameSize = determineFrameLayout(MF, false);
671   int NegFrameSize = -FrameSize;
672   bool IsLargeFrame = !isInt<16>(NegFrameSize);
673   MachineFrameInfo &MFI = MF.getFrameInfo();
674   unsigned MaxAlign = MFI.getMaxAlignment();
675   bool HasRedZone = Subtarget.isPPC64() || !Subtarget.isSVR4ABI();
676 
677   return (IsLargeFrame || !HasRedZone) && HasBP && MaxAlign > 1;
678 }
679 
680 bool PPCFrameLowering::canUseAsPrologue(const MachineBasicBlock &MBB) const {
681   MachineBasicBlock *TmpMBB = const_cast<MachineBasicBlock *>(&MBB);
682 
683   return findScratchRegister(TmpMBB, false,
684                              twoUniqueScratchRegsRequired(TmpMBB));
685 }
686 
687 bool PPCFrameLowering::canUseAsEpilogue(const MachineBasicBlock &MBB) const {
688   MachineBasicBlock *TmpMBB = const_cast<MachineBasicBlock *>(&MBB);
689 
690   return findScratchRegister(TmpMBB, true);
691 }
692 
693 void PPCFrameLowering::emitPrologue(MachineFunction &MF,
694                                     MachineBasicBlock &MBB) const {
695   MachineBasicBlock::iterator MBBI = MBB.begin();
696   MachineFrameInfo &MFI = MF.getFrameInfo();
697   const PPCInstrInfo &TII =
698       *static_cast<const PPCInstrInfo *>(Subtarget.getInstrInfo());
699   const PPCRegisterInfo *RegInfo =
700       static_cast<const PPCRegisterInfo *>(Subtarget.getRegisterInfo());
701 
702   MachineModuleInfo &MMI = MF.getMMI();
703   const MCRegisterInfo *MRI = MMI.getContext().getRegisterInfo();
704   DebugLoc dl;
705   bool needsCFI = MMI.hasDebugInfo() ||
706     MF.getFunction()->needsUnwindTableEntry();
707 
708   // Get processor type.
709   bool isPPC64 = Subtarget.isPPC64();
710   // Get the ABI.
711   bool isSVR4ABI = Subtarget.isSVR4ABI();
712   bool isELFv2ABI = Subtarget.isELFv2ABI();
713   assert((Subtarget.isDarwinABI() || isSVR4ABI) &&
714          "Currently only Darwin and SVR4 ABIs are supported for PowerPC.");
715 
716   // Scan the prolog, looking for an UPDATE_VRSAVE instruction.  If we find it,
717   // process it.
718   if (!isSVR4ABI)
719     for (unsigned i = 0; MBBI != MBB.end(); ++i, ++MBBI) {
720       if (MBBI->getOpcode() == PPC::UPDATE_VRSAVE) {
721         HandleVRSaveUpdate(*MBBI, TII);
722         break;
723       }
724     }
725 
726   // Move MBBI back to the beginning of the prologue block.
727   MBBI = MBB.begin();
728 
729   // Work out frame sizes.
730   unsigned FrameSize = determineFrameLayout(MF);
731   int NegFrameSize = -FrameSize;
732   if (!isInt<32>(NegFrameSize))
733     llvm_unreachable("Unhandled stack size!");
734 
735   if (MFI.isFrameAddressTaken())
736     replaceFPWithRealFP(MF);
737 
738   // Check if the link register (LR) must be saved.
739   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
740   bool MustSaveLR = FI->mustSaveLR();
741   const SmallVectorImpl<unsigned> &MustSaveCRs = FI->getMustSaveCRs();
742   bool MustSaveCR = !MustSaveCRs.empty();
743   // Do we have a frame pointer and/or base pointer for this function?
744   bool HasFP = hasFP(MF);
745   bool HasBP = RegInfo->hasBasePointer(MF);
746   bool HasRedZone = isPPC64 || !isSVR4ABI;
747 
748   unsigned SPReg       = isPPC64 ? PPC::X1  : PPC::R1;
749   unsigned BPReg       = RegInfo->getBaseRegister(MF);
750   unsigned FPReg       = isPPC64 ? PPC::X31 : PPC::R31;
751   unsigned LRReg       = isPPC64 ? PPC::LR8 : PPC::LR;
752   unsigned ScratchReg  = 0;
753   unsigned TempReg     = isPPC64 ? PPC::X12 : PPC::R12; // another scratch reg
754   //  ...(R12/X12 is volatile in both Darwin & SVR4, & can't be a function arg.)
755   const MCInstrDesc& MFLRInst = TII.get(isPPC64 ? PPC::MFLR8
756                                                 : PPC::MFLR );
757   const MCInstrDesc& StoreInst = TII.get(isPPC64 ? PPC::STD
758                                                  : PPC::STW );
759   const MCInstrDesc& StoreUpdtInst = TII.get(isPPC64 ? PPC::STDU
760                                                      : PPC::STWU );
761   const MCInstrDesc& StoreUpdtIdxInst = TII.get(isPPC64 ? PPC::STDUX
762                                                         : PPC::STWUX);
763   const MCInstrDesc& LoadImmShiftedInst = TII.get(isPPC64 ? PPC::LIS8
764                                                           : PPC::LIS );
765   const MCInstrDesc& OrImmInst = TII.get(isPPC64 ? PPC::ORI8
766                                                  : PPC::ORI );
767   const MCInstrDesc& OrInst = TII.get(isPPC64 ? PPC::OR8
768                                               : PPC::OR );
769   const MCInstrDesc& SubtractCarryingInst = TII.get(isPPC64 ? PPC::SUBFC8
770                                                             : PPC::SUBFC);
771   const MCInstrDesc& SubtractImmCarryingInst = TII.get(isPPC64 ? PPC::SUBFIC8
772                                                                : PPC::SUBFIC);
773 
774   // Regarding this assert: Even though LR is saved in the caller's frame (i.e.,
775   // LROffset is positive), that slot is callee-owned. Because PPC32 SVR4 has no
776   // Red Zone, an asynchronous event (a form of "callee") could claim a frame &
777   // overwrite it, so PPC32 SVR4 must claim at least a minimal frame to save LR.
778   assert((isPPC64 || !isSVR4ABI || !(!FrameSize && (MustSaveLR || HasFP))) &&
779          "FrameSize must be >0 to save/restore the FP or LR for 32-bit SVR4.");
780 
781   // Using the same bool variable as below to supress compiler warnings.
782   bool SingleScratchReg =
783     findScratchRegister(&MBB, false, twoUniqueScratchRegsRequired(&MBB),
784                         &ScratchReg, &TempReg);
785   assert(SingleScratchReg &&
786          "Required number of registers not available in this block");
787 
788   SingleScratchReg = ScratchReg == TempReg;
789 
790   int LROffset = getReturnSaveOffset();
791 
792   int FPOffset = 0;
793   if (HasFP) {
794     if (isSVR4ABI) {
795       MachineFrameInfo &MFI = MF.getFrameInfo();
796       int FPIndex = FI->getFramePointerSaveIndex();
797       assert(FPIndex && "No Frame Pointer Save Slot!");
798       FPOffset = MFI.getObjectOffset(FPIndex);
799     } else {
800       FPOffset = getFramePointerSaveOffset();
801     }
802   }
803 
804   int BPOffset = 0;
805   if (HasBP) {
806     if (isSVR4ABI) {
807       MachineFrameInfo &MFI = MF.getFrameInfo();
808       int BPIndex = FI->getBasePointerSaveIndex();
809       assert(BPIndex && "No Base Pointer Save Slot!");
810       BPOffset = MFI.getObjectOffset(BPIndex);
811     } else {
812       BPOffset = getBasePointerSaveOffset();
813     }
814   }
815 
816   int PBPOffset = 0;
817   if (FI->usesPICBase()) {
818     MachineFrameInfo &MFI = MF.getFrameInfo();
819     int PBPIndex = FI->getPICBasePointerSaveIndex();
820     assert(PBPIndex && "No PIC Base Pointer Save Slot!");
821     PBPOffset = MFI.getObjectOffset(PBPIndex);
822   }
823 
824   // Get stack alignments.
825   unsigned MaxAlign = MFI.getMaxAlignment();
826   if (HasBP && MaxAlign > 1)
827     assert(isPowerOf2_32(MaxAlign) && isInt<16>(MaxAlign) &&
828            "Invalid alignment!");
829 
830   // Frames of 32KB & larger require special handling because they cannot be
831   // indexed into with a simple STDU/STWU/STD/STW immediate offset operand.
832   bool isLargeFrame = !isInt<16>(NegFrameSize);
833 
834   assert((isPPC64 || !MustSaveCR) &&
835          "Prologue CR saving supported only in 64-bit mode");
836 
837   // If we need to spill the CR and the LR but we don't have two separate
838   // registers available, we must spill them one at a time
839   if (MustSaveCR && SingleScratchReg && MustSaveLR) {
840     // In the ELFv2 ABI, we are not required to save all CR fields.
841     // If only one or two CR fields are clobbered, it is more efficient to use
842     // mfocrf to selectively save just those fields, because mfocrf has short
843     // latency compares to mfcr.
844     unsigned MfcrOpcode = PPC::MFCR8;
845     unsigned CrState = RegState::ImplicitKill;
846     if (isELFv2ABI && MustSaveCRs.size() == 1) {
847       MfcrOpcode = PPC::MFOCRF8;
848       CrState = RegState::Kill;
849     }
850     MachineInstrBuilder MIB =
851       BuildMI(MBB, MBBI, dl, TII.get(MfcrOpcode), TempReg);
852     for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i)
853       MIB.addReg(MustSaveCRs[i], CrState);
854     BuildMI(MBB, MBBI, dl, TII.get(PPC::STW8))
855       .addReg(TempReg, getKillRegState(true))
856       .addImm(8)
857       .addReg(SPReg);
858   }
859 
860   if (MustSaveLR)
861     BuildMI(MBB, MBBI, dl, MFLRInst, ScratchReg);
862 
863   if (MustSaveCR &&
864       !(SingleScratchReg && MustSaveLR)) { // will only occur for PPC64
865     // In the ELFv2 ABI, we are not required to save all CR fields.
866     // If only one or two CR fields are clobbered, it is more efficient to use
867     // mfocrf to selectively save just those fields, because mfocrf has short
868     // latency compares to mfcr.
869     unsigned MfcrOpcode = PPC::MFCR8;
870     unsigned CrState = RegState::ImplicitKill;
871     if (isELFv2ABI && MustSaveCRs.size() == 1) {
872       MfcrOpcode = PPC::MFOCRF8;
873       CrState = RegState::Kill;
874     }
875     MachineInstrBuilder MIB =
876       BuildMI(MBB, MBBI, dl, TII.get(MfcrOpcode), TempReg);
877     for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i)
878       MIB.addReg(MustSaveCRs[i], CrState);
879   }
880 
881   if (HasRedZone) {
882     if (HasFP)
883       BuildMI(MBB, MBBI, dl, StoreInst)
884         .addReg(FPReg)
885         .addImm(FPOffset)
886         .addReg(SPReg);
887     if (FI->usesPICBase())
888       BuildMI(MBB, MBBI, dl, StoreInst)
889         .addReg(PPC::R30)
890         .addImm(PBPOffset)
891         .addReg(SPReg);
892     if (HasBP)
893       BuildMI(MBB, MBBI, dl, StoreInst)
894         .addReg(BPReg)
895         .addImm(BPOffset)
896         .addReg(SPReg);
897   }
898 
899   if (MustSaveLR)
900     BuildMI(MBB, MBBI, dl, StoreInst)
901       .addReg(ScratchReg, getKillRegState(true))
902       .addImm(LROffset)
903       .addReg(SPReg);
904 
905   if (MustSaveCR &&
906       !(SingleScratchReg && MustSaveLR)) { // will only occur for PPC64
907     assert(HasRedZone && "A red zone is always available on PPC64");
908     BuildMI(MBB, MBBI, dl, TII.get(PPC::STW8))
909       .addReg(TempReg, getKillRegState(true))
910       .addImm(8)
911       .addReg(SPReg);
912   }
913 
914   // Skip the rest if this is a leaf function & all spills fit in the Red Zone.
915   if (!FrameSize)
916     return;
917 
918   // Adjust stack pointer: r1 += NegFrameSize.
919   // If there is a preferred stack alignment, align R1 now
920 
921   if (HasBP && HasRedZone) {
922     // Save a copy of r1 as the base pointer.
923     BuildMI(MBB, MBBI, dl, OrInst, BPReg)
924       .addReg(SPReg)
925       .addReg(SPReg);
926   }
927 
928   // Have we generated a STUX instruction to claim stack frame? If so,
929   // the frame size will be placed in ScratchReg.
930   bool HasSTUX = false;
931 
932   // This condition must be kept in sync with canUseAsPrologue.
933   if (HasBP && MaxAlign > 1) {
934     if (isPPC64)
935       BuildMI(MBB, MBBI, dl, TII.get(PPC::RLDICL), ScratchReg)
936         .addReg(SPReg)
937         .addImm(0)
938         .addImm(64 - Log2_32(MaxAlign));
939     else // PPC32...
940       BuildMI(MBB, MBBI, dl, TII.get(PPC::RLWINM), ScratchReg)
941         .addReg(SPReg)
942         .addImm(0)
943         .addImm(32 - Log2_32(MaxAlign))
944         .addImm(31);
945     if (!isLargeFrame) {
946       BuildMI(MBB, MBBI, dl, SubtractImmCarryingInst, ScratchReg)
947         .addReg(ScratchReg, RegState::Kill)
948         .addImm(NegFrameSize);
949     } else {
950       assert(!SingleScratchReg && "Only a single scratch reg available");
951       BuildMI(MBB, MBBI, dl, LoadImmShiftedInst, TempReg)
952         .addImm(NegFrameSize >> 16);
953       BuildMI(MBB, MBBI, dl, OrImmInst, TempReg)
954         .addReg(TempReg, RegState::Kill)
955         .addImm(NegFrameSize & 0xFFFF);
956       BuildMI(MBB, MBBI, dl, SubtractCarryingInst, ScratchReg)
957         .addReg(ScratchReg, RegState::Kill)
958         .addReg(TempReg, RegState::Kill);
959     }
960 
961     BuildMI(MBB, MBBI, dl, StoreUpdtIdxInst, SPReg)
962       .addReg(SPReg, RegState::Kill)
963       .addReg(SPReg)
964       .addReg(ScratchReg);
965     HasSTUX = true;
966 
967   } else if (!isLargeFrame) {
968     BuildMI(MBB, MBBI, dl, StoreUpdtInst, SPReg)
969       .addReg(SPReg)
970       .addImm(NegFrameSize)
971       .addReg(SPReg);
972 
973   } else {
974     BuildMI(MBB, MBBI, dl, LoadImmShiftedInst, ScratchReg)
975       .addImm(NegFrameSize >> 16);
976     BuildMI(MBB, MBBI, dl, OrImmInst, ScratchReg)
977       .addReg(ScratchReg, RegState::Kill)
978       .addImm(NegFrameSize & 0xFFFF);
979     BuildMI(MBB, MBBI, dl, StoreUpdtIdxInst, SPReg)
980       .addReg(SPReg, RegState::Kill)
981       .addReg(SPReg)
982       .addReg(ScratchReg);
983     HasSTUX = true;
984   }
985 
986   if (!HasRedZone) {
987     assert(!isPPC64 && "A red zone is always available on PPC64");
988     if (HasSTUX) {
989       // The frame size is in ScratchReg, and the SPReg has been advanced
990       // (downwards) by the frame size: SPReg = old SPReg + ScratchReg.
991       // Set ScratchReg to the original SPReg: ScratchReg = SPReg - ScratchReg.
992       BuildMI(MBB, MBBI, dl, TII.get(PPC::SUBF), ScratchReg)
993         .addReg(ScratchReg, RegState::Kill)
994         .addReg(SPReg);
995 
996       // Now that the stack frame has been allocated, save all the necessary
997       // registers using ScratchReg as the base address.
998       if (HasFP)
999         BuildMI(MBB, MBBI, dl, StoreInst)
1000           .addReg(FPReg)
1001           .addImm(FPOffset)
1002           .addReg(ScratchReg);
1003       if (FI->usesPICBase())
1004         BuildMI(MBB, MBBI, dl, StoreInst)
1005           .addReg(PPC::R30)
1006           .addImm(PBPOffset)
1007           .addReg(ScratchReg);
1008       if (HasBP) {
1009         BuildMI(MBB, MBBI, dl, StoreInst)
1010           .addReg(BPReg)
1011           .addImm(BPOffset)
1012           .addReg(ScratchReg);
1013         BuildMI(MBB, MBBI, dl, OrInst, BPReg)
1014           .addReg(ScratchReg, RegState::Kill)
1015           .addReg(ScratchReg);
1016       }
1017     } else {
1018       // The frame size is a known 16-bit constant (fitting in the immediate
1019       // field of STWU). To be here we have to be compiling for PPC32.
1020       // Since the SPReg has been decreased by FrameSize, add it back to each
1021       // offset.
1022       if (HasFP)
1023         BuildMI(MBB, MBBI, dl, StoreInst)
1024           .addReg(FPReg)
1025           .addImm(FrameSize + FPOffset)
1026           .addReg(SPReg);
1027       if (FI->usesPICBase())
1028         BuildMI(MBB, MBBI, dl, StoreInst)
1029           .addReg(PPC::R30)
1030           .addImm(FrameSize + PBPOffset)
1031           .addReg(SPReg);
1032       if (HasBP) {
1033         BuildMI(MBB, MBBI, dl, StoreInst)
1034           .addReg(BPReg)
1035           .addImm(FrameSize + BPOffset)
1036           .addReg(SPReg);
1037         BuildMI(MBB, MBBI, dl, TII.get(PPC::ADDI), BPReg)
1038           .addReg(SPReg)
1039           .addImm(FrameSize);
1040       }
1041     }
1042   }
1043 
1044   // Add Call Frame Information for the instructions we generated above.
1045   if (needsCFI) {
1046     unsigned CFIIndex;
1047 
1048     if (HasBP) {
1049       // Define CFA in terms of BP. Do this in preference to using FP/SP,
1050       // because if the stack needed aligning then CFA won't be at a fixed
1051       // offset from FP/SP.
1052       unsigned Reg = MRI->getDwarfRegNum(BPReg, true);
1053       CFIIndex = MMI.addFrameInst(
1054           MCCFIInstruction::createDefCfaRegister(nullptr, Reg));
1055     } else {
1056       // Adjust the definition of CFA to account for the change in SP.
1057       assert(NegFrameSize);
1058       CFIIndex = MMI.addFrameInst(
1059           MCCFIInstruction::createDefCfaOffset(nullptr, NegFrameSize));
1060     }
1061     BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1062         .addCFIIndex(CFIIndex);
1063 
1064     if (HasFP) {
1065       // Describe where FP was saved, at a fixed offset from CFA.
1066       unsigned Reg = MRI->getDwarfRegNum(FPReg, true);
1067       CFIIndex = MMI.addFrameInst(
1068           MCCFIInstruction::createOffset(nullptr, Reg, FPOffset));
1069       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1070           .addCFIIndex(CFIIndex);
1071     }
1072 
1073     if (FI->usesPICBase()) {
1074       // Describe where FP was saved, at a fixed offset from CFA.
1075       unsigned Reg = MRI->getDwarfRegNum(PPC::R30, true);
1076       CFIIndex = MMI.addFrameInst(
1077           MCCFIInstruction::createOffset(nullptr, Reg, PBPOffset));
1078       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1079           .addCFIIndex(CFIIndex);
1080     }
1081 
1082     if (HasBP) {
1083       // Describe where BP was saved, at a fixed offset from CFA.
1084       unsigned Reg = MRI->getDwarfRegNum(BPReg, true);
1085       CFIIndex = MMI.addFrameInst(
1086           MCCFIInstruction::createOffset(nullptr, Reg, BPOffset));
1087       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1088           .addCFIIndex(CFIIndex);
1089     }
1090 
1091     if (MustSaveLR) {
1092       // Describe where LR was saved, at a fixed offset from CFA.
1093       unsigned Reg = MRI->getDwarfRegNum(LRReg, true);
1094       CFIIndex = MMI.addFrameInst(
1095           MCCFIInstruction::createOffset(nullptr, Reg, LROffset));
1096       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1097           .addCFIIndex(CFIIndex);
1098     }
1099   }
1100 
1101   // If there is a frame pointer, copy R1 into R31
1102   if (HasFP) {
1103     BuildMI(MBB, MBBI, dl, OrInst, FPReg)
1104       .addReg(SPReg)
1105       .addReg(SPReg);
1106 
1107     if (!HasBP && needsCFI) {
1108       // Change the definition of CFA from SP+offset to FP+offset, because SP
1109       // will change at every alloca.
1110       unsigned Reg = MRI->getDwarfRegNum(FPReg, true);
1111       unsigned CFIIndex = MMI.addFrameInst(
1112           MCCFIInstruction::createDefCfaRegister(nullptr, Reg));
1113 
1114       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1115           .addCFIIndex(CFIIndex);
1116     }
1117   }
1118 
1119   if (needsCFI) {
1120     // Describe where callee saved registers were saved, at fixed offsets from
1121     // CFA.
1122     const std::vector<CalleeSavedInfo> &CSI = MFI.getCalleeSavedInfo();
1123     for (unsigned I = 0, E = CSI.size(); I != E; ++I) {
1124       unsigned Reg = CSI[I].getReg();
1125       if (Reg == PPC::LR || Reg == PPC::LR8 || Reg == PPC::RM) continue;
1126 
1127       // This is a bit of a hack: CR2LT, CR2GT, CR2EQ and CR2UN are just
1128       // subregisters of CR2. We just need to emit a move of CR2.
1129       if (PPC::CRBITRCRegClass.contains(Reg))
1130         continue;
1131 
1132       // For SVR4, don't emit a move for the CR spill slot if we haven't
1133       // spilled CRs.
1134       if (isSVR4ABI && (PPC::CR2 <= Reg && Reg <= PPC::CR4)
1135           && !MustSaveCR)
1136         continue;
1137 
1138       // For 64-bit SVR4 when we have spilled CRs, the spill location
1139       // is SP+8, not a frame-relative slot.
1140       if (isSVR4ABI && isPPC64 && (PPC::CR2 <= Reg && Reg <= PPC::CR4)) {
1141         // In the ELFv1 ABI, only CR2 is noted in CFI and stands in for
1142         // the whole CR word.  In the ELFv2 ABI, every CR that was
1143         // actually saved gets its own CFI record.
1144         unsigned CRReg = isELFv2ABI? Reg : (unsigned) PPC::CR2;
1145         unsigned CFIIndex = MMI.addFrameInst(MCCFIInstruction::createOffset(
1146             nullptr, MRI->getDwarfRegNum(CRReg, true), 8));
1147         BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1148             .addCFIIndex(CFIIndex);
1149         continue;
1150       }
1151 
1152       int Offset = MFI.getObjectOffset(CSI[I].getFrameIdx());
1153       unsigned CFIIndex = MMI.addFrameInst(MCCFIInstruction::createOffset(
1154           nullptr, MRI->getDwarfRegNum(Reg, true), Offset));
1155       BuildMI(MBB, MBBI, dl, TII.get(TargetOpcode::CFI_INSTRUCTION))
1156           .addCFIIndex(CFIIndex);
1157     }
1158   }
1159 }
1160 
1161 void PPCFrameLowering::emitEpilogue(MachineFunction &MF,
1162                                     MachineBasicBlock &MBB) const {
1163   MachineBasicBlock::iterator MBBI = MBB.getFirstTerminator();
1164   DebugLoc dl;
1165 
1166   if (MBBI != MBB.end())
1167     dl = MBBI->getDebugLoc();
1168 
1169   const PPCInstrInfo &TII =
1170       *static_cast<const PPCInstrInfo *>(Subtarget.getInstrInfo());
1171   const PPCRegisterInfo *RegInfo =
1172       static_cast<const PPCRegisterInfo *>(Subtarget.getRegisterInfo());
1173 
1174   // Get alignment info so we know how to restore the SP.
1175   const MachineFrameInfo &MFI = MF.getFrameInfo();
1176 
1177   // Get the number of bytes allocated from the FrameInfo.
1178   int FrameSize = MFI.getStackSize();
1179 
1180   // Get processor type.
1181   bool isPPC64 = Subtarget.isPPC64();
1182   // Get the ABI.
1183   bool isSVR4ABI = Subtarget.isSVR4ABI();
1184 
1185   // Check if the link register (LR) has been saved.
1186   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
1187   bool MustSaveLR = FI->mustSaveLR();
1188   const SmallVectorImpl<unsigned> &MustSaveCRs = FI->getMustSaveCRs();
1189   bool MustSaveCR = !MustSaveCRs.empty();
1190   // Do we have a frame pointer and/or base pointer for this function?
1191   bool HasFP = hasFP(MF);
1192   bool HasBP = RegInfo->hasBasePointer(MF);
1193 
1194   unsigned SPReg      = isPPC64 ? PPC::X1  : PPC::R1;
1195   unsigned BPReg      = RegInfo->getBaseRegister(MF);
1196   unsigned FPReg      = isPPC64 ? PPC::X31 : PPC::R31;
1197   unsigned ScratchReg = 0;
1198   unsigned TempReg     = isPPC64 ? PPC::X12 : PPC::R12; // another scratch reg
1199   const MCInstrDesc& MTLRInst = TII.get( isPPC64 ? PPC::MTLR8
1200                                                  : PPC::MTLR );
1201   const MCInstrDesc& LoadInst = TII.get( isPPC64 ? PPC::LD
1202                                                  : PPC::LWZ );
1203   const MCInstrDesc& LoadImmShiftedInst = TII.get( isPPC64 ? PPC::LIS8
1204                                                            : PPC::LIS );
1205   const MCInstrDesc& OrImmInst = TII.get( isPPC64 ? PPC::ORI8
1206                                                   : PPC::ORI );
1207   const MCInstrDesc& AddImmInst = TII.get( isPPC64 ? PPC::ADDI8
1208                                                    : PPC::ADDI );
1209   const MCInstrDesc& AddInst = TII.get( isPPC64 ? PPC::ADD8
1210                                                 : PPC::ADD4 );
1211 
1212   int LROffset = getReturnSaveOffset();
1213 
1214   int FPOffset = 0;
1215 
1216   // Using the same bool variable as below to supress compiler warnings.
1217   bool SingleScratchReg = findScratchRegister(&MBB, true, false, &ScratchReg,
1218                                               &TempReg);
1219   assert(SingleScratchReg &&
1220          "Could not find an available scratch register");
1221 
1222   SingleScratchReg = ScratchReg == TempReg;
1223 
1224   if (HasFP) {
1225     if (isSVR4ABI) {
1226       MachineFrameInfo &MFI = MF.getFrameInfo();
1227       int FPIndex = FI->getFramePointerSaveIndex();
1228       assert(FPIndex && "No Frame Pointer Save Slot!");
1229       FPOffset = MFI.getObjectOffset(FPIndex);
1230     } else {
1231       FPOffset = getFramePointerSaveOffset();
1232     }
1233   }
1234 
1235   int BPOffset = 0;
1236   if (HasBP) {
1237     if (isSVR4ABI) {
1238       MachineFrameInfo &MFI = MF.getFrameInfo();
1239       int BPIndex = FI->getBasePointerSaveIndex();
1240       assert(BPIndex && "No Base Pointer Save Slot!");
1241       BPOffset = MFI.getObjectOffset(BPIndex);
1242     } else {
1243       BPOffset = getBasePointerSaveOffset();
1244     }
1245   }
1246 
1247   int PBPOffset = 0;
1248   if (FI->usesPICBase()) {
1249     MachineFrameInfo &MFI = MF.getFrameInfo();
1250     int PBPIndex = FI->getPICBasePointerSaveIndex();
1251     assert(PBPIndex && "No PIC Base Pointer Save Slot!");
1252     PBPOffset = MFI.getObjectOffset(PBPIndex);
1253   }
1254 
1255   bool IsReturnBlock = (MBBI != MBB.end() && MBBI->isReturn());
1256 
1257   if (IsReturnBlock) {
1258     unsigned RetOpcode = MBBI->getOpcode();
1259     bool UsesTCRet =  RetOpcode == PPC::TCRETURNri ||
1260                       RetOpcode == PPC::TCRETURNdi ||
1261                       RetOpcode == PPC::TCRETURNai ||
1262                       RetOpcode == PPC::TCRETURNri8 ||
1263                       RetOpcode == PPC::TCRETURNdi8 ||
1264                       RetOpcode == PPC::TCRETURNai8;
1265 
1266     if (UsesTCRet) {
1267       int MaxTCRetDelta = FI->getTailCallSPDelta();
1268       MachineOperand &StackAdjust = MBBI->getOperand(1);
1269       assert(StackAdjust.isImm() && "Expecting immediate value.");
1270       // Adjust stack pointer.
1271       int StackAdj = StackAdjust.getImm();
1272       int Delta = StackAdj - MaxTCRetDelta;
1273       assert((Delta >= 0) && "Delta must be positive");
1274       if (MaxTCRetDelta>0)
1275         FrameSize += (StackAdj +Delta);
1276       else
1277         FrameSize += StackAdj;
1278     }
1279   }
1280 
1281   // Frames of 32KB & larger require special handling because they cannot be
1282   // indexed into with a simple LD/LWZ immediate offset operand.
1283   bool isLargeFrame = !isInt<16>(FrameSize);
1284 
1285   if (FrameSize) {
1286     // In the prologue, the loaded (or persistent) stack pointer value is offset
1287     // by the STDU/STDUX/STWU/STWUX instruction.  Add this offset back now.
1288 
1289     // If this function contained a fastcc call and GuaranteedTailCallOpt is
1290     // enabled (=> hasFastCall()==true) the fastcc call might contain a tail
1291     // call which invalidates the stack pointer value in SP(0). So we use the
1292     // value of R31 in this case.
1293     if (FI->hasFastCall()) {
1294       assert(HasFP && "Expecting a valid frame pointer.");
1295       if (!isLargeFrame) {
1296         BuildMI(MBB, MBBI, dl, AddImmInst, SPReg)
1297           .addReg(FPReg).addImm(FrameSize);
1298       } else {
1299         BuildMI(MBB, MBBI, dl, LoadImmShiftedInst, ScratchReg)
1300           .addImm(FrameSize >> 16);
1301         BuildMI(MBB, MBBI, dl, OrImmInst, ScratchReg)
1302           .addReg(ScratchReg, RegState::Kill)
1303           .addImm(FrameSize & 0xFFFF);
1304         BuildMI(MBB, MBBI, dl, AddInst)
1305           .addReg(SPReg)
1306           .addReg(FPReg)
1307           .addReg(ScratchReg);
1308       }
1309     } else if (!isLargeFrame && !HasBP && !MFI.hasVarSizedObjects()) {
1310       BuildMI(MBB, MBBI, dl, AddImmInst, SPReg)
1311         .addReg(SPReg)
1312         .addImm(FrameSize);
1313     } else {
1314       BuildMI(MBB, MBBI, dl, LoadInst, SPReg)
1315         .addImm(0)
1316         .addReg(SPReg);
1317     }
1318   }
1319 
1320   assert((isPPC64 || !MustSaveCR) &&
1321          "Epilogue CR restoring supported only in 64-bit mode");
1322 
1323   // If we need to save both the LR and the CR and we only have one available
1324   // scratch register, we must do them one at a time.
1325   if (MustSaveCR && SingleScratchReg && MustSaveLR) {
1326     BuildMI(MBB, MBBI, dl, TII.get(PPC::LWZ8), TempReg)
1327       .addImm(8)
1328       .addReg(SPReg);
1329     for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i)
1330       BuildMI(MBB, MBBI, dl, TII.get(PPC::MTOCRF8), MustSaveCRs[i])
1331         .addReg(TempReg, getKillRegState(i == e-1));
1332   }
1333 
1334   if (MustSaveLR)
1335     BuildMI(MBB, MBBI, dl, LoadInst, ScratchReg)
1336       .addImm(LROffset)
1337       .addReg(SPReg);
1338 
1339   if (MustSaveCR &&
1340       !(SingleScratchReg && MustSaveLR)) // will only occur for PPC64
1341     BuildMI(MBB, MBBI, dl, TII.get(PPC::LWZ8), TempReg)
1342       .addImm(8)
1343       .addReg(SPReg);
1344 
1345   if (HasFP)
1346     BuildMI(MBB, MBBI, dl, LoadInst, FPReg)
1347       .addImm(FPOffset)
1348       .addReg(SPReg);
1349 
1350   if (FI->usesPICBase())
1351     // FIXME: On PPC32 SVR4, we must not spill before claiming the stackframe.
1352     BuildMI(MBB, MBBI, dl, LoadInst)
1353       .addReg(PPC::R30)
1354       .addImm(PBPOffset)
1355       .addReg(SPReg);
1356 
1357   if (HasBP)
1358     BuildMI(MBB, MBBI, dl, LoadInst, BPReg)
1359       .addImm(BPOffset)
1360       .addReg(SPReg);
1361 
1362   if (MustSaveCR &&
1363       !(SingleScratchReg && MustSaveLR)) // will only occur for PPC64
1364     for (unsigned i = 0, e = MustSaveCRs.size(); i != e; ++i)
1365       BuildMI(MBB, MBBI, dl, TII.get(PPC::MTOCRF8), MustSaveCRs[i])
1366         .addReg(TempReg, getKillRegState(i == e-1));
1367 
1368   if (MustSaveLR)
1369     BuildMI(MBB, MBBI, dl, MTLRInst).addReg(ScratchReg);
1370 
1371   // Callee pop calling convention. Pop parameter/linkage area. Used for tail
1372   // call optimization
1373   if (IsReturnBlock) {
1374     unsigned RetOpcode = MBBI->getOpcode();
1375     if (MF.getTarget().Options.GuaranteedTailCallOpt &&
1376         (RetOpcode == PPC::BLR || RetOpcode == PPC::BLR8) &&
1377         MF.getFunction()->getCallingConv() == CallingConv::Fast) {
1378       PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
1379       unsigned CallerAllocatedAmt = FI->getMinReservedArea();
1380 
1381       if (CallerAllocatedAmt && isInt<16>(CallerAllocatedAmt)) {
1382         BuildMI(MBB, MBBI, dl, AddImmInst, SPReg)
1383           .addReg(SPReg).addImm(CallerAllocatedAmt);
1384       } else {
1385         BuildMI(MBB, MBBI, dl, LoadImmShiftedInst, ScratchReg)
1386           .addImm(CallerAllocatedAmt >> 16);
1387         BuildMI(MBB, MBBI, dl, OrImmInst, ScratchReg)
1388           .addReg(ScratchReg, RegState::Kill)
1389           .addImm(CallerAllocatedAmt & 0xFFFF);
1390         BuildMI(MBB, MBBI, dl, AddInst)
1391           .addReg(SPReg)
1392           .addReg(FPReg)
1393           .addReg(ScratchReg);
1394       }
1395     } else {
1396       createTailCallBranchInstr(MBB);
1397     }
1398   }
1399 }
1400 
1401 void PPCFrameLowering::createTailCallBranchInstr(MachineBasicBlock &MBB) const {
1402   MachineBasicBlock::iterator MBBI = MBB.getFirstTerminator();
1403   DebugLoc dl;
1404 
1405   if (MBBI != MBB.end())
1406     dl = MBBI->getDebugLoc();
1407 
1408   const PPCInstrInfo &TII =
1409       *static_cast<const PPCInstrInfo *>(Subtarget.getInstrInfo());
1410 
1411   // Create branch instruction for pseudo tail call return instruction
1412   unsigned RetOpcode = MBBI->getOpcode();
1413   if (RetOpcode == PPC::TCRETURNdi) {
1414     MBBI = MBB.getLastNonDebugInstr();
1415     MachineOperand &JumpTarget = MBBI->getOperand(0);
1416     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILB)).
1417       addGlobalAddress(JumpTarget.getGlobal(), JumpTarget.getOffset());
1418   } else if (RetOpcode == PPC::TCRETURNri) {
1419     MBBI = MBB.getLastNonDebugInstr();
1420     assert(MBBI->getOperand(0).isReg() && "Expecting register operand.");
1421     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILBCTR));
1422   } else if (RetOpcode == PPC::TCRETURNai) {
1423     MBBI = MBB.getLastNonDebugInstr();
1424     MachineOperand &JumpTarget = MBBI->getOperand(0);
1425     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILBA)).addImm(JumpTarget.getImm());
1426   } else if (RetOpcode == PPC::TCRETURNdi8) {
1427     MBBI = MBB.getLastNonDebugInstr();
1428     MachineOperand &JumpTarget = MBBI->getOperand(0);
1429     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILB8)).
1430       addGlobalAddress(JumpTarget.getGlobal(), JumpTarget.getOffset());
1431   } else if (RetOpcode == PPC::TCRETURNri8) {
1432     MBBI = MBB.getLastNonDebugInstr();
1433     assert(MBBI->getOperand(0).isReg() && "Expecting register operand.");
1434     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILBCTR8));
1435   } else if (RetOpcode == PPC::TCRETURNai8) {
1436     MBBI = MBB.getLastNonDebugInstr();
1437     MachineOperand &JumpTarget = MBBI->getOperand(0);
1438     BuildMI(MBB, MBBI, dl, TII.get(PPC::TAILBA8)).addImm(JumpTarget.getImm());
1439   }
1440 }
1441 
1442 void PPCFrameLowering::determineCalleeSaves(MachineFunction &MF,
1443                                             BitVector &SavedRegs,
1444                                             RegScavenger *RS) const {
1445   TargetFrameLowering::determineCalleeSaves(MF, SavedRegs, RS);
1446 
1447   const PPCRegisterInfo *RegInfo =
1448       static_cast<const PPCRegisterInfo *>(Subtarget.getRegisterInfo());
1449 
1450   //  Save and clear the LR state.
1451   PPCFunctionInfo *FI = MF.getInfo<PPCFunctionInfo>();
1452   unsigned LR = RegInfo->getRARegister();
1453   FI->setMustSaveLR(MustSaveLR(MF, LR));
1454   SavedRegs.reset(LR);
1455 
1456   //  Save R31 if necessary
1457   int FPSI = FI->getFramePointerSaveIndex();
1458   bool isPPC64 = Subtarget.isPPC64();
1459   bool isDarwinABI  = Subtarget.isDarwinABI();
1460   MachineFrameInfo &MFI = MF.getFrameInfo();
1461 
1462   // If the frame pointer save index hasn't been defined yet.
1463   if (!FPSI && needsFP(MF)) {
1464     // Find out what the fix offset of the frame pointer save area.
1465     int FPOffset = getFramePointerSaveOffset();
1466     // Allocate the frame index for frame pointer save area.
1467     FPSI = MFI.CreateFixedObject(isPPC64? 8 : 4, FPOffset, true);
1468     // Save the result.
1469     FI->setFramePointerSaveIndex(FPSI);
1470   }
1471 
1472   int BPSI = FI->getBasePointerSaveIndex();
1473   if (!BPSI && RegInfo->hasBasePointer(MF)) {
1474     int BPOffset = getBasePointerSaveOffset();
1475     // Allocate the frame index for the base pointer save area.
1476     BPSI = MFI.CreateFixedObject(isPPC64? 8 : 4, BPOffset, true);
1477     // Save the result.
1478     FI->setBasePointerSaveIndex(BPSI);
1479   }
1480 
1481   // Reserve stack space for the PIC Base register (R30).
1482   // Only used in SVR4 32-bit.
1483   if (FI->usesPICBase()) {
1484     int PBPSI = MFI.CreateFixedObject(4, -8, true);
1485     FI->setPICBasePointerSaveIndex(PBPSI);
1486   }
1487 
1488   // Make sure we don't explicitly spill r31, because, for example, we have
1489   // some inline asm which explicity clobbers it, when we otherwise have a
1490   // frame pointer and are using r31's spill slot for the prologue/epilogue
1491   // code. Same goes for the base pointer and the PIC base register.
1492   if (needsFP(MF))
1493     SavedRegs.reset(isPPC64 ? PPC::X31 : PPC::R31);
1494   if (RegInfo->hasBasePointer(MF))
1495     SavedRegs.reset(RegInfo->getBaseRegister(MF));
1496   if (FI->usesPICBase())
1497     SavedRegs.reset(PPC::R30);
1498 
1499   // Reserve stack space to move the linkage area to in case of a tail call.
1500   int TCSPDelta = 0;
1501   if (MF.getTarget().Options.GuaranteedTailCallOpt &&
1502       (TCSPDelta = FI->getTailCallSPDelta()) < 0) {
1503     MFI.CreateFixedObject(-1 * TCSPDelta, TCSPDelta, true);
1504   }
1505 
1506   // For 32-bit SVR4, allocate the nonvolatile CR spill slot iff the
1507   // function uses CR 2, 3, or 4.
1508   if (!isPPC64 && !isDarwinABI &&
1509       (SavedRegs.test(PPC::CR2) ||
1510        SavedRegs.test(PPC::CR3) ||
1511        SavedRegs.test(PPC::CR4))) {
1512     int FrameIdx = MFI.CreateFixedObject((uint64_t)4, (int64_t)-4, true);
1513     FI->setCRSpillFrameIndex(FrameIdx);
1514   }
1515 }
1516 
1517 void PPCFrameLowering::processFunctionBeforeFrameFinalized(MachineFunction &MF,
1518                                                        RegScavenger *RS) const {
1519   // Early exit if not using the SVR4 ABI.
1520   if (!Subtarget.isSVR4ABI()) {
1521     addScavengingSpillSlot(MF, RS);
1522     return;
1523   }
1524 
1525   // Get callee saved register information.
1526   MachineFrameInfo &MFI = MF.getFrameInfo();
1527   const std::vector<CalleeSavedInfo> &CSI = MFI.getCalleeSavedInfo();
1528 
1529   // If the function is shrink-wrapped, and if the function has a tail call, the
1530   // tail call might not be in the new RestoreBlock, so real branch instruction
1531   // won't be generated by emitEpilogue(), because shrink-wrap has chosen new
1532   // RestoreBlock. So we handle this case here.
1533   if (MFI.getSavePoint() && MFI.hasTailCall()) {
1534     MachineBasicBlock *RestoreBlock = MFI.getRestorePoint();
1535     for (MachineBasicBlock &MBB : MF) {
1536       if (MBB.isReturnBlock() && (&MBB) != RestoreBlock)
1537         createTailCallBranchInstr(MBB);
1538     }
1539   }
1540 
1541   // Early exit if no callee saved registers are modified!
1542   if (CSI.empty() && !needsFP(MF)) {
1543     addScavengingSpillSlot(MF, RS);
1544     return;
1545   }
1546 
1547   unsigned MinGPR = PPC::R31;
1548   unsigned MinG8R = PPC::X31;
1549   unsigned MinFPR = PPC::F31;
1550   unsigned MinVR = PPC::V31;
1551 
1552   bool HasGPSaveArea = false;
1553   bool HasG8SaveArea = false;
1554   bool HasFPSaveArea = false;
1555   bool HasVRSAVESaveArea = false;
1556   bool HasVRSaveArea = false;
1557 
1558   SmallVector<CalleeSavedInfo, 18> GPRegs;
1559   SmallVector<CalleeSavedInfo, 18> G8Regs;
1560   SmallVector<CalleeSavedInfo, 18> FPRegs;
1561   SmallVector<CalleeSavedInfo, 18> VRegs;
1562 
1563   for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
1564     unsigned Reg = CSI[i].getReg();
1565     if (PPC::GPRCRegClass.contains(Reg)) {
1566       HasGPSaveArea = true;
1567 
1568       GPRegs.push_back(CSI[i]);
1569 
1570       if (Reg < MinGPR) {
1571         MinGPR = Reg;
1572       }
1573     } else if (PPC::G8RCRegClass.contains(Reg)) {
1574       HasG8SaveArea = true;
1575 
1576       G8Regs.push_back(CSI[i]);
1577 
1578       if (Reg < MinG8R) {
1579         MinG8R = Reg;
1580       }
1581     } else if (PPC::F8RCRegClass.contains(Reg)) {
1582       HasFPSaveArea = true;
1583 
1584       FPRegs.push_back(CSI[i]);
1585 
1586       if (Reg < MinFPR) {
1587         MinFPR = Reg;
1588       }
1589     } else if (PPC::CRBITRCRegClass.contains(Reg) ||
1590                PPC::CRRCRegClass.contains(Reg)) {
1591       ; // do nothing, as we already know whether CRs are spilled
1592     } else if (PPC::VRSAVERCRegClass.contains(Reg)) {
1593       HasVRSAVESaveArea = true;
1594     } else if (PPC::VRRCRegClass.contains(Reg)) {
1595       HasVRSaveArea = true;
1596 
1597       VRegs.push_back(CSI[i]);
1598 
1599       if (Reg < MinVR) {
1600         MinVR = Reg;
1601       }
1602     } else {
1603       llvm_unreachable("Unknown RegisterClass!");
1604     }
1605   }
1606 
1607   PPCFunctionInfo *PFI = MF.getInfo<PPCFunctionInfo>();
1608   const TargetRegisterInfo *TRI = Subtarget.getRegisterInfo();
1609 
1610   int64_t LowerBound = 0;
1611 
1612   // Take into account stack space reserved for tail calls.
1613   int TCSPDelta = 0;
1614   if (MF.getTarget().Options.GuaranteedTailCallOpt &&
1615       (TCSPDelta = PFI->getTailCallSPDelta()) < 0) {
1616     LowerBound = TCSPDelta;
1617   }
1618 
1619   // The Floating-point register save area is right below the back chain word
1620   // of the previous stack frame.
1621   if (HasFPSaveArea) {
1622     for (unsigned i = 0, e = FPRegs.size(); i != e; ++i) {
1623       int FI = FPRegs[i].getFrameIdx();
1624 
1625       MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1626     }
1627 
1628     LowerBound -= (31 - TRI->getEncodingValue(MinFPR) + 1) * 8;
1629   }
1630 
1631   // Check whether the frame pointer register is allocated. If so, make sure it
1632   // is spilled to the correct offset.
1633   if (needsFP(MF)) {
1634     HasGPSaveArea = true;
1635 
1636     int FI = PFI->getFramePointerSaveIndex();
1637     assert(FI && "No Frame Pointer Save Slot!");
1638 
1639     MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1640   }
1641 
1642   if (PFI->usesPICBase()) {
1643     HasGPSaveArea = true;
1644 
1645     int FI = PFI->getPICBasePointerSaveIndex();
1646     assert(FI && "No PIC Base Pointer Save Slot!");
1647 
1648     MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1649   }
1650 
1651   const PPCRegisterInfo *RegInfo =
1652       static_cast<const PPCRegisterInfo *>(Subtarget.getRegisterInfo());
1653   if (RegInfo->hasBasePointer(MF)) {
1654     HasGPSaveArea = true;
1655 
1656     int FI = PFI->getBasePointerSaveIndex();
1657     assert(FI && "No Base Pointer Save Slot!");
1658 
1659     MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1660   }
1661 
1662   // General register save area starts right below the Floating-point
1663   // register save area.
1664   if (HasGPSaveArea || HasG8SaveArea) {
1665     // Move general register save area spill slots down, taking into account
1666     // the size of the Floating-point register save area.
1667     for (unsigned i = 0, e = GPRegs.size(); i != e; ++i) {
1668       int FI = GPRegs[i].getFrameIdx();
1669 
1670       MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1671     }
1672 
1673     // Move general register save area spill slots down, taking into account
1674     // the size of the Floating-point register save area.
1675     for (unsigned i = 0, e = G8Regs.size(); i != e; ++i) {
1676       int FI = G8Regs[i].getFrameIdx();
1677 
1678       MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1679     }
1680 
1681     unsigned MinReg =
1682       std::min<unsigned>(TRI->getEncodingValue(MinGPR),
1683                          TRI->getEncodingValue(MinG8R));
1684 
1685     if (Subtarget.isPPC64()) {
1686       LowerBound -= (31 - MinReg + 1) * 8;
1687     } else {
1688       LowerBound -= (31 - MinReg + 1) * 4;
1689     }
1690   }
1691 
1692   // For 32-bit only, the CR save area is below the general register
1693   // save area.  For 64-bit SVR4, the CR save area is addressed relative
1694   // to the stack pointer and hence does not need an adjustment here.
1695   // Only CR2 (the first nonvolatile spilled) has an associated frame
1696   // index so that we have a single uniform save area.
1697   if (spillsCR(MF) && !(Subtarget.isPPC64() && Subtarget.isSVR4ABI())) {
1698     // Adjust the frame index of the CR spill slot.
1699     for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
1700       unsigned Reg = CSI[i].getReg();
1701 
1702       if ((Subtarget.isSVR4ABI() && Reg == PPC::CR2)
1703           // Leave Darwin logic as-is.
1704           || (!Subtarget.isSVR4ABI() &&
1705               (PPC::CRBITRCRegClass.contains(Reg) ||
1706                PPC::CRRCRegClass.contains(Reg)))) {
1707         int FI = CSI[i].getFrameIdx();
1708 
1709         MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1710       }
1711     }
1712 
1713     LowerBound -= 4; // The CR save area is always 4 bytes long.
1714   }
1715 
1716   if (HasVRSAVESaveArea) {
1717     // FIXME SVR4: Is it actually possible to have multiple elements in CSI
1718     //             which have the VRSAVE register class?
1719     // Adjust the frame index of the VRSAVE spill slot.
1720     for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
1721       unsigned Reg = CSI[i].getReg();
1722 
1723       if (PPC::VRSAVERCRegClass.contains(Reg)) {
1724         int FI = CSI[i].getFrameIdx();
1725 
1726         MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1727       }
1728     }
1729 
1730     LowerBound -= 4; // The VRSAVE save area is always 4 bytes long.
1731   }
1732 
1733   if (HasVRSaveArea) {
1734     // Insert alignment padding, we need 16-byte alignment.
1735     LowerBound = (LowerBound - 15) & ~(15);
1736 
1737     for (unsigned i = 0, e = VRegs.size(); i != e; ++i) {
1738       int FI = VRegs[i].getFrameIdx();
1739 
1740       MFI.setObjectOffset(FI, LowerBound + MFI.getObjectOffset(FI));
1741     }
1742   }
1743 
1744   addScavengingSpillSlot(MF, RS);
1745 }
1746 
1747 void
1748 PPCFrameLowering::addScavengingSpillSlot(MachineFunction &MF,
1749                                          RegScavenger *RS) const {
1750   // Reserve a slot closest to SP or frame pointer if we have a dynalloc or
1751   // a large stack, which will require scavenging a register to materialize a
1752   // large offset.
1753 
1754   // We need to have a scavenger spill slot for spills if the frame size is
1755   // large. In case there is no free register for large-offset addressing,
1756   // this slot is used for the necessary emergency spill. Also, we need the
1757   // slot for dynamic stack allocations.
1758 
1759   // The scavenger might be invoked if the frame offset does not fit into
1760   // the 16-bit immediate. We don't know the complete frame size here
1761   // because we've not yet computed callee-saved register spills or the
1762   // needed alignment padding.
1763   unsigned StackSize = determineFrameLayout(MF, false, true);
1764   MachineFrameInfo &MFI = MF.getFrameInfo();
1765   if (MFI.hasVarSizedObjects() || spillsCR(MF) || spillsVRSAVE(MF) ||
1766       hasNonRISpills(MF) || (hasSpills(MF) && !isInt<16>(StackSize))) {
1767     const TargetRegisterClass *GPRC = &PPC::GPRCRegClass;
1768     const TargetRegisterClass *G8RC = &PPC::G8RCRegClass;
1769     const TargetRegisterClass *RC = Subtarget.isPPC64() ? G8RC : GPRC;
1770     RS->addScavengingFrameIndex(MFI.CreateStackObject(RC->getSize(),
1771                                                       RC->getAlignment(),
1772                                                       false));
1773 
1774     // Might we have over-aligned allocas?
1775     bool HasAlVars = MFI.hasVarSizedObjects() &&
1776                      MFI.getMaxAlignment() > getStackAlignment();
1777 
1778     // These kinds of spills might need two registers.
1779     if (spillsCR(MF) || spillsVRSAVE(MF) || HasAlVars)
1780       RS->addScavengingFrameIndex(MFI.CreateStackObject(RC->getSize(),
1781                                                         RC->getAlignment(),
1782                                                         false));
1783 
1784   }
1785 }
1786 
1787 bool
1788 PPCFrameLowering::spillCalleeSavedRegisters(MachineBasicBlock &MBB,
1789                                      MachineBasicBlock::iterator MI,
1790                                      const std::vector<CalleeSavedInfo> &CSI,
1791                                      const TargetRegisterInfo *TRI) const {
1792 
1793   // Currently, this function only handles SVR4 32- and 64-bit ABIs.
1794   // Return false otherwise to maintain pre-existing behavior.
1795   if (!Subtarget.isSVR4ABI())
1796     return false;
1797 
1798   MachineFunction *MF = MBB.getParent();
1799   const PPCInstrInfo &TII =
1800       *static_cast<const PPCInstrInfo *>(Subtarget.getInstrInfo());
1801   DebugLoc DL;
1802   bool CRSpilled = false;
1803   MachineInstrBuilder CRMIB;
1804 
1805   for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
1806     unsigned Reg = CSI[i].getReg();
1807     // Only Darwin actually uses the VRSAVE register, but it can still appear
1808     // here if, for example, @llvm.eh.unwind.init() is used.  If we're not on
1809     // Darwin, ignore it.
1810     if (Reg == PPC::VRSAVE && !Subtarget.isDarwinABI())
1811       continue;
1812 
1813     // CR2 through CR4 are the nonvolatile CR fields.
1814     bool IsCRField = PPC::CR2 <= Reg && Reg <= PPC::CR4;
1815 
1816     // Add the callee-saved register as live-in; it's killed at the spill.
1817     MBB.addLiveIn(Reg);
1818 
1819     if (CRSpilled && IsCRField) {
1820       CRMIB.addReg(Reg, RegState::ImplicitKill);
1821       continue;
1822     }
1823 
1824     // Insert the spill to the stack frame.
1825     if (IsCRField) {
1826       PPCFunctionInfo *FuncInfo = MF->getInfo<PPCFunctionInfo>();
1827       if (Subtarget.isPPC64()) {
1828         // The actual spill will happen at the start of the prologue.
1829         FuncInfo->addMustSaveCR(Reg);
1830       } else {
1831         CRSpilled = true;
1832         FuncInfo->setSpillsCR();
1833 
1834         // 32-bit:  FP-relative.  Note that we made sure CR2-CR4 all have
1835         // the same frame index in PPCRegisterInfo::hasReservedSpillSlot.
1836         CRMIB = BuildMI(*MF, DL, TII.get(PPC::MFCR), PPC::R12)
1837                   .addReg(Reg, RegState::ImplicitKill);
1838 
1839         MBB.insert(MI, CRMIB);
1840         MBB.insert(MI, addFrameReference(BuildMI(*MF, DL, TII.get(PPC::STW))
1841                                          .addReg(PPC::R12,
1842                                                  getKillRegState(true)),
1843                                          CSI[i].getFrameIdx()));
1844       }
1845     } else {
1846       const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
1847       TII.storeRegToStackSlot(MBB, MI, Reg, true,
1848                               CSI[i].getFrameIdx(), RC, TRI);
1849     }
1850   }
1851   return true;
1852 }
1853 
1854 static void
1855 restoreCRs(bool isPPC64, bool is31,
1856            bool CR2Spilled, bool CR3Spilled, bool CR4Spilled,
1857            MachineBasicBlock &MBB, MachineBasicBlock::iterator MI,
1858            const std::vector<CalleeSavedInfo> &CSI, unsigned CSIIndex) {
1859 
1860   MachineFunction *MF = MBB.getParent();
1861   const PPCInstrInfo &TII = *MF->getSubtarget<PPCSubtarget>().getInstrInfo();
1862   DebugLoc DL;
1863   unsigned RestoreOp, MoveReg;
1864 
1865   if (isPPC64)
1866     // This is handled during epilogue generation.
1867     return;
1868   else {
1869     // 32-bit:  FP-relative
1870     MBB.insert(MI, addFrameReference(BuildMI(*MF, DL, TII.get(PPC::LWZ),
1871                                              PPC::R12),
1872                                      CSI[CSIIndex].getFrameIdx()));
1873     RestoreOp = PPC::MTOCRF;
1874     MoveReg = PPC::R12;
1875   }
1876 
1877   if (CR2Spilled)
1878     MBB.insert(MI, BuildMI(*MF, DL, TII.get(RestoreOp), PPC::CR2)
1879                .addReg(MoveReg, getKillRegState(!CR3Spilled && !CR4Spilled)));
1880 
1881   if (CR3Spilled)
1882     MBB.insert(MI, BuildMI(*MF, DL, TII.get(RestoreOp), PPC::CR3)
1883                .addReg(MoveReg, getKillRegState(!CR4Spilled)));
1884 
1885   if (CR4Spilled)
1886     MBB.insert(MI, BuildMI(*MF, DL, TII.get(RestoreOp), PPC::CR4)
1887                .addReg(MoveReg, getKillRegState(true)));
1888 }
1889 
1890 MachineBasicBlock::iterator PPCFrameLowering::
1891 eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB,
1892                               MachineBasicBlock::iterator I) const {
1893   const TargetInstrInfo &TII = *Subtarget.getInstrInfo();
1894   if (MF.getTarget().Options.GuaranteedTailCallOpt &&
1895       I->getOpcode() == PPC::ADJCALLSTACKUP) {
1896     // Add (actually subtract) back the amount the callee popped on return.
1897     if (int CalleeAmt =  I->getOperand(1).getImm()) {
1898       bool is64Bit = Subtarget.isPPC64();
1899       CalleeAmt *= -1;
1900       unsigned StackReg = is64Bit ? PPC::X1 : PPC::R1;
1901       unsigned TmpReg = is64Bit ? PPC::X0 : PPC::R0;
1902       unsigned ADDIInstr = is64Bit ? PPC::ADDI8 : PPC::ADDI;
1903       unsigned ADDInstr = is64Bit ? PPC::ADD8 : PPC::ADD4;
1904       unsigned LISInstr = is64Bit ? PPC::LIS8 : PPC::LIS;
1905       unsigned ORIInstr = is64Bit ? PPC::ORI8 : PPC::ORI;
1906       const DebugLoc &dl = I->getDebugLoc();
1907 
1908       if (isInt<16>(CalleeAmt)) {
1909         BuildMI(MBB, I, dl, TII.get(ADDIInstr), StackReg)
1910           .addReg(StackReg, RegState::Kill)
1911           .addImm(CalleeAmt);
1912       } else {
1913         MachineBasicBlock::iterator MBBI = I;
1914         BuildMI(MBB, MBBI, dl, TII.get(LISInstr), TmpReg)
1915           .addImm(CalleeAmt >> 16);
1916         BuildMI(MBB, MBBI, dl, TII.get(ORIInstr), TmpReg)
1917           .addReg(TmpReg, RegState::Kill)
1918           .addImm(CalleeAmt & 0xFFFF);
1919         BuildMI(MBB, MBBI, dl, TII.get(ADDInstr), StackReg)
1920           .addReg(StackReg, RegState::Kill)
1921           .addReg(TmpReg);
1922       }
1923     }
1924   }
1925   // Simply discard ADJCALLSTACKDOWN, ADJCALLSTACKUP instructions.
1926   return MBB.erase(I);
1927 }
1928 
1929 bool
1930 PPCFrameLowering::restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
1931                                         MachineBasicBlock::iterator MI,
1932                                         const std::vector<CalleeSavedInfo> &CSI,
1933                                         const TargetRegisterInfo *TRI) const {
1934 
1935   // Currently, this function only handles SVR4 32- and 64-bit ABIs.
1936   // Return false otherwise to maintain pre-existing behavior.
1937   if (!Subtarget.isSVR4ABI())
1938     return false;
1939 
1940   MachineFunction *MF = MBB.getParent();
1941   const PPCInstrInfo &TII =
1942       *static_cast<const PPCInstrInfo *>(Subtarget.getInstrInfo());
1943   bool CR2Spilled = false;
1944   bool CR3Spilled = false;
1945   bool CR4Spilled = false;
1946   unsigned CSIIndex = 0;
1947 
1948   // Initialize insertion-point logic; we will be restoring in reverse
1949   // order of spill.
1950   MachineBasicBlock::iterator I = MI, BeforeI = I;
1951   bool AtStart = I == MBB.begin();
1952 
1953   if (!AtStart)
1954     --BeforeI;
1955 
1956   for (unsigned i = 0, e = CSI.size(); i != e; ++i) {
1957     unsigned Reg = CSI[i].getReg();
1958 
1959     // Only Darwin actually uses the VRSAVE register, but it can still appear
1960     // here if, for example, @llvm.eh.unwind.init() is used.  If we're not on
1961     // Darwin, ignore it.
1962     if (Reg == PPC::VRSAVE && !Subtarget.isDarwinABI())
1963       continue;
1964 
1965     if (Reg == PPC::CR2) {
1966       CR2Spilled = true;
1967       // The spill slot is associated only with CR2, which is the
1968       // first nonvolatile spilled.  Save it here.
1969       CSIIndex = i;
1970       continue;
1971     } else if (Reg == PPC::CR3) {
1972       CR3Spilled = true;
1973       continue;
1974     } else if (Reg == PPC::CR4) {
1975       CR4Spilled = true;
1976       continue;
1977     } else {
1978       // When we first encounter a non-CR register after seeing at
1979       // least one CR register, restore all spilled CRs together.
1980       if ((CR2Spilled || CR3Spilled || CR4Spilled)
1981           && !(PPC::CR2 <= Reg && Reg <= PPC::CR4)) {
1982         bool is31 = needsFP(*MF);
1983         restoreCRs(Subtarget.isPPC64(), is31,
1984                    CR2Spilled, CR3Spilled, CR4Spilled,
1985                    MBB, I, CSI, CSIIndex);
1986         CR2Spilled = CR3Spilled = CR4Spilled = false;
1987       }
1988 
1989       // Default behavior for non-CR saves.
1990       const TargetRegisterClass *RC = TRI->getMinimalPhysRegClass(Reg);
1991       TII.loadRegFromStackSlot(MBB, I, Reg, CSI[i].getFrameIdx(),
1992                                RC, TRI);
1993       assert(I != MBB.begin() &&
1994              "loadRegFromStackSlot didn't insert any code!");
1995       }
1996 
1997     // Insert in reverse order.
1998     if (AtStart)
1999       I = MBB.begin();
2000     else {
2001       I = BeforeI;
2002       ++I;
2003     }
2004   }
2005 
2006   // If we haven't yet spilled the CRs, do so now.
2007   if (CR2Spilled || CR3Spilled || CR4Spilled) {
2008     bool is31 = needsFP(*MF);
2009     restoreCRs(Subtarget.isPPC64(), is31, CR2Spilled, CR3Spilled, CR4Spilled,
2010                MBB, I, CSI, CSIIndex);
2011   }
2012 
2013   return true;
2014 }
2015 
2016 bool PPCFrameLowering::enableShrinkWrapping(const MachineFunction &MF) const {
2017   return (MF.getSubtarget<PPCSubtarget>().isSVR4ABI() &&
2018           MF.getSubtarget<PPCSubtarget>().isPPC64());
2019 }
2020