[llvm-commits] [llvm] r56341 - in /llvm/trunk: include/llvm/ include/llvm/Transforms/ lib/Transforms/IPO/ test/Analysis/GlobalsModRef/ test/Transforms/AddReadAttrs/
Devang Patel
dpatel at apple.com
Fri Sep 19 09:17:43 PDT 2008
On Sep 19, 2008, at 1:17 AM, Duncan Sands wrote:
> + Function *F = SCC[i]->getFunction();
> +
> + if (F == 0)
> + // May write memory.
> + return false;
??
> +
> + if (F->doesNotAccessMemory())
> + // Already perfect!
> + continue;
> +
> + // Definitions with weak linkage may be overridden at linktime
> with
> + // something that writes memory, so treat them like declarations.
> + if (F->isDeclaration() || F->hasWeakLinkage()) {
What about CommonLinkage, GhostLinkage etc..?
>
> + if (!F->onlyReadsMemory())
> + // May write memory.
> + return false;
> +
> + ReadsMemory = true;
> + continue;
> + }
> +
> + // Scan the function body for explicit loads and stores, or
> calls to
> + // functions that may read or write memory.
> + for (inst_iterator II = inst_begin(F), E = inst_end(F); II !=
> E; ++II) {
> + Instruction *I = &*II;
> + if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
> + if (LI->isVolatile())
> + // Volatile loads may have side-effects, so treat them as
> writing
> + // memory.
> + return false;
> + ReadsMemory = true;
How about using mayReadMemory() and mayWriteMemory() here ?
-
Devang
>
> + } else if (isa<StoreInst>(I) || isa<MallocInst>(I) ||
> isa<FreeInst>(I)) {
> + // Writes memory.
> + return false;
> + } else if (isa<CallInst>(I) || isa<InvokeInst>(I)) {
> + CallSite CS(I);
> +
> + if (std::find(SCC.begin(), SCC.end(),
> CG[CS.getCalledFunction()]) !=
> + SCC.end())
> + // The callee is inside our current SCC - ignore it.
> + continue;
> +
> + if (!CS.onlyReadsMemory())
> + // May write memory.
> + return false;
> +
> + if (!CS.doesNotAccessMemory())
> + ReadsMemory = true;
> + }
> + }
> + }
> +
> + // Success! Functions in this SCC do not access memory, or only
> read memory.
> + // Give them the appropriate attribute.
> + bool MadeChange = false;
> + for (unsigned i = 0, e = SCC.size(); i != e; ++i) {
> + Function *F = SCC[i]->getFunction();
> +
> + if (F->doesNotAccessMemory())
> + // Already perfect!
> + continue;
> +
> + if (F->onlyReadsMemory() && ReadsMemory)
> + // No change.
> + continue;
> +
> + MadeChange = true;
> +
> + // Clear out any existing attributes.
> + F->removeParamAttr(0, ParamAttr::ReadOnly | ParamAttr::ReadNone);
> +
> + // Add in the new attribute.
> + F->addParamAttr(0, ReadsMemory ? ParamAttr::ReadOnly :
> ParamAttr::ReadNone);
> +
> + if (ReadsMemory)
> + NumReadOnly++;
> + else
> + NumReadNone++;
> + }
> +
> + return MadeChange;
> +}
>
> Removed: llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll?rev=56340&view=auto
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll
> (original)
> +++ llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll
> (removed)
> @@ -1,11 +0,0 @@
> -; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis
> | grep readnone
> -
> -define i32 @a() {
> - %tmp = call i32 @b( ) ; <i32> [#uses=1]
> - ret i32 %tmp
> -}
> -
> -define i32 @b() {
> - %tmp = call i32 @a( ) ; <i32> [#uses=1]
> - ret i32 %tmp
> -}
>
> Removed: llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadNone.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadNone.ll?rev=56340&view=auto
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadNone.ll
> (original)
> +++ llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadNone.ll
> (removed)
> @@ -1,9 +0,0 @@
> -; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis
> | grep readnone | count 2
> -
> -define i32 @f() {
> -entry:
> - %tmp = call i32 @e( ) ; <i32> [#uses=1]
> - ret i32 %tmp
> -}
> -
> -declare i32 @e() readnone
>
> Removed: llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll?rev=56340&view=auto
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll
> (original)
> +++ llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll
> (removed)
> @@ -1,9 +0,0 @@
> -; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis
> | grep readonly | count 2
> -
> -define i32 @f() {
> -entry:
> - %tmp = call i32 @e( ) ; <i32> [#uses=1]
> - ret i32 %tmp
> -}
> -
> -declare i32 @e() readonly
>
> Removed: llvm/trunk/test/Analysis/GlobalsModRef/2008-09-13-
> VolatileRead.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/GlobalsModRef/2008-09-13-VolatileRead.ll?rev=56340&view=auto
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Analysis/GlobalsModRef/2008-09-13-
> VolatileRead.ll (original)
> +++ llvm/trunk/test/Analysis/GlobalsModRef/2008-09-13-
> VolatileRead.ll (removed)
> @@ -1,9 +0,0 @@
> -; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis
> | not grep read
> -; PR2792
> -
> - at g = global i32 0 ; <i32*> [#uses=1]
> -
> -define i32 @f() {
> - %t = volatile load i32* @g ; <i32> [#uses=1]
> - ret i32 %t
> -}
>
> Copied: llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-Mutual.ll
> (from r56242, llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-
> Mutual.ll)
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-Mutual.ll?p2=llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-Mutual.ll&p1=llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll&r1=56242&r2=56341&rev=56341&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-Mutual.ll
> (original)
> +++ llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-Mutual.ll Fri
> Sep 19 03:17:05 2008
> @@ -1,4 +1,4 @@
> -; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis
> | grep readnone
> +; RUN: llvm-as < %s | opt -addreadattrs | llvm-dis | grep readnone
>
> define i32 @a() {
> %tmp = call i32 @b( ) ; <i32> [#uses=1]
>
> Propchange: llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-
> Mutual.ll
>
> ------------------------------------------------------------------------------
> svn:mergeinfo =
>
> Copied: llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-
> ReadNone.ll (from r56242, llvm/trunk/test/Analysis/GlobalsModRef/
> 2008-09-03-ReadNone.ll)
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-ReadNone.ll?p2=llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-ReadNone.ll&p1=llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadNone.ll&r1=56242&r2=56341&rev=56341&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadNone.ll
> (original)
> +++ llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-ReadNone.ll
> Fri Sep 19 03:17:05 2008
> @@ -1,4 +1,4 @@
> -; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis
> | grep readnone | count 2
> +; RUN: llvm-as < %s | opt -addreadattrs | llvm-dis | grep readnone
> | count 2
>
> define i32 @f() {
> entry:
>
> Propchange: llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-
> ReadNone.ll
>
> ------------------------------------------------------------------------------
> svn:mergeinfo =
>
> Copied: llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-
> ReadOnly.ll (from r56242, llvm/trunk/test/Analysis/GlobalsModRef/
> 2008-09-03-ReadOnly.ll)
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-ReadOnly.ll?p2=llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-ReadOnly.ll&p1=llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll&r1=56242&r2=56341&rev=56341&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Analysis/GlobalsModRef/2008-09-03-ReadOnly.ll
> (original)
> +++ llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-ReadOnly.ll
> Fri Sep 19 03:17:05 2008
> @@ -1,4 +1,4 @@
> -; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis
> | grep readonly | count 2
> +; RUN: llvm-as < %s | opt -addreadattrs | llvm-dis | grep readonly
> | count 2
>
> define i32 @f() {
> entry:
>
> Propchange: llvm/trunk/test/Transforms/AddReadAttrs/2008-09-03-
> ReadOnly.ll
>
> ------------------------------------------------------------------------------
> svn:mergeinfo =
>
> Copied: llvm/trunk/test/Transforms/AddReadAttrs/2008-09-13-
> VolatileRead.ll (from r56242, llvm/trunk/test/Analysis/GlobalsModRef/
> 2008-09-13-VolatileRead.ll)
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddReadAttrs/2008-09-13-VolatileRead.ll?p2=llvm/trunk/test/Transforms/AddReadAttrs/2008-09-13-VolatileRead.ll&p1=llvm/trunk/test/Analysis/GlobalsModRef/2008-09-13-VolatileRead.ll&r1=56242&r2=56341&rev=56341&view=diff
>
> =
> =
> =
> =
> =
> =
> =
> =
> ======================================================================
> --- llvm/trunk/test/Analysis/GlobalsModRef/2008-09-13-
> VolatileRead.ll (original)
> +++ llvm/trunk/test/Transforms/AddReadAttrs/2008-09-13-
> VolatileRead.ll Fri Sep 19 03:17:05 2008
> @@ -1,4 +1,4 @@
> -; RUN: llvm-as < %s | opt -globalsmodref-aa -markmodref | llvm-dis
> | not grep read
> +; RUN: llvm-as < %s | opt -addreadattrs | llvm-dis | not grep read
> ; PR2792
>
> @g = global i32 0 ; <i32*> [#uses=1]
>
> Propchange: llvm/trunk/test/Transforms/AddReadAttrs/2008-09-13-
> VolatileRead.ll
>
> ------------------------------------------------------------------------------
> svn:mergeinfo =
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list