[llvm-commits] [llvm] r64300 - in /llvm/trunk: lib/Analysis/IPA/CallGraphSCCPass.cpp test/Transforms/SimplifyLibCalls/2009-02-11-NotInitialized.ll

Nick Lewycky nicholas at mxc.ca
Wed Feb 11 09:24:32 PST 2009


Duncan Sands wrote:
> Author: baldrick
> Date: Wed Feb 11 03:58:43 2009
> New Revision: 64300
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=64300&view=rev
> Log:
> Make sure the SCC pass manager initializes any contained
> function pass managers.  Without this, simplify-libcalls
> would add nocapture attributes when run on its own, but
> not when run as part of -std-compile-opts or similar.

Thanks for fixing this!

> Added:
>     llvm/trunk/test/Transforms/SimplifyLibCalls/2009-02-11-NotInitialized.ll
> Modified:
>     llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp
> 
> Modified: llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp?rev=64300&r1=64299&r2=64300&view=diff
> 
> ==============================================================================
> --- llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp (original)
> +++ llvm/trunk/lib/Analysis/IPA/CallGraphSCCPass.cpp Wed Feb 11 03:58:43 2009
> @@ -40,8 +40,8 @@
>    /// whether any of the passes modifies the module, and if so, return true.
>    bool runOnModule(Module &M);
>  
> -  bool doInitialization(CallGraph &CG);
> -  bool doFinalization(CallGraph &CG);
> +  bool doInitialization(CallGraph &CG, Module &M);
> +  bool doFinalization(CallGraph &CG, Module &M);
>  
>    /// Pass Manager itself does not invalidate any analysis info.
>    void getAnalysisUsage(AnalysisUsage &Info) const {
> @@ -82,7 +82,7 @@
>  /// whether any of the passes modifies the module, and if so, return true.
>  bool CGPassManager::runOnModule(Module &M) {
>    CallGraph &CG = getAnalysis<CallGraph>();
> -  bool Changed = doInitialization(CG);
> +  bool Changed = doInitialization(CG, M);
>  
>    // Walk SCC
>    for (scc_iterator<CallGraph*> I = scc_begin(&CG), E = scc_end(&CG);
> @@ -126,28 +126,38 @@
>        removeDeadPasses(P, "", ON_CG_MSG);
>      }
>    }
> -  Changed |= doFinalization(CG);
> +  Changed |= doFinalization(CG, M);
>    return Changed;
>  }
>  
>  /// Initialize CG
> -bool CGPassManager::doInitialization(CallGraph &CG) {
> +bool CGPassManager::doInitialization(CallGraph &CG, Module &M) {
>    bool Changed = false;
>    for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {  
>      Pass *P = getContainedPass(Index);
> -    if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass *>(P)) 
> +    if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass *>(P)) {
>        Changed |= CGSP->doInitialization(CG);
> +    } else {
> +      FPPassManager *FP = dynamic_cast<FPPassManager *>(P);
> +      assert (FP && "Invalid CGPassManager member");
> +      Changed |= FP->doInitialization(M);

I think you should just use CG.getModule() instead of passing the Module 
around.

> +    }
>    }
>    return Changed;
>  }
>  
>  /// Finalize CG
> -bool CGPassManager::doFinalization(CallGraph &CG) {
> +bool CGPassManager::doFinalization(CallGraph &CG, Module &M) {
>    bool Changed = false;
>    for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {  
>      Pass *P = getContainedPass(Index);
> -    if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass *>(P)) 
> +    if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass *>(P)) {
>        Changed |= CGSP->doFinalization(CG);
> +    } else {
> +      FPPassManager *FP = dynamic_cast<FPPassManager *>(P);
> +      assert (FP && "Invalid CGPassManager member");
> +      Changed |= FP->doFinalization(M);
> +    }
>    }
>    return Changed;
>  }
> 
> Added: llvm/trunk/test/Transforms/SimplifyLibCalls/2009-02-11-NotInitialized.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyLibCalls/2009-02-11-NotInitialized.ll?rev=64300&view=auto
> 
> ==============================================================================
> --- llvm/trunk/test/Transforms/SimplifyLibCalls/2009-02-11-NotInitialized.ll (added)
> +++ llvm/trunk/test/Transforms/SimplifyLibCalls/2009-02-11-NotInitialized.ll Wed Feb 11 03:58:43 2009
> @@ -0,0 +1,12 @@
> +; RUN: llvm-as < %s | opt -std-compile-opts | llvm-dis | grep nocapture | count 2
> +; Check that nocapture attributes are added when run after an SCC pass.

How about just '-inline -simplify-libcalls'? -std-compile-opts is slow 
enough that it should be avoided whenever possible.

Nick

> +; PR3520
> +
> +define i32 @use(i8* %x) nounwind readonly {
> +entry:
> +	%0 = tail call i64 @strlen(i8* %x) nounwind readonly		; <i64> [#uses=1]
> +	%1 = trunc i64 %0 to i32		; <i32> [#uses=1]
> +	ret i32 %1
> +}
> +
> +declare i64 @strlen(i8*) nounwind readonly
> 
> 
> _______________________________________________
> 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