Path: blob/main/contrib/llvm-project/llvm/lib/IR/DiagnosticHandler.cpp
35233 views
//===- DiagnosticHandler.h - DiagnosticHandler class for LLVM -------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8//9//===----------------------------------------------------------------------===//10#include "llvm/IR/DiagnosticHandler.h"11#include "llvm/Support/CommandLine.h"12#include "llvm/Support/Regex.h"1314using namespace llvm;1516namespace {1718/// Regular expression corresponding to the value given in one of the19/// -pass-remarks* command line flags. Passes whose name matches this regexp20/// will emit a diagnostic when calling the associated diagnostic function21/// (emitOptimizationRemark, emitOptimizationRemarkMissed or22/// emitOptimizationRemarkAnalysis).23struct PassRemarksOpt {24std::shared_ptr<Regex> Pattern;2526void operator=(const std::string &Val) {27// Create a regexp object to match pass names for emitOptimizationRemark.28if (!Val.empty()) {29Pattern = std::make_shared<Regex>(Val);30std::string RegexError;31if (!Pattern->isValid(RegexError))32report_fatal_error(Twine("Invalid regular expression '") + Val +33"' in -pass-remarks: " + RegexError,34false);35}36}37};3839static PassRemarksOpt PassRemarksPassedOptLoc;40static PassRemarksOpt PassRemarksMissedOptLoc;41static PassRemarksOpt PassRemarksAnalysisOptLoc;4243// -pass-remarks44// Command line flag to enable emitOptimizationRemark()45static cl::opt<PassRemarksOpt, true, cl::parser<std::string>> PassRemarks(46"pass-remarks", cl::value_desc("pattern"),47cl::desc("Enable optimization remarks from passes whose name match "48"the given regular expression"),49cl::Hidden, cl::location(PassRemarksPassedOptLoc), cl::ValueRequired);5051// -pass-remarks-missed52// Command line flag to enable emitOptimizationRemarkMissed()53static cl::opt<PassRemarksOpt, true, cl::parser<std::string>> PassRemarksMissed(54"pass-remarks-missed", cl::value_desc("pattern"),55cl::desc("Enable missed optimization remarks from passes whose name match "56"the given regular expression"),57cl::Hidden, cl::location(PassRemarksMissedOptLoc), cl::ValueRequired);5859// -pass-remarks-analysis60// Command line flag to enable emitOptimizationRemarkAnalysis()61static cl::opt<PassRemarksOpt, true, cl::parser<std::string>>62PassRemarksAnalysis(63"pass-remarks-analysis", cl::value_desc("pattern"),64cl::desc(65"Enable optimization analysis remarks from passes whose name match "66"the given regular expression"),67cl::Hidden, cl::location(PassRemarksAnalysisOptLoc), cl::ValueRequired);68}6970bool DiagnosticHandler::isAnalysisRemarkEnabled(StringRef PassName) const {71return (PassRemarksAnalysisOptLoc.Pattern &&72PassRemarksAnalysisOptLoc.Pattern->match(PassName));73}74bool DiagnosticHandler::isMissedOptRemarkEnabled(StringRef PassName) const {75return (PassRemarksMissedOptLoc.Pattern &&76PassRemarksMissedOptLoc.Pattern->match(PassName));77}78bool DiagnosticHandler::isPassedOptRemarkEnabled(StringRef PassName) const {79return (PassRemarksPassedOptLoc.Pattern &&80PassRemarksPassedOptLoc.Pattern->match(PassName));81}8283bool DiagnosticHandler::isAnyRemarkEnabled() const {84return (PassRemarksPassedOptLoc.Pattern || PassRemarksMissedOptLoc.Pattern ||85PassRemarksAnalysisOptLoc.Pattern);86}878889