LLVM 19.0.0git
DiagnosticHandler.cpp
Go to the documentation of this file.
1//===- DiagnosticHandler.h - DiagnosticHandler class for LLVM -------------===//
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//
10//===----------------------------------------------------------------------===//
13#include "llvm/Support/Regex.h"
14
15using namespace llvm;
16
17namespace {
18
19/// Regular expression corresponding to the value given in one of the
20/// -pass-remarks* command line flags. Passes whose name matches this regexp
21/// will emit a diagnostic when calling the associated diagnostic function
22/// (emitOptimizationRemark, emitOptimizationRemarkMissed or
23/// emitOptimizationRemarkAnalysis).
24struct PassRemarksOpt {
25 std::shared_ptr<Regex> Pattern;
26
27 void operator=(const std::string &Val) {
28 // Create a regexp object to match pass names for emitOptimizationRemark.
29 if (!Val.empty()) {
30 Pattern = std::make_shared<Regex>(Val);
31 std::string RegexError;
32 if (!Pattern->isValid(RegexError))
33 report_fatal_error(Twine("Invalid regular expression '") + Val +
34 "' in -pass-remarks: " + RegexError,
35 false);
36 }
37 }
38};
39
40static PassRemarksOpt PassRemarksPassedOptLoc;
41static PassRemarksOpt PassRemarksMissedOptLoc;
42static PassRemarksOpt PassRemarksAnalysisOptLoc;
43
44// -pass-remarks
45// Command line flag to enable emitOptimizationRemark()
47 "pass-remarks", cl::value_desc("pattern"),
48 cl::desc("Enable optimization remarks from passes whose name match "
49 "the given regular expression"),
50 cl::Hidden, cl::location(PassRemarksPassedOptLoc), cl::ValueRequired);
51
52// -pass-remarks-missed
53// Command line flag to enable emitOptimizationRemarkMissed()
55 "pass-remarks-missed", cl::value_desc("pattern"),
56 cl::desc("Enable missed optimization remarks from passes whose name match "
57 "the given regular expression"),
58 cl::Hidden, cl::location(PassRemarksMissedOptLoc), cl::ValueRequired);
59
60// -pass-remarks-analysis
61// Command line flag to enable emitOptimizationRemarkAnalysis()
63 PassRemarksAnalysis(
64 "pass-remarks-analysis", cl::value_desc("pattern"),
66 "Enable optimization analysis remarks from passes whose name match "
67 "the given regular expression"),
68 cl::Hidden, cl::location(PassRemarksAnalysisOptLoc), cl::ValueRequired);
69}
70
72 return (PassRemarksAnalysisOptLoc.Pattern &&
73 PassRemarksAnalysisOptLoc.Pattern->match(PassName));
74}
76 return (PassRemarksMissedOptLoc.Pattern &&
77 PassRemarksMissedOptLoc.Pattern->match(PassName));
78}
80 return (PassRemarksPassedOptLoc.Pattern &&
81 PassRemarksPassedOptLoc.Pattern->match(PassName));
82}
83
85 return (PassRemarksPassedOptLoc.Pattern || PassRemarksMissedOptLoc.Pattern ||
86 PassRemarksAnalysisOptLoc.Pattern);
87}
static const char PassName[]
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
Twine - A lightweight data structure for efficiently representing the concatenation of temporary valu...
Definition: Twine.h:81
@ ValueRequired
Definition: CommandLine.h:132
LocationClass< Ty > location(Ty &L)
Definition: CommandLine.h:470
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
void report_fatal_error(Error Err, bool gen_crash_diag=true)
Report a serious error, calling any installed error handler.
Definition: Error.cpp:156
virtual bool isPassedOptRemarkEnabled(StringRef PassName) const
Return true if passed optimization remarks are enabled, override to provide different implementation.
virtual bool isAnalysisRemarkEnabled(StringRef PassName) const
Return true if analysis remarks are enabled, override to provide different implementation.
virtual bool isMissedOptRemarkEnabled(StringRef PassName) const
Return true if missed optimization remarks are enabled, override to provide different implementation.
virtual bool isAnyRemarkEnabled() const
Return true if any type of remarks are enabled for any pass.