hook ISD::STACKADDR to an intrinsic
authorJim Grosbach <grosbach@apple.com>
Thu, 27 May 2010 18:52:11 +0000 (18:52 +0000)
committerJim Grosbach <grosbach@apple.com>
Thu, 27 May 2010 18:52:11 +0000 (18:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104869 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Intrinsics.td
lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

index 444f514d59beed4dd54b770ab42b4c3d6166e625..42c16c34ac446b2a93f79a35a28171dbe5efc039 100644 (file)
@@ -197,12 +197,13 @@ def int_gcwrite : Intrinsic<[],
 def int_returnaddress : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem]>;
 def int_frameaddress  : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty], [IntrNoMem]>;
 
-// Note: we treat stacksave/stackrestore as writemem because we don't otherwise
-// model their dependencies on allocas.
+// Note: we treat stacksave/stackrestore and stackaddr as writemem because we
+// don't otherwise model their dependencies on allocas.
 def int_stacksave     : Intrinsic<[llvm_ptr_ty]>,
                         GCCBuiltin<"__builtin_stack_save">;
 def int_stackrestore  : Intrinsic<[], [llvm_ptr_ty]>,
                         GCCBuiltin<"__builtin_stack_restore">;
+def int_stackaddress  : Intrinsic<[llvm_ptr_ty], []>;
 
 // IntrWriteArgMem is more pessimistic than strictly necessary for prefetch,
 // however it does conveniently prevent the prefetch from being reordered
index fbe601f2db09ec338fea20dd9f305e3fb5a47525..a0cd23290585a446a012d8354d1006dda0ffc855 100644 (file)
@@ -3756,6 +3756,10 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
     setValue(&I, DAG.getNode(ISD::FRAMEADDR, dl, TLI.getPointerTy(),
                              getValue(I.getOperand(1))));
     return 0;
+  case Intrinsic::stackaddress:
+    setValue(&I, DAG.getNode(ISD::STACKADDR, dl, TLI.getPointerTy(), getRoot(),
+                             getValue(I.getOperand(1))));
+    return 0;
   case Intrinsic::setjmp:
     return "_setjmp"+!TLI.usesUnderscoreSetJmp();
   case Intrinsic::longjmp: