Coverage Report

Created: 2017-10-03 07:32

/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/lib/IR/DiagnosticHandler.cpp
Line
Count
Source
1
//===- DiagnosticHandler.h - DiagnosticHandler class for LLVM -------------===//
2
//
3
//                     The LLVM Compiler Infrastructure
4
//
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
7
//
8
//===----------------------------------------------------------------------===//
9
//
10
//
11
//===----------------------------------------------------------------------===//
12
#include "llvm/IR/DiagnosticHandler.h"
13
#include "llvm/Support/CommandLine.h"
14
#include "llvm/Support/Regex.h"
15
16
using namespace llvm;
17
18
namespace {
19
20
/// \brief Regular expression corresponding to the value given in one of the
21
/// -pass-remarks* command line flags. Passes whose name matches this regexp
22
/// will emit a diagnostic when calling the associated diagnostic function
23
/// (emitOptimizationRemark, emitOptimizationRemarkMissed or
24
/// emitOptimizationRemarkAnalysis).
25
struct PassRemarksOpt {
26
  std::shared_ptr<Regex> Pattern;
27
28
251
  void operator=(const std::string &Val) {
29
251
    // Create a regexp object to match pass names for emitOptimizationRemark.
30
251
    if (
!Val.empty()251
) {
31
251
      Pattern = std::make_shared<Regex>(Val);
32
251
      std::string RegexError;
33
251
      if (!Pattern->isValid(RegexError))
34
1
        report_fatal_error("Invalid regular expression '" + Val +
35
1
                               "' in -pass-remarks: " + RegexError,
36
1
                           false);
37
250
    }
38
251
  }
39
};
40
41
static PassRemarksOpt PassRemarksPassedOptLoc;
42
static PassRemarksOpt PassRemarksMissedOptLoc;
43
static PassRemarksOpt PassRemarksAnalysisOptLoc;
44
45
// -pass-remarks
46
//    Command line flag to enable emitOptimizationRemark()
47
static cl::opt<PassRemarksOpt, true, cl::parser<std::string>> PassRemarks(
48
    "pass-remarks", cl::value_desc("pattern"),
49
    cl::desc("Enable optimization remarks from passes whose name match "
50
             "the given regular expression"),
51
    cl::Hidden, cl::location(PassRemarksPassedOptLoc), cl::ValueRequired,
52
    cl::ZeroOrMore);
53
54
// -pass-remarks-missed
55
//    Command line flag to enable emitOptimizationRemarkMissed()
56
static cl::opt<PassRemarksOpt, true, cl::parser<std::string>> PassRemarksMissed(
57
    "pass-remarks-missed", cl::value_desc("pattern"),
58
    cl::desc("Enable missed optimization remarks from passes whose name match "
59
             "the given regular expression"),
60
    cl::Hidden, cl::location(PassRemarksMissedOptLoc), cl::ValueRequired,
61
    cl::ZeroOrMore);
62
63
// -pass-remarks-analysis
64
//    Command line flag to enable emitOptimizationRemarkAnalysis()
65
static cl::opt<PassRemarksOpt, true, cl::parser<std::string>>
66
    PassRemarksAnalysis(
67
        "pass-remarks-analysis", cl::value_desc("pattern"),
68
        cl::desc(
69
            "Enable optimization analysis remarks from passes whose name match "
70
            "the given regular expression"),
71
        cl::Hidden, cl::location(PassRemarksAnalysisOptLoc), cl::ValueRequired,
72
        cl::ZeroOrMore);
73
}
74
75
3.96M
bool DiagnosticHandler::isAnalysisRemarkEnabled(StringRef PassName) const {
76
3.96M
  return (PassRemarksAnalysisOptLoc.Pattern &&
77
295
          PassRemarksAnalysisOptLoc.Pattern->match(PassName));
78
3.96M
}
79
3.39M
bool DiagnosticHandler::isMissedOptRemarkEnabled(StringRef PassName) const {
80
3.39M
  return (PassRemarksMissedOptLoc.Pattern &&
81
386
          PassRemarksMissedOptLoc.Pattern->match(PassName));
82
3.39M
}
83
4.49M
bool DiagnosticHandler::isPassedOptRemarkEnabled(StringRef PassName) const {
84
4.49M
  return (PassRemarksPassedOptLoc.Pattern &&
85
161
          PassRemarksPassedOptLoc.Pattern->match(PassName));
86
4.49M
}
87
88
1.44M
bool DiagnosticHandler::isAnyRemarkEnabled() const {
89
1.44M
  return (PassRemarksPassedOptLoc.Pattern || PassRemarksMissedOptLoc.Pattern ||
90
1.44M
          PassRemarksAnalysisOptLoc.Pattern);
91
1.44M
}