annotate lib/CodeGen/MachineOptimizationRemarkEmitter.cpp @ 134:3a76565eade5 LLVM5.0.1

update 5.0.1
author mir3636
date Sat, 17 Feb 2018 09:57:20 +0900
parents 803732b1fca8
children c2174574ed3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
121
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
1 ///===- MachineOptimizationRemarkEmitter.cpp - Opt Diagnostic -*- C++ -*---===//
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
2 ///
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
3 /// The LLVM Compiler Infrastructure
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
4 ///
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
5 /// This file is distributed under the University of Illinois Open Source
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
6 /// License. See LICENSE.TXT for details.
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
7 ///
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
8 ///===---------------------------------------------------------------------===//
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
9 /// \file
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
10 /// Optimization diagnostic interfaces for machine passes. It's packaged as an
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
11 /// analysis pass so that by using this service passes become dependent on MBFI
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
12 /// as well. MBFI is used to compute the "hotness" of the diagnostic message.
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
13 ///
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
14 ///===---------------------------------------------------------------------===//
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
15
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
16 #include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h"
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
17 #include "llvm/CodeGen/LazyMachineBlockFrequencyInfo.h"
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
18 #include "llvm/CodeGen/MachineInstr.h"
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
19 #include "llvm/IR/DiagnosticInfo.h"
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
20 #include "llvm/IR/LLVMContext.h"
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
21
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
22 using namespace llvm;
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
23
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
24 DiagnosticInfoMIROptimization::MachineArgument::MachineArgument(
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
25 StringRef MKey, const MachineInstr &MI)
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
26 : Argument() {
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
27 Key = MKey;
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
28
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
29 raw_string_ostream OS(Val);
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
30 MI.print(OS, /*IsStandalone=*/true, /*SkipOpers=*/false,
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
31 /*SkipDebugLoc=*/true);
121
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
32 }
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
33
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
34 Optional<uint64_t>
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
35 MachineOptimizationRemarkEmitter::computeHotness(const MachineBasicBlock &MBB) {
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
36 if (!MBFI)
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
37 return None;
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
38
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
39 return MBFI->getBlockProfileCount(&MBB);
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
40 }
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
41
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
42 void MachineOptimizationRemarkEmitter::computeHotness(
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
43 DiagnosticInfoMIROptimization &Remark) {
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
44 const MachineBasicBlock *MBB = Remark.getBlock();
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
45 if (MBB)
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
46 Remark.setHotness(computeHotness(*MBB));
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
47 }
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
48
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
49 void MachineOptimizationRemarkEmitter::emit(
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
50 DiagnosticInfoOptimizationBase &OptDiagCommon) {
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
51 auto &OptDiag = cast<DiagnosticInfoMIROptimization>(OptDiagCommon);
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
52 computeHotness(OptDiag);
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
53
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
54 LLVMContext &Ctx = MF.getFunction().getContext();
121
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
55
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
56 // Only emit it if its hotness meets the threshold.
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
57 if (OptDiag.getHotness().getValueOr(0) <
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
58 Ctx.getDiagnosticsHotnessThreshold()) {
121
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
59 return;
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
60 }
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
61
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
62 Ctx.diagnose(OptDiag);
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
63 }
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
64
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
65 MachineOptimizationRemarkEmitterPass::MachineOptimizationRemarkEmitterPass()
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
66 : MachineFunctionPass(ID) {
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
67 initializeMachineOptimizationRemarkEmitterPassPass(
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
68 *PassRegistry::getPassRegistry());
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
69 }
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
70
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
71 bool MachineOptimizationRemarkEmitterPass::runOnMachineFunction(
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
72 MachineFunction &MF) {
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
73 MachineBlockFrequencyInfo *MBFI;
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
74
134
3a76565eade5 update 5.0.1
mir3636
parents: 121
diff changeset
75 if (MF.getFunction().getContext().getDiagnosticsHotnessRequested())
121
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
76 MBFI = &getAnalysis<LazyMachineBlockFrequencyInfoPass>().getBFI();
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
77 else
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
78 MBFI = nullptr;
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
79
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
80 ORE = llvm::make_unique<MachineOptimizationRemarkEmitter>(MF, MBFI);
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
81 return false;
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
82 }
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
83
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
84 void MachineOptimizationRemarkEmitterPass::getAnalysisUsage(
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
85 AnalysisUsage &AU) const {
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
86 AU.addRequired<LazyMachineBlockFrequencyInfoPass>();
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
87 AU.setPreservesAll();
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
88 MachineFunctionPass::getAnalysisUsage(AU);
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
89 }
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
90
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
91 char MachineOptimizationRemarkEmitterPass::ID = 0;
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
92 static const char ore_name[] = "Machine Optimization Remark Emitter";
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
93 #define ORE_NAME "machine-opt-remark-emitter"
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
94
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
95 INITIALIZE_PASS_BEGIN(MachineOptimizationRemarkEmitterPass, ORE_NAME, ore_name,
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
96 false, true)
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
97 INITIALIZE_PASS_DEPENDENCY(LazyMachineBlockFrequencyInfoPass)
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
98 INITIALIZE_PASS_END(MachineOptimizationRemarkEmitterPass, ORE_NAME, ore_name,
803732b1fca8 LLVM 5.0
kono
parents:
diff changeset
99 false, true)