Aditya K via llvm-dev
2016-Mar-16 19:58 UTC
[llvm-dev] [AArch64] Redzone vs. NeedsRealignment in AArch64FrameLowering.cpp:emitPrologue
Hi, I have a question about the frame lowering when canUseRedzone is true. In the following code, there appears to be no relation between `NeedsRealignment' and `canUseRedZone'. Is is possible that stack would be realigned when it uses redzone? AArch64FrameLowering.cpp 286 void AArch64FrameLowering::emitPrologue(MachineFunction &MF, 287 MachineBasicBlock &MBB) const { ..... 359 if (NumBytes) { 360 const bool NeedsRealignment = RegInfo->needsStackRealignment(MF); 361 unsigned scratchSPReg = AArch64::SP; 362 363 if (NeedsRealignment) { 364 scratchSPReg = findScratchNonCalleeSaveRegister(&MBB); 365 assert(scratchSPReg != AArch64::NoRegister); 366 } 367 368 // If we're a leaf function, try using the red zone. 369 if (!canUseRedZone(MF)) 370 // FIXME: in the case of dynamic re-alignment, NumBytes doesn't have 371 // the correct value here, as NumBytes also includes padding bytes, 372 // which shouldn't be counted here. 373 emitFrameOffset(MBB, MBBI, DL, scratchSPReg, AArch64::SP, -NumBytes, TII, 374 MachineInstr::FrameSetup); 375 376 if (NeedsRealignment) { 377 const unsigned Alignment = MFI->getMaxAlignment(); 378 const unsigned NrBitsToZero = countTrailingZeros(Alignment); ..... Thanks, -Aditya