[llvm-commits] frameaddress intrinsincs for PPC
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Thu Mar 1 00:32:39 PST 2007
If there is no objection, I'm committing this in.
Nicolas Geoffray wrote:
> This patch implements the frameaddress intrinsincs for PPC.
>
> OK to commit?
> ------------------------------------------------------------------------
>
> Index: PPCISelLowering.h
> ===================================================================
> RCS file: /var/cvs/llvm/llvm/lib/Target/PowerPC/PPCISelLowering.h,v
> retrieving revision 1.60
> diff -t -d -u -p -5 -r1.60 PPCISelLowering.h
> --- PPCISelLowering.h 27 Feb 2007 13:01:19 -0000 1.60
> +++ PPCISelLowering.h 27 Feb 2007 17:32:38 -0000
> @@ -238,9 +238,11 @@ namespace llvm {
>
> /// isLegalAddressImmediate - Return true if the integer value can be used
> /// as the offset of the target addressing mode.
> virtual bool isLegalAddressImmediate(int64_t V) const;
> virtual bool isLegalAddressImmediate(llvm::GlobalValue*) const;
> +
> + SDOperand LowerFRAMEADDR(SDOperand Op, SelectionDAG &DAG);
> };
> }
>
> #endif // LLVM_TARGET_POWERPC_PPC32ISELLOWERING_H
> Index: PPCISelLowering.cpp
> ===================================================================
> RCS file: /var/cvs/llvm/llvm/lib/Target/PowerPC/PPCISelLowering.cpp,v
> retrieving revision 1.258
> diff -t -d -u -p -5 -r1.258 PPCISelLowering.cpp
> --- PPCISelLowering.cpp 27 Feb 2007 13:01:19 -0000 1.258
> +++ PPCISelLowering.cpp 27 Feb 2007 17:32:44 -0000
> @@ -2698,11 +2698,11 @@ SDOperand PPCTargetLowering::LowerOperat
> case ISD::SCALAR_TO_VECTOR: return LowerSCALAR_TO_VECTOR(Op, DAG);
> case ISD::MUL: return LowerMUL(Op, DAG);
>
> // Frame & Return address. Currently unimplemented
> case ISD::RETURNADDR: break;
> - case ISD::FRAMEADDR: break;
> + case ISD::FRAMEADDR: return LowerFRAMEADDR(Op, DAG);
> }
> return SDOperand();
> }
>
> //===----------------------------------------------------------------------===//
> @@ -3169,5 +3169,27 @@ bool PPCTargetLowering::isLegalAddressIm
> }
>
> bool PPCTargetLowering::isLegalAddressImmediate(llvm::GlobalValue* GV) const {
> return TargetLowering::isLegalAddressImmediate(GV);
> }
> +
> +SDOperand PPCTargetLowering::LowerFRAMEADDR(SDOperand Op, SelectionDAG &DAG)
> +{
> + // Depths > 0 not supported yet!
> + if (cast<ConstantSDNode>(Op.getOperand(0))->getValue() > 0)
> + return SDOperand();
> +
> + MVT::ValueType PtrVT = DAG.getTargetLoweringInfo().getPointerTy();
> + bool isPPC64 = PtrVT == MVT::i64;
> +
> + MachineFunction &MF = DAG.getMachineFunction();
> + MachineFrameInfo *MFI = MF.getFrameInfo();
> + bool is31 = (NoFramePointerElim || MFI->hasVarSizedObjects())
> + && MFI->getStackSize();
> +
> + if (isPPC64)
> + return DAG.getCopyFromReg(DAG.getEntryNode(), is31 ? PPC::X31 : PPC::X1,
> + MVT::i32);
> + else
> + return DAG.getCopyFromReg(DAG.getEntryNode(), is31 ? PPC::R31 : PPC::R1,
> + MVT::i32);
> +}
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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