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