]> granicus.if.org Git - llvm/commitdiff
[PM] Port Add discriminator pass to new PM
authorXinliang David Li <davidxl@google.com>
Wed, 15 Jun 2016 21:51:30 +0000 (21:51 +0000)
committerXinliang David Li <davidxl@google.com>
Wed, 15 Jun 2016 21:51:30 +0000 (21:51 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@272847 91177308-0d34-0410-b5e6-96231b3b80d8

15 files changed:
include/llvm/InitializePasses.h
include/llvm/Transforms/Utils/AddDiscriminators.h [new file with mode: 0644]
lib/Passes/PassBuilder.cpp
lib/Passes/PassRegistry.def
lib/Transforms/Utils/AddDiscriminators.cpp
lib/Transforms/Utils/Utils.cpp
test/Transforms/AddDiscriminators/basic.ll
test/Transforms/AddDiscriminators/call-nested.ll
test/Transforms/AddDiscriminators/call.ll
test/Transforms/AddDiscriminators/dbg-declare-discriminator.ll
test/Transforms/AddDiscriminators/diamond.ll
test/Transforms/AddDiscriminators/first-only.ll
test/Transforms/AddDiscriminators/multiple.ll
test/Transforms/AddDiscriminators/no-discriminators.ll
test/Transforms/AddDiscriminators/oneline.ll

index 3ce3a01a17e4257d6e45dcd79229e20061205523..fe4b9bd9ce9b93ea4d8422dd4cc202881675dfc0 100644 (file)
@@ -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&);
diff --git a/include/llvm/Transforms/Utils/AddDiscriminators.h b/include/llvm/Transforms/Utils/AddDiscriminators.h
new file mode 100644 (file)
index 0000000..6096d21
--- /dev/null
@@ -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
index a38b0dd6aa20491c7594d1233d2d2bd2b764f1c4..fff2c0152f27bc8b901398e1cde3363618a94a0a 100644 (file)
@@ -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"
index b36699cdd1ef91a385ab13a09077356d40d39995..e84f3933db8045e62148cf8c9b094e4fc80e1973 100644 (file)
@@ -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())
index 2a6b6eb1b0b0c8745ef79ad329d0fc0ee19120e9..baf65b628b686fc0fd6ff85612fd1f5c6f4e1626 100644 (file)
@@ -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();
+}
index 60cb635aae58a21c96a0ea02615bcf3374ed5741..e363dd40da7f1d83b1e197d7fa3c2cafba3e791e 100644 (file)
@@ -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);
index f8cda5c66432df47adeec74ac2e568fa7f0a5f06..801eda2b066521d7478d9ee371cca028dc34f2d9 100644 (file)
@@ -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
index a613c74a6a4cef26e7bbbdf362cbfac63eba004e..481d6f260047c89d8a7bdeda0883835279073451 100644 (file)
@@ -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);
index 36ff18aca7e04e853b1f224b87af0ba7c106f20b..6844a9851ec5887d8346a01520b0c2e59447905c 100644 (file)
@@ -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();
index ca5eb1732eee4d9e4911ce39eb604ef34f45b226..bc2328f4a42af5725f37b7b2daf1eb0e58cf91fc 100644 (file)
@@ -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)
 
index 70a05eb83d71412062802ee87d766bee3bf96832..b3afe728547246e4a339a6fec921956645b2d7ce 100644 (file)
@@ -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);
index 95d6149b92e00db433c40990b12a3cf053e08181..1bd8dae5d05cdf78ea4c6c66a89f904fe1d0bf5d 100644 (file)
@@ -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
index bacef89756b4bb99a0f1ba8d286f542a436c9e8d..387689caddff084982bc83d04ad0e16c9b35fbac 100644 (file)
@@ -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.
 ;
index 552d8e6db17116527b259eaada1c36857c7bc036..5fd8b0fa5a2315819c781a33d02d9afefaf3816c 100644 (file)
@@ -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.
 ;
index f07fa09ce0e72d39d274ee27c56ff735ce5229e0..72d7a6eadbf92ff4ac66a042b9ee81bd42247a2c 100644 (file)
@@ -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) {