1 #include "llvm/Transforms/IPO/SCCP.h"
2 #include "llvm/Analysis/TargetLibraryInfo.h"
3 #include "llvm/Transforms/IPO.h"
4 #include "llvm/Transforms/Scalar/SCCP.h"
8 PreservedAnalyses IPSCCPPass::run(Module &M, ModuleAnalysisManager &AM) {
9 const DataLayout &DL = M.getDataLayout();
10 auto &TLI = AM.getResult<TargetLibraryAnalysis>(M);
11 if (!runIPSCCP(M, DL, &TLI))
12 return PreservedAnalyses::all();
13 return PreservedAnalyses::none();
18 //===--------------------------------------------------------------------===//
20 /// IPSCCP Class - This class implements interprocedural Sparse Conditional
21 /// Constant Propagation.
23 class IPSCCPLegacyPass : public ModulePass {
27 IPSCCPLegacyPass() : ModulePass(ID) {
28 initializeIPSCCPLegacyPassPass(*PassRegistry::getPassRegistry());
31 bool runOnModule(Module &M) override {
34 const DataLayout &DL = M.getDataLayout();
35 const TargetLibraryInfo *TLI =
36 &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
37 return runIPSCCP(M, DL, TLI);
40 void getAnalysisUsage(AnalysisUsage &AU) const override {
41 AU.addRequired<TargetLibraryInfoWrapperPass>();
45 } // end anonymous namespace
47 char IPSCCPLegacyPass::ID = 0;
49 INITIALIZE_PASS_BEGIN(IPSCCPLegacyPass, "ipsccp",
50 "Interprocedural Sparse Conditional Constant Propagation",
52 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
53 INITIALIZE_PASS_END(IPSCCPLegacyPass, "ipsccp",
54 "Interprocedural Sparse Conditional Constant Propagation",
57 // createIPSCCPPass - This is the public interface to this file.
58 ModulePass *llvm::createIPSCCPPass() { return new IPSCCPLegacyPass(); }