1、抛出error信息并终止程序
使用DiagnosticInfoUnsupported可以向用户抛出error信息并且终止程序,效果如同report_fatal_error、Error。后端用法如下:
void xxxx::reportErrorMsg(const MachineFunction &MF)const {
const Function &F = MF.getFunction();
// Diagnostic information for unsupported feature in backend.
F.getContext().diagnose(DiagnosticInfoUnsupported{F, "report msg."});
}
2、优化pass中抛出警告信息之OptimizationRemark
使用时clang得加上-Rpass=name,llc得加上–pass-remarks=name才行,后端用法如下:
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
void getAnalysisUsage(AnalysisUsage &AU) const override {
AU.addRequired<OptimizationRemarkEmitterWrapperPass>();
MachineFunctionPass::getAnalysisUsage(AU);
}
void xxx::reportWarningMsg(const MachineFunction &MF)const {
auto *ORE = &getAnalysis<OptimizationRemarkEmitterWrapperPass>().getORE();
const Function &F = MF.getFunction();
// Diagnostic information for applied optimization remarks
OptimizationRemark R(DEBUG_TYPE, "replace-spill-register", &F);
R << "report msg";
ORE->emit(R);
}
3、machine ir抛信息之DiagnosticInfoMIRParser
该接口同样支持DS_Error,DS_Warning,DS_Remark和DS_Note 4种方式,后端用法如下:
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/Support/SourceMgr.h"
void xxx::reportWarningMsg(const MachineFunction &MF)const {
const Function &F = MF.getFunction();
// Diagnostic information for machine IR parser.
F.getContext().diagnose(DiagnosticInfoMIRParser(
DS_Warning,
SMDiagnostic(
DEBUG_TYPE, SourceMgr::DK_Warning, "report msg")));
}
4、AsmParser之Warning
基本用法如下:
XXXAsmParser &Parser;
void Warning(SMLoc L, const Twine &Msg) { Parser.Warning(L, Msg); }
5、MCContext之reportWarning
基本用法如下:文章来源:https://www.toymoban.com/news/detail-612627.html
MCContext &Context;
void MCContext::reportWarning(SMLoc Loc, const Twine &Msg)
Context.reportWarning(MCxxx.getLoc(), Msg);
6、其它类型的信息
包括DiagnosticInfoInlineAsm,DiagnosticInfoResourceLimit,DiagnosticInfoStackSize,DiagnosticInfoOptimizationBase,DiagnosticInfoIROptimization以及debug,Profileing,remarks等。文章来源地址https://www.toymoban.com/news/detail-612627.html
- 其中llvm_unreachable为开发者使用,发布时用户不可见,所看到的信息为segment fatal。
- assert由于存在判断开销,一般也不在发布中开启。
7、用例如何检查report_fatal_error
- RUN命令需要使用not,用法如下:
// RUN: not %clang --target=xx -mcpu=xxx -O3 -c %s -o - 2>&1 | FileCheck %s --check-prefix=expected-error
....
// expected-error: xxxx
- 使用-fsyntax-only -verify,用法如下:
// RUN: %clang_cc1 -triple xxx -target-feature xx -fsyntax-only -verify %s
// expected-warning{{xxxxxxxx}} expected-error{{xxxxxxxxxxxxxxx}}
到了这里,关于llvm向用户抛出warning、error信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!