LLVM 24.0.0git
BasicBlockMatchingAndInference.h
Go to the documentation of this file.
1//===- llvm/CodeGen/BasicBlockMatchingAndInference.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// Infer weights for all basic blocks using matching and inference.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_CODEGEN_BASIC_BLOCK_AND_INFERENCE_H
14#define LLVM_CODEGEN_BASIC_BLOCK_AND_INFERENCE_H
15
19
20namespace llvm {
21
22/// Whether to match basic blocks using BBIDs instead of hashes for Propeller
23/// inference.
25
27private:
28 using Edge = std::pair<const MachineBasicBlock *, const MachineBasicBlock *>;
30 using EdgeWeightMap = DenseMap<Edge, uint64_t>;
31 using BlockEdgeMap = DenseMap<const MachineBasicBlock *,
33
34 struct WeightInfo {
35 // Weight of basic blocks.
36 BlockWeightMap BlockWeights;
37 // Weight of edges.
38 EdgeWeightMap EdgeWeights;
39 };
40
41public:
42 static char ID;
44
45 StringRef getPassName() const override {
46 return "Basic Block Matching and Inference";
47 }
48
49 void getAnalysisUsage(AnalysisUsage &AU) const override;
50
51 bool runOnMachineFunction(MachineFunction &F) override;
52
53 std::optional<WeightInfo> getWeightInfo(StringRef FuncName) const;
54
55private:
56 StringMap<WeightInfo> ProgramWeightInfo;
57
58 WeightInfo initWeightInfoByMatching(MachineFunction &MF);
59 WeightInfo initWeightInfoByBBID(MachineFunction &MF, const CFGProfile &CFG);
60
61 void generateWeightInfoByInference(MachineFunction &MF,
62 WeightInfo &MatchWeight);
63};
64
65} // end namespace llvm
66
67#endif // LLVM_CODEGEN_BASIC_BLOCK_AND_INFERENCE_H
#define LLVM_ABI
Definition Compiler.h:211
Flatten the CFG
#define F(x, y, z)
Definition MD5.cpp:54
This file provides the interface for the profile inference algorithm, profi.
Represent the analysis usage information of a pass.
StringRef getPassName() const override
getPassName - Return a nice clean name for a pass.
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition StringMap.h:129
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
This is an optimization pass for GlobalISel generic memory operations.
LLVM_ABI cl::opt< bool > PropellerMatchBBID
Whether to match basic blocks using BBIDs instead of hashes for Propeller inference.