Skip to content

Commit

Permalink
SafepointIRVerifier port to new Pass Manager
Browse files Browse the repository at this point in the history
Straightforward port of StatepointIRVerifier pass to new Pass Manager framework.

Fix By: skatkov
Reviewed By: fedor.sergeev
Differential Revision: https://reviews.llvm.org/D59825

This is a re-land of r357147/r357148 with LLVM_ENABLE_MODULES build fixed.
Adding IR/SafepointIRVerifier.h into its own module.

llvm-svn: 357361
  • Loading branch information
Fedor Sergeev committed Mar 31, 2019
1 parent 7c67dbd commit a2ed448
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 0 deletions.
12 changes: 12 additions & 0 deletions llvm/include/llvm/IR/SafepointIRVerifier.h
Expand Up @@ -18,6 +18,8 @@
#ifndef LLVM_IR_SAFEPOINT_IR_VERIFIER
#define LLVM_IR_SAFEPOINT_IR_VERIFIER

#include "llvm/IR/PassManager.h"

namespace llvm {

class Function;
Expand All @@ -29,6 +31,16 @@ void verifySafepointIR(Function &F);
/// Create an instance of the safepoint verifier pass which can be added to
/// a pass pipeline to check for relocation bugs.
FunctionPass *createSafepointIRVerifierPass();

/// Create an instance of the safepoint verifier pass which can be added to
/// a pass pipeline to check for relocation bugs.
class SafepointIRVerifierPass : public PassInfoMixin<SafepointIRVerifierPass> {

public:
explicit SafepointIRVerifierPass() {}

PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
};
}

#endif // LLVM_IR_SAFEPOINT_IR_VERIFIER
1 change: 1 addition & 0 deletions llvm/include/llvm/module.modulemap
Expand Up @@ -236,6 +236,7 @@ module LLVM_intrinsic_gen {
}
module IR_IntrinsicInst { header "IR/IntrinsicInst.h" export * }
module IR_PatternMatch { header "IR/PatternMatch.h" export * }
module IR_SafepointIRVerifier { header "IR/SafepointIRVerifier.h" export * }
module IR_Statepoint { header "IR/Statepoint.h" export * }

export *
Expand Down
11 changes: 11 additions & 0 deletions llvm/lib/IR/SafepointIRVerifier.cpp
Expand Up @@ -197,6 +197,17 @@ class CFGDeadness {
static void Verify(const Function &F, const DominatorTree &DT,
const CFGDeadness &CD);

namespace llvm {
PreservedAnalyses SafepointIRVerifierPass::run(Function &F,
FunctionAnalysisManager &AM) {
const auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
CFGDeadness CD;
CD.processFunction(F, DT);
Verify(F, DT, CD);
return PreservedAnalyses::all();
}
}

namespace {

struct SafepointIRVerifier : public FunctionPass {
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Passes/PassBuilder.cpp
Expand Up @@ -56,6 +56,7 @@
#include "llvm/IR/Dominators.h"
#include "llvm/IR/IRPrintingPasses.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/SafepointIRVerifier.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/FormatVariadic.h"
Expand Down
1 change: 1 addition & 0 deletions llvm/lib/Passes/PassRegistry.def
Expand Up @@ -231,6 +231,7 @@ FUNCTION_PASS("verify<domtree>", DominatorTreeVerifierPass())
FUNCTION_PASS("verify<loops>", LoopVerifierPass())
FUNCTION_PASS("verify<memoryssa>", MemorySSAVerifierPass())
FUNCTION_PASS("verify<regions>", RegionInfoVerifierPass())
FUNCTION_PASS("verify<safepoint-ir>", SafepointIRVerifierPass())
FUNCTION_PASS("view-cfg", CFGViewerPass())
FUNCTION_PASS("view-cfg-only", CFGOnlyViewerPass())
FUNCTION_PASS("transform-warning", WarnMissedTransformationsPass())
Expand Down

0 comments on commit a2ed448

Please sign in to comment.