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