From: Anton Korobeynikov Date: Thu, 23 Aug 2007 07:21:06 +0000 (+0000) Subject: Perform correct codegen for eh_dwarf_cfa intrinsic. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=2f597bd09ec0a55689c9fd6d8999bde4fdf8688e;p=oota-llvm.git Perform correct codegen for eh_dwarf_cfa intrinsic. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41316 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 78539d454ed..1dde705bf59 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -2751,11 +2751,19 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) { case Intrinsic::eh_dwarf_cfa: { if (ExceptionHandling) { MVT::ValueType VT = getValue(I.getOperand(1)).getValueType(); + SDOperand CfaArg; + if (MVT::getSizeInBits(VT) > MVT::getSizeInBits(TLI.getPointerTy())) + CfaArg = DAG.getNode(ISD::TRUNCATE, + TLI.getPointerTy(), getValue(I.getOperand(1))); + else + CfaArg = DAG.getNode(ISD::SIGN_EXTEND, + TLI.getPointerTy(), getValue(I.getOperand(1))); + SDOperand Offset = DAG.getNode(ISD::ADD, TLI.getPointerTy(), DAG.getNode(ISD::FRAME_TO_ARGS_OFFSET, - VT), - getValue(I.getOperand(1))); + TLI.getPointerTy()), + CfaArg); setValue(&I, DAG.getNode(ISD::ADD, TLI.getPointerTy(), DAG.getNode(ISD::FRAMEADDR,