From 42e3c81c5f23c42ba2415a8f797d430dad387734 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 8 May 2005 23:58:12 +0000 Subject: [PATCH] By definition, 'tail' calls cannot access the stack frame of their caller. Expose this as a simple form of mod/ref information. This implements BasicAA/tailcall-modref.ll git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21796 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Analysis/BasicAliasAnalysis.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 334ef4a7d56..1110a017de9 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -239,6 +239,12 @@ BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) { // because it simply can't get its address. if (!AddressMightEscape(AI)) return NoModRef; + + // If this is a tail call and P points to a stack location, we know that + // the tail call cannot access or modify the local stack. + if (CallInst *CI = dyn_cast(CS.getInstruction())) + if (CI->isTailCall() && isa(AI)) + return NoModRef; } // The AliasAnalysis base class has some smarts, lets use them. -- 2.34.1