[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