forked from OSchip/llvm-project
[FixIrreducible][NewPM] Port -fix-irreducible to NPM
In the NPM, a pass cannot depend on another non-analysis pass. So pin the test that tests that -lowerswitch is run automatically to legacy PM. Reviewed By: sameerds Differential Revision: https://reviews.llvm.org/D89051
This commit is contained in:
parent
9c21c6c966
commit
0689dab844
|
@ -0,0 +1,20 @@
|
|||
//===- FixIrreducible.h - Convert irreducible control-flow into loops -----===//
|
||||
//
|
||||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
||||
// See https://llvm.org/LICENSE.txt for license information.
|
||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#ifndef LLVM_TRANSFORMS_UTILS_FIXIRREDUCIBLE_H
|
||||
#define LLVM_TRANSFORMS_UTILS_FIXIRREDUCIBLE_H
|
||||
|
||||
#include "llvm/IR/PassManager.h"
|
||||
|
||||
namespace llvm {
|
||||
struct FixIrreduciblePass : PassInfoMixin<FixIrreduciblePass> {
|
||||
PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
|
||||
};
|
||||
} // namespace llvm
|
||||
|
||||
#endif // LLVM_TRANSFORMS_UTILS_FIXIRREDUCIBLE_H
|
|
@ -196,6 +196,7 @@
|
|||
#include "llvm/Transforms/Utils/CanonicalizeAliases.h"
|
||||
#include "llvm/Transforms/Utils/CanonicalizeFreezeInLoops.h"
|
||||
#include "llvm/Transforms/Utils/EntryExitInstrumenter.h"
|
||||
#include "llvm/Transforms/Utils/FixIrreducible.h"
|
||||
#include "llvm/Transforms/Utils/InjectTLIMappings.h"
|
||||
#include "llvm/Transforms/Utils/LCSSA.h"
|
||||
#include "llvm/Transforms/Utils/LibCallsShrinkWrap.h"
|
||||
|
|
|
@ -205,6 +205,7 @@ FUNCTION_PASS("dot-cfg-only", CFGOnlyPrinterPass())
|
|||
FUNCTION_PASS("early-cse", EarlyCSEPass(/*UseMemorySSA=*/false))
|
||||
FUNCTION_PASS("early-cse-memssa", EarlyCSEPass(/*UseMemorySSA=*/true))
|
||||
FUNCTION_PASS("ee-instrument", EntryExitInstrumenterPass(/*PostInlining=*/false))
|
||||
FUNCTION_PASS("fix-irreducible", FixIrreduciblePass())
|
||||
FUNCTION_PASS("make-guards-explicit", MakeGuardsExplicitPass())
|
||||
FUNCTION_PASS("post-inline-ee-instrument", EntryExitInstrumenterPass(/*PostInlining=*/true))
|
||||
FUNCTION_PASS("gvn-hoist", GVNHoistPass())
|
||||
|
|
|
@ -66,6 +66,7 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Transforms/Utils/FixIrreducible.h"
|
||||
#include "llvm/ADT/SCCIterator.h"
|
||||
#include "llvm/Analysis/LoopIterator.h"
|
||||
#include "llvm/InitializePasses.h"
|
||||
|
@ -304,11 +305,9 @@ static bool makeReducible(LoopInfo &LI, DominatorTree &DT, Graph &&G) {
|
|||
return Changed;
|
||||
}
|
||||
|
||||
bool FixIrreducible::runOnFunction(Function &F) {
|
||||
static bool FixIrreducibleImpl(Function &F, LoopInfo &LI, DominatorTree &DT) {
|
||||
LLVM_DEBUG(dbgs() << "===== Fix irreducible control-flow in function: "
|
||||
<< F.getName() << "\n");
|
||||
auto &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
|
||||
bool Changed = false;
|
||||
SmallVector<Loop *, 8> WorkList;
|
||||
|
@ -335,3 +334,21 @@ bool FixIrreducible::runOnFunction(Function &F) {
|
|||
|
||||
return Changed;
|
||||
}
|
||||
|
||||
bool FixIrreducible::runOnFunction(Function &F) {
|
||||
auto &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
return FixIrreducibleImpl(F, LI, DT);
|
||||
}
|
||||
|
||||
PreservedAnalyses FixIrreduciblePass::run(Function &F,
|
||||
FunctionAnalysisManager &AM) {
|
||||
auto &LI = AM.getResult<LoopAnalysis>(F);
|
||||
auto &DT = AM.getResult<DominatorTreeAnalysis>(F);
|
||||
if (!FixIrreducibleImpl(F, LI, DT))
|
||||
return PreservedAnalyses::all();
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<LoopAnalysis>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -fix-irreducible -S | FileCheck %s -check-prefix=CHECK
|
||||
; RUN: opt < %s -passes=fix-irreducible -S | FileCheck %s -check-prefix=CHECK
|
||||
|
||||
define i32 @basic(i1 %PredEntry, i1 %PredLeft, i1 %PredRight, i32 %X, i32 %Y) {
|
||||
; CHECK-LABEL: @basic(
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
||||
; RUN: opt < %s -fix-irreducible -S | FileCheck %s
|
||||
; RUN: opt < %s -fix-irreducible -enable-new-pm=0 -S | FileCheck %s
|
||||
|
||||
define void @loop_1(i32 %Value, i1 %PredEntry, i1 %PredD) {
|
||||
; CHECK-LABEL: @loop_1(
|
||||
|
|
Loading…
Reference in New Issue