Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/lib/IR/DiagnosticHandler.cpp
Line
Count
Source
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
//===----------------------------------------------------------------------===//
11
#include "llvm/IR/DiagnosticHandler.h"
12
#include "llvm/Support/CommandLine.h"
13
#include "llvm/Support/Regex.h"
14
15
using namespace llvm;
16
17
namespace {
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).
24
struct PassRemarksOpt {
25
  std::shared_ptr<Regex> Pattern;
26
27
384
  void operator=(const std::string &Val) {
28
384
    // Create a regexp object to match pass names for emitOptimizationRemark.
29
384
    if (!Val.empty()) {
30
384
      Pattern = std::make_shared<Regex>(Val);
31
384
      std::string RegexError;
32
384
      if (!Pattern->isValid(RegexError))
33
1
        report_fatal_error("Invalid regular expression '" + Val +
34
1
                               "' in -pass-remarks: " + RegexError,
35
1
                           false);
36
384
    }
37
384
  }
38
};
39
40
static PassRemarksOpt PassRemarksPassedOptLoc;
41
static PassRemarksOpt PassRemarksMissedOptLoc;
42
static PassRemarksOpt PassRemarksAnalysisOptLoc;
43
44
// -pass-remarks
45
//    Command line flag to enable emitOptimizationRemark()
46
static cl::opt<PassRemarksOpt, true, cl::parser<std::string>> PassRemarks(
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
    cl::ZeroOrMore);
52
53
// -pass-remarks-missed
54
//    Command line flag to enable emitOptimizationRemarkMissed()
55
static cl::opt<PassRemarksOpt, true, cl::parser<std::string>> PassRemarksMissed(
56
    "pass-remarks-missed", cl::value_desc("pattern"),
57
    cl::desc("Enable missed optimization remarks from passes whose name match "
58
             "the given regular expression"),
59
    cl::Hidden, cl::location(PassRemarksMissedOptLoc), cl::ValueRequired,
60
    cl::ZeroOrMore);
61
62
// -pass-remarks-analysis
63
//    Command line flag to enable emitOptimizationRemarkAnalysis()
64
static cl::opt<PassRemarksOpt, true, cl::parser<std::string>>
65
    PassRemarksAnalysis(
66
        "pass-remarks-analysis", cl::value_desc("pattern"),
67
        cl::desc(
68
            "Enable optimization analysis remarks from passes whose name match "
69
            "the given regular expression"),
70
        cl::Hidden, cl::location(PassRemarksAnalysisOptLoc), cl::ValueRequired,
71
        cl::ZeroOrMore);
72
}
73
74
52.2M
bool DiagnosticHandler::isAnalysisRemarkEnabled(StringRef PassName) const {
75
52.2M
  return (PassRemarksAnalysisOptLoc.Pattern &&
76
52.2M
          
PassRemarksAnalysisOptLoc.Pattern->match(PassName)1.35k
);
77
52.2M
}
78
1.59M
bool DiagnosticHandler::isMissedOptRemarkEnabled(StringRef PassName) const {
79
1.59M
  return (PassRemarksMissedOptLoc.Pattern &&
80
1.59M
          
PassRemarksMissedOptLoc.Pattern->match(PassName)1.13k
);
81
1.59M
}
82
2.30M
bool DiagnosticHandler::isPassedOptRemarkEnabled(StringRef PassName) const {
83
2.30M
  return (PassRemarksPassedOptLoc.Pattern &&
84
2.30M
          
PassRemarksPassedOptLoc.Pattern->match(PassName)284
);
85
2.30M
}
86
87
2.88M
bool DiagnosticHandler::isAnyRemarkEnabled() const {
88
2.88M
  return (PassRemarksPassedOptLoc.Pattern || 
PassRemarksMissedOptLoc.Pattern2.88M
||
89
2.88M
          
PassRemarksAnalysisOptLoc.Pattern2.88M
);
90
2.88M
}