[llvm-commits] [llvm] r102657 - in /llvm/trunk/lib: CodeGen/PrologEpilogInserter.cpp Target/PowerPC/PPCRegisterInfo.cpp
Evan Cheng
evan.cheng at apple.com
Thu Apr 29 13:33:53 PDT 2010
Thanks. Does naked functions work on other targets?
Evan
On Apr 29, 2010, at 12:32 PM, Dale Johannesen wrote:
> Author: johannes
> Date: Thu Apr 29 14:32:19 2010
> New Revision: 102657
>
> URL: http://llvm.org/viewvc/llvm-project?rev=102657&view=rev
> Log:
> Make naked functions work on PPC.
>
>
> Modified:
> llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
> llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp
>
> Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp?rev=102657&r1=102656&r2=102657&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp (original)
> +++ llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Thu Apr 29 14:32:19 2010
> @@ -197,6 +197,10 @@
> if (CSRegs == 0 || CSRegs[0] == 0)
> return;
>
> + // In Naked functions we aren't going to save any registers.
> + if (Fn.getFunction()->hasFnAttr(Attribute::Naked))
> + return;
> +
> // Figure out which *callee saved* registers are modified by the current
> // function, thus needing to be saved and restored in the prolog/epilog.
> const TargetRegisterClass * const *CSRegClasses =
>
> Modified: llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp?rev=102657&r1=102656&r2=102657&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp (original)
> +++ llvm/trunk/lib/Target/PowerPC/PPCRegisterInfo.cpp Thu Apr 29 14:32:19 2010
> @@ -409,6 +409,9 @@
> //
> static bool needsFP(const MachineFunction &MF) {
> const MachineFrameInfo *MFI = MF.getFrameInfo();
> + // Naked functions have no stack frame pushed, so we don't have a frame pointer.
> + if (MF.getFunction()->hasFnAttr(Attribute::Naked))
> + return false;
> return DisableFramePointerElim(MF) || MFI->hasVarSizedObjects() ||
> (GuaranteedTailCallOpt && MF.getInfo<PPCFunctionInfo>()->hasFastCall());
> }
> @@ -794,7 +797,10 @@
> // If we're not using a Frame Pointer that has been set to the value of the
> // SP before having the stack size subtracted from it, then add the stack size
> // to Offset to get the correct offset.
> - Offset += MFI->getStackSize();
> + // Naked functions have stack size 0, although getStackSize may not reflect that
> + // because we didn't call all the pieces that compute it for naked functions.
> + if (!MF.getFunction()->hasFnAttr(Attribute::Naked))
> + Offset += MFI->getStackSize();
>
> // If we can, encode the offset directly into the instruction. If this is a
> // normal PPC "ri" instruction, any 16-bit value can be safely encoded. If
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list