Fix @llvm.frameaddress codegen. FP elimination optimization should be disabled when frame address is desired. Also add support for depth > 0.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56683 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
index 7690250..bfda30e 100644
--- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
+++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
@@ -3483,10 +3483,13 @@
     setValue(&I, DAG.getNode(ISD::RETURNADDR, TLI.getPointerTy(),
                              getValue(I.getOperand(1))));
     return 0;
-  case Intrinsic::frameaddress:
+  case Intrinsic::frameaddress: {
+    MachineFrameInfo *MFI = CurMBB->getParent()->getFrameInfo();
+    MFI->setFrameAddressIsTaken(true);
     setValue(&I, DAG.getNode(ISD::FRAMEADDR, TLI.getPointerTy(),
                              getValue(I.getOperand(1))));
     return 0;
+  }
   case Intrinsic::setjmp:
     return "_setjmp"+!TLI.usesUnderscoreSetJmp();
     break;