[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