[llvm] r271822 - [PM] code refactoring /NFC

Chandler Carruth via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 4 22:08:45 PDT 2016


In the future, I'd also suggest doing clang-format first, and separately.

On Sat, Jun 4, 2016 at 10:07 PM Xinliang David Li via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> yes.  The change extract the transformation into its own class (to be
> reusable) and make a new class for the legacy pass as a wrapper to the
> newly extracted one.  (the larger diff is caused by clang-format).
>
> David
>
> On Sat, Jun 4, 2016 at 9:40 PM, Chandler Carruth via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> On Sat, Jun 4, 2016 at 8:46 PM Xinliang David Li via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: davidxl
>>> Date: Sat Jun  4 22:40:03 2016
>>> New Revision: 271822
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=271822&view=rev
>>> Log:
>>> [PM] code refactoring /NFC
>>>
>>
>> Please write somewhat more detailed commit messages? For example, what
>> refactoring? To what end? That makes it much easier to do code review.
>>
>>
>>>
>>> Modified:
>>>     llvm/trunk/include/llvm/InitializePasses.h
>>>     llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp
>>>     llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp
>>>
>>> Modified: llvm/trunk/include/llvm/InitializePasses.h
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InitializePasses.h?rev=271822&r1=271821&r2=271822&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/include/llvm/InitializePasses.h (original)
>>> +++ llvm/trunk/include/llvm/InitializePasses.h Sat Jun  4 22:40:03 2016
>>> @@ -123,7 +123,7 @@ void initializeEarlyIfConverterPass(Pass
>>>  void initializeEdgeBundlesPass(PassRegistry&);
>>>  void initializeExpandPostRAPass(PassRegistry&);
>>>  void initializeAAResultsWrapperPassPass(PassRegistry &);
>>> -void initializeGCOVProfilerPass(PassRegistry&);
>>> +void initializeGCOVProfilerLegacyPassPass(PassRegistry&);
>>>  void initializePGOInstrumentationGenLegacyPassPass(PassRegistry&);
>>>  void initializePGOInstrumentationUseLegacyPassPass(PassRegistry&);
>>>  void initializePGOIndirectCallPromotionLegacyPassPass(PassRegistry&);
>>>
>>> Modified: llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp?rev=271822&r1=271821&r2=271822&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp
>>> (original)
>>> +++ llvm/trunk/lib/Transforms/Instrumentation/GCOVProfiling.cpp Sat Jun
>>> 4 22:40:03 2016
>>> @@ -68,85 +68,95 @@ GCOVOptions GCOVOptions::getDefault() {
>>>  }
>>>
>>>  namespace {
>>> -  class GCOVFunction;
>>> +class GCOVFunction;
>>>
>>> -  class GCOVProfiler : public ModulePass {
>>> -  public:
>>> -    static char ID;
>>> -    GCOVProfiler() : GCOVProfiler(GCOVOptions::getDefault()) {}
>>> -    GCOVProfiler(const GCOVOptions &Opts) : ModulePass(ID),
>>> Options(Opts) {
>>> -      assert((Options.EmitNotes || Options.EmitData) &&
>>> -             "GCOVProfiler asked to do nothing?");
>>> -      ReversedVersion[0] = Options.Version[3];
>>> -      ReversedVersion[1] = Options.Version[2];
>>> -      ReversedVersion[2] = Options.Version[1];
>>> -      ReversedVersion[3] = Options.Version[0];
>>> -      ReversedVersion[4] = '\0';
>>> -      initializeGCOVProfilerPass(*PassRegistry::getPassRegistry());
>>> -    }
>>> -    const char *getPassName() const override {
>>> -      return "GCOV Profiler";
>>> -    }
>>> -
>>> -  private:
>>> -    bool runOnModule(Module &M) override;
>>> -
>>> -    // Create the .gcno files for the Module based on DebugInfo.
>>> -    void emitProfileNotes();
>>> -
>>> -    // Modify the program to track transitions along edges and call
>>> into the
>>> -    // profiling runtime to emit .gcda files when run.
>>> -    bool emitProfileArcs();
>>> -
>>> -    // Get pointers to the functions in the runtime library.
>>> -    Constant *getStartFileFunc();
>>> -    Constant *getIncrementIndirectCounterFunc();
>>> -    Constant *getEmitFunctionFunc();
>>> -    Constant *getEmitArcsFunc();
>>> -    Constant *getSummaryInfoFunc();
>>> -    Constant *getDeleteWriteoutFunctionListFunc();
>>> -    Constant *getDeleteFlushFunctionListFunc();
>>> -    Constant *getEndFileFunc();
>>> -
>>> -    // Create or retrieve an i32 state value that is used to represent
>>> the
>>> -    // pred block number for certain non-trivial edges.
>>> -    GlobalVariable *getEdgeStateValue();
>>> -
>>> -    // Produce a table of pointers to counters, by predecessor and
>>> successor
>>> -    // block number.
>>> -    GlobalVariable *buildEdgeLookupTable(Function *F,
>>> -                                         GlobalVariable *Counter,
>>> -                                         const UniqueVector<BasicBlock
>>> *>&Preds,
>>> -                                         const
>>> UniqueVector<BasicBlock*>&Succs);
>>> -
>>> -    // Add the function to write out all our counters to the global
>>> destructor
>>> -    // list.
>>> -    Function *insertCounterWriteout(ArrayRef<std::pair<GlobalVariable*,
>>> -                                                       MDNode*> >);
>>> -    Function *insertFlush(ArrayRef<std::pair<GlobalVariable*, MDNode*>
>>> >);
>>> -    void insertIndirectCounterIncrement();
>>> -
>>> -    std::string mangleName(const DICompileUnit *CU, const char
>>> *NewStem);
>>> -
>>> -    GCOVOptions Options;
>>> -
>>> -    // Reversed, NUL-terminated copy of Options.Version.
>>> -    char ReversedVersion[5];
>>> -    // Checksum, produced by hash of EdgeDestinations
>>> -    SmallVector<uint32_t, 4> FileChecksums;
>>> -
>>> -    Module *M;
>>> -    LLVMContext *Ctx;
>>> -    SmallVector<std::unique_ptr<GCOVFunction>, 16> Funcs;
>>> -  };
>>> +class GCOVProfiler {
>>> +public:
>>> +  GCOVProfiler() : GCOVProfiler(GCOVOptions::getDefault()) {}
>>> +  GCOVProfiler(const GCOVOptions &Opts) : Options(Opts) {
>>> +    assert((Options.EmitNotes || Options.EmitData) &&
>>> +           "GCOVProfiler asked to do nothing?");
>>> +    ReversedVersion[0] = Options.Version[3];
>>> +    ReversedVersion[1] = Options.Version[2];
>>> +    ReversedVersion[2] = Options.Version[1];
>>> +    ReversedVersion[3] = Options.Version[0];
>>> +    ReversedVersion[4] = '\0';
>>> +  }
>>> +  bool runOnModule(Module &M);
>>> +
>>> +private:
>>> +  // Create the .gcno files for the Module based on DebugInfo.
>>> +  void emitProfileNotes();
>>> +
>>> +  // Modify the program to track transitions along edges and call into
>>> the
>>> +  // profiling runtime to emit .gcda files when run.
>>> +  bool emitProfileArcs();
>>> +
>>> +  // Get pointers to the functions in the runtime library.
>>> +  Constant *getStartFileFunc();
>>> +  Constant *getIncrementIndirectCounterFunc();
>>> +  Constant *getEmitFunctionFunc();
>>> +  Constant *getEmitArcsFunc();
>>> +  Constant *getSummaryInfoFunc();
>>> +  Constant *getDeleteWriteoutFunctionListFunc();
>>> +  Constant *getDeleteFlushFunctionListFunc();
>>> +  Constant *getEndFileFunc();
>>> +
>>> +  // Create or retrieve an i32 state value that is used to represent the
>>> +  // pred block number for certain non-trivial edges.
>>> +  GlobalVariable *getEdgeStateValue();
>>> +
>>> +  // Produce a table of pointers to counters, by predecessor and
>>> successor
>>> +  // block number.
>>> +  GlobalVariable *buildEdgeLookupTable(Function *F, GlobalVariable
>>> *Counter,
>>> +                                       const UniqueVector<BasicBlock *>
>>> &Preds,
>>> +                                       const UniqueVector<BasicBlock *>
>>> &Succs);
>>> +
>>> +  // Add the function to write out all our counters to the global
>>> destructor
>>> +  // list.
>>> +  Function *
>>> +  insertCounterWriteout(ArrayRef<std::pair<GlobalVariable *, MDNode
>>> *>>);
>>> +  Function *insertFlush(ArrayRef<std::pair<GlobalVariable *, MDNode
>>> *>>);
>>> +  void insertIndirectCounterIncrement();
>>> +
>>> +  std::string mangleName(const DICompileUnit *CU, const char *NewStem);
>>> +
>>> +  GCOVOptions Options;
>>> +
>>> +  // Reversed, NUL-terminated copy of Options.Version.
>>> +  char ReversedVersion[5];
>>> +  // Checksum, produced by hash of EdgeDestinations
>>> +  SmallVector<uint32_t, 4> FileChecksums;
>>> +
>>> +  Module *M;
>>> +  LLVMContext *Ctx;
>>> +  SmallVector<std::unique_ptr<GCOVFunction>, 16> Funcs;
>>> +};
>>> +
>>> +class GCOVProfilerLegacyPass : public ModulePass {
>>> +public:
>>> +  static char ID;
>>> +  GCOVProfilerLegacyPass()
>>> +      : GCOVProfilerLegacyPass(GCOVOptions::getDefault()) {}
>>> +  GCOVProfilerLegacyPass(const GCOVOptions &Opts)
>>> +      : ModulePass(ID), Profiler(Opts) {
>>> +
>>> initializeGCOVProfilerLegacyPassPass(*PassRegistry::getPassRegistry());
>>> +  }
>>> +  const char *getPassName() const override { return "GCOV Profiler"; }
>>> +
>>> +  bool runOnModule(Module &M) override { return
>>> Profiler.runOnModule(M); }
>>> +
>>> +private:
>>> +  GCOVProfiler Profiler;
>>> +};
>>>  }
>>>
>>> -char GCOVProfiler::ID = 0;
>>> -INITIALIZE_PASS(GCOVProfiler, "insert-gcov-profiling",
>>> +char GCOVProfilerLegacyPass::ID = 0;
>>> +INITIALIZE_PASS(GCOVProfilerLegacyPass, "insert-gcov-profiling",
>>>                  "Insert instrumentation for GCOV profiling", false,
>>> false)
>>>
>>>  ModulePass *llvm::createGCOVProfilerPass(const GCOVOptions &Options) {
>>> -  return new GCOVProfiler(Options);
>>> +  return new GCOVProfilerLegacyPass(Options);
>>>  }
>>>
>>>  static StringRef getFunctionName(const DISubprogram *SP) {
>>>
>>> Modified: llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp?rev=271822&r1=271821&r2=271822&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp
>>> (original)
>>> +++ llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp Sat
>>> Jun  4 22:40:03 2016
>>> @@ -59,7 +59,7 @@ void llvm::initializeInstrumentation(Pas
>>>    initializeAddressSanitizerPass(Registry);
>>>    initializeAddressSanitizerModulePass(Registry);
>>>    initializeBoundsCheckingPass(Registry);
>>> -  initializeGCOVProfilerPass(Registry);
>>> +  initializeGCOVProfilerLegacyPassPass(Registry);
>>>    initializePGOInstrumentationGenLegacyPassPass(Registry);
>>>    initializePGOInstrumentationUseLegacyPassPass(Registry);
>>>    initializePGOIndirectCallPromotionLegacyPassPass(Registry);
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160605/86bb8ff4/attachment.html>


More information about the llvm-commits mailing list