brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · eb2fe3b Raw
88 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8//9//10//===----------------------------------------------------------------------===//11#include "llvm/IR/DiagnosticHandler.h"12#include "llvm/Support/CommandLine.h"13#include "llvm/Support/Regex.h"14 15using namespace llvm;16 17namespace {18 19/// Regular expression corresponding to the value given in one of the20/// -pass-remarks* command line flags. Passes whose name matches this regexp21/// will emit a diagnostic when calling the associated diagnostic function22/// (emitOptimizationRemark, emitOptimizationRemarkMissed or23/// 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} // namespace40 41static PassRemarksOpt PassRemarksPassedOptLoc;42static PassRemarksOpt PassRemarksMissedOptLoc;43static PassRemarksOpt PassRemarksAnalysisOptLoc;44 45// -pass-remarks46//    Command line flag to enable emitOptimizationRemark()47static 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 53// -pass-remarks-missed54//    Command line flag to enable emitOptimizationRemarkMissed()55static 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 61// -pass-remarks-analysis62//    Command line flag to enable emitOptimizationRemarkAnalysis()63static cl::opt<PassRemarksOpt, true, cl::parser<std::string>>64    PassRemarksAnalysis(65        "pass-remarks-analysis", cl::value_desc("pattern"),66        cl::desc(67            "Enable optimization analysis remarks from passes whose name match "68            "the given regular expression"),69        cl::Hidden, cl::location(PassRemarksAnalysisOptLoc), cl::ValueRequired);70 71bool DiagnosticHandler::isAnalysisRemarkEnabled(StringRef PassName) const {72  return (PassRemarksAnalysisOptLoc.Pattern &&73          PassRemarksAnalysisOptLoc.Pattern->match(PassName));74}75bool DiagnosticHandler::isMissedOptRemarkEnabled(StringRef PassName) const {76  return (PassRemarksMissedOptLoc.Pattern &&77          PassRemarksMissedOptLoc.Pattern->match(PassName));78}79bool DiagnosticHandler::isPassedOptRemarkEnabled(StringRef PassName) const {80  return (PassRemarksPassedOptLoc.Pattern &&81          PassRemarksPassedOptLoc.Pattern->match(PassName));82}83 84bool DiagnosticHandler::isAnyRemarkEnabled() const {85  return (PassRemarksPassedOptLoc.Pattern || PassRemarksMissedOptLoc.Pattern ||86          PassRemarksAnalysisOptLoc.Pattern);87}88