[llvm] r227294 - [LPM] Stop using the string based preservation API. It is an

Chandler Carruth chandlerc at gmail.com
Wed Jan 28 01:59:56 PST 2015


Hans, can you pull this into the 3.6 branch? It is part of a series of
commits that may significantly help compile times for some folks.

On Tue, Jan 27, 2015 at 8:57 PM, Chandler Carruth <chandlerc at gmail.com>
wrote:

> Author: chandlerc
> Date: Tue Jan 27 22:57:56 2015
> New Revision: 227294
>
> URL: http://llvm.org/viewvc/llvm-project?rev=227294&view=rev
> Log:
> [LPM] Stop using the string based preservation API. It is an
> abomination.
>
> For starters, this API is incredibly slow. In order to lookup the name
> of a pass it must take a memory fence to acquire a pointer to the
> managed static pass registry, and then potentially acquire locks while
> it consults this registry for information about what passes exist by
> that name. This stops the world of LLVMs in your process no matter
> how little they cared about the result.
>
> To make this more joyful, you'll note that we are preserving many passes
> which *do not exist* any more, or are not even analyses which one might
> wish to have be preserved. This means we do all the work only to say
> "nope" with no error to the user.
>
> String-based APIs are a *bad idea*. String-based APIs that cannot
> produce any meaningful error are an even worse idea. =/
>
> I have a patch that simply removes this API completely, but I'm hesitant
> to commit it as I don't really want to perniciously break out-of-tree
> users of the old pass manager. I'd rather they just have to migrate to
> the new one at some point. If others disagree and would like me to kill
> it with fire, just say the word. =]
>
> Modified:
>     llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp
>     llvm/trunk/lib/Target/Hexagon/HexagonRemoveSZExtArgs.cpp
>     llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h
>     llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h
>     llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp
>     llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp
>     llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp
>
> Modified: llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp?rev=227294&r1=227293&r2=227294&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp (original)
> +++ llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp Tue Jan 27 22:57:56 2015
> @@ -11,11 +11,19 @@
>  //
>
>  //===----------------------------------------------------------------------===//
>
> -#include "llvm/IR/Function.h"
> +#include "llvm/CodeGen/MachineFunctionPass.h"
>  #include "llvm/Analysis/AliasAnalysis.h"
> +#include "llvm/Analysis/DominanceFrontier.h"
> +#include "llvm/Analysis/IVUsers.h"
> +#include "llvm/Analysis/LoopInfo.h"
> +#include "llvm/Analysis/LoopInfo.h"
> +#include "llvm/Analysis/MemoryDependenceAnalysis.h"
> +#include "llvm/Analysis/ScalarEvolution.h"
>  #include "llvm/CodeGen/MachineFunctionAnalysis.h"
> -#include "llvm/CodeGen/MachineFunctionPass.h"
>  #include "llvm/CodeGen/Passes.h"
> +#include "llvm/CodeGen/StackProtector.h"
> +#include "llvm/IR/Dominators.h"
> +#include "llvm/IR/Function.h"
>  using namespace llvm;
>
>  Pass *MachineFunctionPass::createPrinterPass(raw_ostream &O,
> @@ -43,15 +51,13 @@ void MachineFunctionPass::getAnalysisUsa
>    // because CodeGen overloads that to mean preserving the
> MachineBasicBlock
>    // CFG in addition to the LLVM IR CFG.
>    AU.addPreserved<AliasAnalysis>();
> -  AU.addPreserved("scalar-evolution");
> -  AU.addPreserved("iv-users");
> -  AU.addPreserved("memdep");
> -  AU.addPreserved("live-values");
> -  AU.addPreserved("domtree");
> -  AU.addPreserved("domfrontier");
> -  AU.addPreserved("loops");
> -  AU.addPreserved("lda");
> -  AU.addPreserved("stack-protector");
> +  AU.addPreserved<DominanceFrontier>();
> +  AU.addPreserved<DominatorTreeWrapperPass>();
> +  AU.addPreserved<IVUsers>();
> +  AU.addPreserved<LoopInfoWrapperPass>();
> +  AU.addPreserved<MemoryDependenceAnalysis>();
> +  AU.addPreserved<ScalarEvolution>();
> +  AU.addPreserved<StackProtector>();
>
>    FunctionPass::getAnalysisUsage(AU);
>  }
>
> Modified: llvm/trunk/lib/Target/Hexagon/HexagonRemoveSZExtArgs.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonRemoveSZExtArgs.cpp?rev=227294&r1=227293&r2=227294&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/Hexagon/HexagonRemoveSZExtArgs.cpp (original)
> +++ llvm/trunk/lib/Target/Hexagon/HexagonRemoveSZExtArgs.cpp Tue Jan 27
> 22:57:56 2015
> @@ -15,6 +15,7 @@
>  #include "Hexagon.h"
>  #include "HexagonTargetMachine.h"
>  #include "llvm/CodeGen/MachineFunctionAnalysis.h"
> +#include "llvm/CodeGen/StackProtector.h"
>  #include "llvm/IR/Function.h"
>  #include "llvm/IR/Instructions.h"
>  #include "llvm/Pass.h"
> @@ -42,7 +43,7 @@ namespace {
>      void getAnalysisUsage(AnalysisUsage &AU) const override {
>        AU.addRequired<MachineFunctionAnalysis>();
>        AU.addPreserved<MachineFunctionAnalysis>();
> -      AU.addPreserved("stack-protector");
> +      AU.addPreserved<StackProtector>();
>        FunctionPass::getAnalysisUsage(AU);
>      }
>    };
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h?rev=227294&r1=227293&r2=227294&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXAllocaHoisting.h Tue Jan 27 22:57:56
> 2015
> @@ -15,6 +15,7 @@
>  #define LLVM_LIB_TARGET_NVPTX_NVPTXALLOCAHOISTING_H
>
>  #include "llvm/CodeGen/MachineFunctionAnalysis.h"
> +#include "llvm/CodeGen/StackProtector.h"
>  #include "llvm/IR/DataLayout.h"
>  #include "llvm/Pass.h"
>
> @@ -32,8 +33,8 @@ public:
>
>    void getAnalysisUsage(AnalysisUsage &AU) const override {
>      AU.addRequired<DataLayoutPass>();
> -    AU.addPreserved("stack-protector");
>      AU.addPreserved<MachineFunctionAnalysis>();
> +    AU.addPreserved<StackProtector>();
>    }
>
>    const char *getPassName() const override {
>
> Modified: llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h?rev=227294&r1=227293&r2=227294&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h (original)
> +++ llvm/trunk/lib/Target/NVPTX/NVPTXLowerAggrCopies.h Tue Jan 27 22:57:56
> 2015
> @@ -16,6 +16,7 @@
>  #define LLVM_LIB_TARGET_NVPTX_NVPTXLOWERAGGRCOPIES_H
>
>  #include "llvm/CodeGen/MachineFunctionAnalysis.h"
> +#include "llvm/CodeGen/StackProtector.h"
>  #include "llvm/IR/DataLayout.h"
>  #include "llvm/Pass.h"
>
> @@ -29,8 +30,8 @@ struct NVPTXLowerAggrCopies : public Fun
>
>    void getAnalysisUsage(AnalysisUsage &AU) const override {
>      AU.addRequired<DataLayoutPass>();
> -    AU.addPreserved("stack-protector");
>      AU.addPreserved<MachineFunctionAnalysis>();
> +    AU.addPreserved<StackProtector>();
>    }
>
>    bool runOnFunction(Function &F) override;
>
> Modified: llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp?rev=227294&r1=227293&r2=227294&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/LoopInstSimplify.cpp Tue Jan 27
> 22:57:56 2015
> @@ -18,6 +18,7 @@
>  #include "llvm/Analysis/InstructionSimplify.h"
>  #include "llvm/Analysis/LoopInfo.h"
>  #include "llvm/Analysis/LoopPass.h"
> +#include "llvm/Analysis/ScalarEvolution.h"
>  #include "llvm/IR/DataLayout.h"
>  #include "llvm/IR/Dominators.h"
>  #include "llvm/IR/Instructions.h"
> @@ -47,7 +48,7 @@ namespace {
>        AU.addRequiredID(LoopSimplifyID);
>        AU.addPreservedID(LoopSimplifyID);
>        AU.addPreservedID(LCSSAID);
> -      AU.addPreserved("scalar-evolution");
> +      AU.addPreserved<ScalarEvolution>();
>        AU.addRequired<TargetLibraryInfoWrapperPass>();
>      }
>    };
>
> Modified: llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp?rev=227294&r1=227293&r2=227294&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/LowerSwitch.cpp Tue Jan 27 22:57:56
> 2015
> @@ -63,7 +63,6 @@ namespace {
>      void getAnalysisUsage(AnalysisUsage &AU) const override {
>        // This is a cluster of orthogonal Transforms
>        AU.addPreserved<UnifyFunctionExitNodes>();
> -      AU.addPreserved("mem2reg");
>        AU.addPreservedID(LowerInvokePassID);
>      }
>
>
> Modified: llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp?rev=227294&r1=227293&r2=227294&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/UnifyFunctionExitNodes.cpp Tue Jan 27
> 22:57:56 2015
> @@ -35,7 +35,6 @@ void UnifyFunctionExitNodes::getAnalysis
>    // We preserve the non-critical-edgeness property
>    AU.addPreservedID(BreakCriticalEdgesID);
>    // This is a cluster of orthogonal Transforms
> -  AU.addPreserved("mem2reg");
>    AU.addPreservedID(LowerSwitchID);
>  }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150128/e8c437b0/attachment.html>


More information about the llvm-commits mailing list