[PM] Port Add discriminator pass to new PM
llvm-svn: 272847
This commit is contained in:
parent
844e2df94b
commit
1eaecefaf9
|
@ -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&);
|
||||
|
|
|
@ -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.
|
||||
class AddDiscriminatorsPass : public PassInfoMixin<AddDiscriminatorsPass> {
|
||||
public:
|
||||
PreservedAnalyses run(Function &F, AnalysisManager<Function> &AM);
|
||||
};
|
||||
} // end namespace llvm
|
||||
|
||||
#endif // LLVM_TRANSFORMS_UTILS_LCSSA_H
|
|
@ -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"
|
||||
|
|
|
@ -119,6 +119,7 @@ FUNCTION_ALIAS_ANALYSIS("type-based-aa", TypeBasedAA())
|
|||
#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())
|
||||
|
|
|
@ -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::createAddDiscriminatorsPass() {
|
|||
/// 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) {
|
||||
// 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(Function &F) {
|
|||
}
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
;
|
||||
|
|
|
@ -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.
|
||||
;
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue