Skip to content

Commit ce08c7e

Browse files
authored
[CodeGen] Port SelectOptimize to new pass manager (#74920)
- Use `BlockFrequencyInfoWrapperPass` in legacy pass so member `std::unique_ptr<BranchProbabilityInfo> BPI` could be removed. - Member `DominatorTree *DT = nullptr` is unused, remove it.
1 parent 87e2e89 commit ce08c7e

File tree

11 files changed

+171
-63
lines changed

11 files changed

+171
-63
lines changed

llvm/include/llvm/CodeGen/CodeGenPassBuilder.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "llvm/ADT/StringRef.h"
2020
#include "llvm/Analysis/AliasAnalysis.h"
2121
#include "llvm/Analysis/BasicAliasAnalysis.h"
22+
#include "llvm/Analysis/ProfileSummaryInfo.h"
2223
#include "llvm/Analysis/ScopedNoAliasAA.h"
2324
#include "llvm/Analysis/TargetTransformInfo.h"
2425
#include "llvm/Analysis/TypeBasedAliasAnalysis.h"
@@ -31,6 +32,7 @@
3132
#include "llvm/CodeGen/PreISelIntrinsicLowering.h"
3233
#include "llvm/CodeGen/ReplaceWithVeclib.h"
3334
#include "llvm/CodeGen/SafeStack.h"
35+
#include "llvm/CodeGen/SelectOptimize.h"
3436
#include "llvm/CodeGen/UnreachableBlockElim.h"
3537
#include "llvm/CodeGen/WasmEHPrepare.h"
3638
#include "llvm/CodeGen/WinEHPrepare.h"
@@ -470,6 +472,8 @@ Error CodeGenPassBuilder<Derived>::buildPipeline(
470472
raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut,
471473
CodeGenFileType FileType) const {
472474
AddIRPass addIRPass(MPM, Opt.DebugPM);
475+
// `ProfileSummaryInfo` is always valid.
476+
addIRPass(RequireAnalysisPass<ProfileSummaryAnalysis, Module>());
473477
addISelPasses(addIRPass);
474478

475479
AddMachinePass addPass(MFPM);
@@ -657,7 +661,7 @@ void CodeGenPassBuilder<Derived>::addIRPasses(AddIRPass &addPass) const {
657661

658662
// Convert conditional moves to conditional jumps when profitable.
659663
if (getOptLevel() != CodeGenOptLevel::None && !Opt.DisableSelectOptimize)
660-
addPass(SelectOptimizePass());
664+
addPass(SelectOptimizePass(&TM));
661665
}
662666

663667
/// Turn exception handling constructs into something the code generators can

llvm/include/llvm/CodeGen/MachinePassRegistry.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ FUNCTION_PASS("post-inline-ee-instrument", EntryExitInstrumenterPass, (true))
5454
FUNCTION_PASS("replace-with-veclib", ReplaceWithVeclib, ())
5555
FUNCTION_PASS("safe-stack", SafeStackPass, (TM))
5656
FUNCTION_PASS("scalarize-masked-mem-intrin", ScalarizeMaskedMemIntrinPass, ())
57+
FUNCTION_PASS("select-optimize", SelectOptimizePass, (TM))
5758
FUNCTION_PASS("tlshoist", TLSVariableHoistPass, ())
5859
FUNCTION_PASS("unreachableblockelim", UnreachableBlockElimPass, ())
5960
FUNCTION_PASS("verify", VerifierPass, ())
@@ -128,7 +129,6 @@ DUMMY_FUNCTION_PASS("codegenprepare", CodeGenPreparePass, ())
128129
DUMMY_FUNCTION_PASS("expandmemcmp", ExpandMemCmpPass, ())
129130
DUMMY_FUNCTION_PASS("gc-lowering", GCLoweringPass, ())
130131
DUMMY_FUNCTION_PASS("indirectbr-expand", IndirectBrExpandPass, ())
131-
DUMMY_FUNCTION_PASS("select-optimize", SelectOptimizePass, ())
132132
DUMMY_FUNCTION_PASS("shadow-stack-gc-lowering", ShadowStackGCLoweringPass, ())
133133
DUMMY_FUNCTION_PASS("sjljehprepare", SjLjEHPreparePass, ())
134134
DUMMY_FUNCTION_PASS("stack-protector", StackProtectorPass, ())
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//===--- llvm/CodeGen/SelectOptimize.h ---------------------------*- C++ -*-==//
2+
//
3+
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4+
// See https://llvm.org/LICENSE.txt for license information.
5+
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6+
//
7+
//===----------------------------------------------------------------------===//
8+
///
9+
/// \file
10+
/// This file contains the declaration of the SelectOptimizePass class,
11+
/// its corresponding pass name is `select-optimize`.
12+
///
13+
//===----------------------------------------------------------------------===//
14+
15+
#ifndef LLVM_CODEGEN_SELECTOPTIMIZE_H
16+
#define LLVM_CODEGEN_SELECTOPTIMIZE_H
17+
18+
#include "llvm/IR/PassManager.h"
19+
20+
namespace llvm {
21+
22+
class TargetMachine;
23+
24+
class SelectOptimizePass : public PassInfoMixin<SelectOptimizePass> {
25+
const TargetMachine *TM;
26+
27+
public:
28+
explicit SelectOptimizePass(const TargetMachine *TM) : TM(TM) {}
29+
PreservedAnalyses run(Function &F, FunctionAnalysisManager &FAM);
30+
};
31+
32+
} // namespace llvm
33+
34+
#endif // LLVM_CODEGEN_SELECTOPTIMIZE_H

0 commit comments

Comments
 (0)