[llvm] r272847 - [PM] Port Add discriminator pass to new PM

Davide Italiano via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 15 15:10:19 PDT 2016


On Wed, Jun 15, 2016 at 2:51 PM, Xinliang David Li via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: davidxl
> Date: Wed Jun 15 16:51:30 2016
> New Revision: 272847
>
> URL: http://llvm.org/viewvc/llvm-project?rev=272847&view=rev
> Log:
> [PM] Port Add discriminator pass to new PM
>

Thanks for taking care of the porting. Some post-commit comments below.

> Added:
>     llvm/trunk/include/llvm/Transforms/Utils/AddDiscriminators.h
> Modified:
>     llvm/trunk/include/llvm/InitializePasses.h
>     llvm/trunk/lib/Passes/PassBuilder.cpp
>     llvm/trunk/lib/Passes/PassRegistry.def
>     llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp
>     llvm/trunk/lib/Transforms/Utils/Utils.cpp
>     llvm/trunk/test/Transforms/AddDiscriminators/basic.ll
>     llvm/trunk/test/Transforms/AddDiscriminators/call-nested.ll
>     llvm/trunk/test/Transforms/AddDiscriminators/call.ll
>     llvm/trunk/test/Transforms/AddDiscriminators/dbg-declare-discriminator.ll
>     llvm/trunk/test/Transforms/AddDiscriminators/diamond.ll
>     llvm/trunk/test/Transforms/AddDiscriminators/first-only.ll
>     llvm/trunk/test/Transforms/AddDiscriminators/multiple.ll
>     llvm/trunk/test/Transforms/AddDiscriminators/no-discriminators.ll
>     llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll
>
> Modified: llvm/trunk/include/llvm/InitializePasses.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InitializePasses.h?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/InitializePasses.h (original)
> +++ llvm/trunk/include/llvm/InitializePasses.h Wed Jun 15 16:51:30 2016
> @@ -58,7 +58,7 @@ void initializeTarget(PassRegistry&);
>  void initializeAAEvalLegacyPassPass(PassRegistry&);
>  void initializeAAResultsWrapperPassPass(PassRegistry &);
>  void initializeADCELegacyPassPass(PassRegistry&);
> -void initializeAddDiscriminatorsPass(PassRegistry&);
> +void initializeAddDiscriminatorsLegacyPassPass(PassRegistry&);
>  void initializeAddressSanitizerModulePass(PassRegistry&);
>  void initializeAddressSanitizerPass(PassRegistry&);
>  void initializeAliasSetPrinterPass(PassRegistry&);
>
> Added: llvm/trunk/include/llvm/Transforms/Utils/AddDiscriminators.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/AddDiscriminators.h?rev=272847&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Utils/AddDiscriminators.h (added)
> +++ llvm/trunk/include/llvm/Transforms/Utils/AddDiscriminators.h Wed Jun 15 16:51:30 2016
> @@ -0,0 +1,30 @@
> +//===- AddDiscriminators.h -------------------------------------*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This pass adds DWARF discriminators to the IR. Path discriminators are used
> +// to decide what CFG path was taken inside sub-graphs whose instructions share
> +// the same line and column number information.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef LLVM_TRANSFORMS_UTILS_ADDDISCRIMINATORS_H
> +#define LLVM_TRANSFORMS_UTILS_ADDDISCRIMINATORS_H
> +
> +#include "llvm/IR/PassManager.h"
> +
> +namespace llvm {
> +
> +/// Converts loops into loop-closed SSA form.

I think this comment is wrong?

> +class AddDiscriminatorsPass : public PassInfoMixin<AddDiscriminatorsPass> {
> +public:
> +  PreservedAnalyses run(Function &F, AnalysisManager<Function> &AM);
> +};
> +} // end namespace llvm
> +
> +#endif // LLVM_TRANSFORMS_UTILS_LCSSA_H

Ditto.

>
> Modified: llvm/trunk/lib/Passes/PassBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassBuilder.cpp?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Passes/PassBuilder.cpp (original)
> +++ llvm/trunk/lib/Passes/PassBuilder.cpp Wed Jun 15 16:51:30 2016
> @@ -90,6 +90,7 @@
>  #include "llvm/Transforms/Scalar/SROA.h"
>  #include "llvm/Transforms/Scalar/SimplifyCFG.h"
>  #include "llvm/Transforms/Scalar/Sink.h"
> +#include "llvm/Transforms/Utils/AddDiscriminators.h"
>  #include "llvm/Transforms/Scalar/SLPVectorizer.h"
>  #include "llvm/Transforms/Utils/LCSSA.h"
>  #include "llvm/Transforms/Utils/Mem2Reg.h"
>
> Modified: llvm/trunk/lib/Passes/PassRegistry.def
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassRegistry.def?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Passes/PassRegistry.def (original)
> +++ llvm/trunk/lib/Passes/PassRegistry.def Wed Jun 15 16:51:30 2016
> @@ -119,6 +119,7 @@ FUNCTION_ALIAS_ANALYSIS("type-based-aa",
>  #endif
>  FUNCTION_PASS("aa-eval", AAEvaluator())
>  FUNCTION_PASS("adce", ADCEPass())
> +FUNCTION_PASS("add-discriminators", AddDiscriminatorsPass())
>  FUNCTION_PASS("alignment-from-assumptions", AlignmentFromAssumptionsPass())
>  FUNCTION_PASS("bdce", BDCEPass())
>  FUNCTION_PASS("dce", DCEPass())
>
> Modified: llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/AddDiscriminators.cpp Wed Jun 15 16:51:30 2016
> @@ -52,6 +52,7 @@
>  // http://wiki.dwarfstd.org/index.php?title=Path_Discriminators
>  //===----------------------------------------------------------------------===//
>
> +#include "llvm/Transforms/Utils/AddDiscriminators.h"
>  #include "llvm/ADT/DenseMap.h"
>  #include "llvm/ADT/DenseSet.h"
>  #include "llvm/IR/BasicBlock.h"
> @@ -73,20 +74,22 @@ using namespace llvm;
>  #define DEBUG_TYPE "add-discriminators"
>
>  namespace {
> -struct AddDiscriminators : public FunctionPass {
> +// The legacy pass of AddDiscriminators.
> +struct AddDiscriminatorsLegacyPass : public FunctionPass {
>    static char ID; // Pass identification, replacement for typeid
> -  AddDiscriminators() : FunctionPass(ID) {
> -    initializeAddDiscriminatorsPass(*PassRegistry::getPassRegistry());
> +  AddDiscriminatorsLegacyPass() : FunctionPass(ID) {
> +    initializeAddDiscriminatorsLegacyPassPass(*PassRegistry::getPassRegistry());
>    }
>
>    bool runOnFunction(Function &F) override;
>  };
> +
>  } // end anonymous namespace
>
> -char AddDiscriminators::ID = 0;
> -INITIALIZE_PASS_BEGIN(AddDiscriminators, "add-discriminators",
> +char AddDiscriminatorsLegacyPass::ID = 0;
> +INITIALIZE_PASS_BEGIN(AddDiscriminatorsLegacyPass, "add-discriminators",
>                        "Add DWARF path discriminators", false, false)
> -INITIALIZE_PASS_END(AddDiscriminators, "add-discriminators",
> +INITIALIZE_PASS_END(AddDiscriminatorsLegacyPass, "add-discriminators",
>                      "Add DWARF path discriminators", false, false)
>
>  // Command line option to disable discriminator generation even in the
> @@ -96,8 +99,9 @@ static cl::opt<bool> NoDiscriminators(
>      "no-discriminators", cl::init(false),
>      cl::desc("Disable generation of discriminator information."));
>
> +// Create the legacy AddDiscriminatorsPass.
>  FunctionPass *llvm::createAddDiscriminatorsPass() {
> -  return new AddDiscriminators();
> +  return new AddDiscriminatorsLegacyPass();
>  }
>
>  /// \brief Assign DWARF discriminators.
> @@ -151,7 +155,7 @@ FunctionPass *llvm::createAddDiscriminat
>  /// lexical block for I2 and all the instruction in B2 that share the same
>  /// file and line location as I2. This new lexical block will have a
>  /// different discriminator number than I1.
> -bool AddDiscriminators::runOnFunction(Function &F) {
> +bool addDiscriminators(Function &F) {

This can be probably staticized, no?

>    // If the function has debug information, but the user has disabled
>    // discriminators, do nothing.
>    // Simlarly, if the function has no debug info, do nothing.
> @@ -240,3 +244,13 @@ bool AddDiscriminators::runOnFunction(Fu
>    }
>    return Changed;
>  }
> +
> +bool AddDiscriminatorsLegacyPass::runOnFunction(Function &F) {
> +  return addDiscriminators(F);
> +}
> +PreservedAnalyses AddDiscriminatorsPass::run(Function &F,
> +                                             AnalysisManager<Function> &AM) {
> +  addDiscriminators(F);
> +  // Only modifies debug info.
> +  return PreservedAnalyses::all();
> +}
>

I'd rather use the return value of addDiscriminator and preserve all
the analyses iff the IR is not mutated.
If you are confident that this preserves all the transformations,
please commit the change separately (and do that for both the new and
the old PM).

> Modified: llvm/trunk/lib/Transforms/Utils/Utils.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/Utils.cpp?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Utils/Utils.cpp (original)
> +++ llvm/trunk/lib/Transforms/Utils/Utils.cpp Wed Jun 15 16:51:30 2016
> @@ -21,7 +21,7 @@ using namespace llvm;
>  /// initializeTransformUtils - Initialize all passes in the TransformUtils
>  /// library.
>  void llvm::initializeTransformUtils(PassRegistry &Registry) {
> -  initializeAddDiscriminatorsPass(Registry);
> +  initializeAddDiscriminatorsLegacyPassPass(Registry);
>    initializeBreakCriticalEdgesPass(Registry);
>    initializeInstNamerPass(Registry);
>    initializeLCSSAWrapperPassPass(Registry);
>
> Modified: llvm/trunk/test/Transforms/AddDiscriminators/basic.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/basic.ll?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/AddDiscriminators/basic.ll (original)
> +++ llvm/trunk/test/Transforms/AddDiscriminators/basic.ll Wed Jun 15 16:51:30 2016
> @@ -1,4 +1,5 @@
>  ; RUN: opt < %s -add-discriminators -S | FileCheck %s
> +; RUN: opt < %s -passes=add-discriminators -S | FileCheck %s
>
>  ; Basic DWARF discriminator test. All the instructions in block
>  ; 'if.then' should have a different discriminator value than
>
> Modified: llvm/trunk/test/Transforms/AddDiscriminators/call-nested.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/call-nested.ll?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/AddDiscriminators/call-nested.ll (original)
> +++ llvm/trunk/test/Transforms/AddDiscriminators/call-nested.ll Wed Jun 15 16:51:30 2016
> @@ -1,4 +1,5 @@
>  ; RUN: opt < %s -add-discriminators -S | FileCheck %s
> +; RUN: opt < %s -passes=add-discriminators -S | FileCheck %s
>
>  ; Discriminator support for calls that are defined in one line:
>  ; #1 int foo(int, int);
>
> Modified: llvm/trunk/test/Transforms/AddDiscriminators/call.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/call.ll?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/AddDiscriminators/call.ll (original)
> +++ llvm/trunk/test/Transforms/AddDiscriminators/call.ll Wed Jun 15 16:51:30 2016
> @@ -1,4 +1,5 @@
>  ; RUN: opt < %s -add-discriminators -S | FileCheck %s
> +; RUN: opt < %s -passes=add-discriminators -S | FileCheck %s
>
>  ; Discriminator support for calls that are defined in one line:
>  ; #1 void bar();
>
> Modified: llvm/trunk/test/Transforms/AddDiscriminators/dbg-declare-discriminator.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/dbg-declare-discriminator.ll?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/AddDiscriminators/dbg-declare-discriminator.ll (original)
> +++ llvm/trunk/test/Transforms/AddDiscriminators/dbg-declare-discriminator.ll Wed Jun 15 16:51:30 2016
> @@ -1,4 +1,5 @@
>  ; RUN: opt -S -add-discriminators < %s | FileCheck %s
> +; RUN: opt -S -passes=add-discriminators < %s | FileCheck %s
>
>  declare void @llvm.dbg.declare(metadata, metadata, metadata)
>
>
> Modified: llvm/trunk/test/Transforms/AddDiscriminators/diamond.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/diamond.ll?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/AddDiscriminators/diamond.ll (original)
> +++ llvm/trunk/test/Transforms/AddDiscriminators/diamond.ll Wed Jun 15 16:51:30 2016
> @@ -1,4 +1,5 @@
>  ; RUN: opt < %s -add-discriminators -S | FileCheck %s
> +; RUN: opt < %s -passes=add-discriminators -S | FileCheck %s
>
>  ; Discriminator support for diamond-shaped CFG.:
>  ; #1 void bar(int);
>
> Modified: llvm/trunk/test/Transforms/AddDiscriminators/first-only.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/first-only.ll?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/AddDiscriminators/first-only.ll (original)
> +++ llvm/trunk/test/Transforms/AddDiscriminators/first-only.ll Wed Jun 15 16:51:30 2016
> @@ -1,4 +1,5 @@
>  ; RUN: opt < %s -add-discriminators -S | FileCheck %s
> +; RUN: opt < %s -passes=add-discriminators -S | FileCheck %s
>
>  ; Test that the only instructions that receive a new discriminator in
>  ; the block 'if.then' are those that share the same line number as
>
> Modified: llvm/trunk/test/Transforms/AddDiscriminators/multiple.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/multiple.ll?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/AddDiscriminators/multiple.ll (original)
> +++ llvm/trunk/test/Transforms/AddDiscriminators/multiple.ll Wed Jun 15 16:51:30 2016
> @@ -1,4 +1,5 @@
>  ; RUN: opt < %s -add-discriminators -S | FileCheck %s
> +; RUN: opt < %s -passes=add-discriminators -S | FileCheck %s
>
>  ; Discriminator support for multiple CFG paths on the same line.
>  ;
>
> Modified: llvm/trunk/test/Transforms/AddDiscriminators/no-discriminators.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/no-discriminators.ll?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/AddDiscriminators/no-discriminators.ll (original)
> +++ llvm/trunk/test/Transforms/AddDiscriminators/no-discriminators.ll Wed Jun 15 16:51:30 2016
> @@ -1,4 +1,5 @@
>  ; RUN: opt < %s -add-discriminators -S | FileCheck %s
> +; RUN: opt < %s -passes=add-discriminators -S | FileCheck %s
>
>  ; We should not generate discriminators for DWARF versions prior to 4.
>  ;
>
> Modified: llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll?rev=272847&r1=272846&r2=272847&view=diff
> ==============================================================================
> --- llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll (original)
> +++ llvm/trunk/test/Transforms/AddDiscriminators/oneline.ll Wed Jun 15 16:51:30 2016
> @@ -1,4 +1,5 @@
>  ; RUN: opt < %s -add-discriminators -S | FileCheck %s
> +; RUN: opt < %s -passes=add-discriminators -S | FileCheck %s
>
>  ; Discriminator support for code that is written in one line:
>  ; #1 int foo(int i) {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



-- 
Davide

"There are no solved problems; there are only problems that are more
or less solved" -- Henri Poincare


More information about the llvm-commits mailing list