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@cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits >
_______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits