VapourSynth-llvmexpr
Loading...
Searching...
No Matches
Diagnostics.cpp
Go to the documentation of this file.
1
19
20#include "Diagnostics.hpp"
21
22#include <string>
23
24#include "llvm/IR/DiagnosticPrinter.h"
25#include "llvm/Support/raw_ostream.h"
26
28 : vectorization_failed(false), original_handler(nullptr),
29 original_context(nullptr) {}
30
32 llvm::DiagnosticHandler::DiagnosticHandlerTy handler, void* context) {
33 original_handler = handler;
34 original_context = context;
35}
36
38 const llvm::DiagnosticInfo& di) {
39 bool should_suppress = false;
40
41 if (di.getSeverity() == llvm::DS_Remark ||
42 di.getSeverity() == llvm::DS_Warning) {
43 std::string msg;
44 llvm::raw_string_ostream stream(msg);
45 llvm::DiagnosticPrinterRawOStream printer(stream);
46 di.print(printer);
47
48 if (msg.find("loop not vectorized") != std::string::npos) {
49 vectorization_failed.store(true);
50 should_suppress = true;
51 }
52 }
53
54 // Call original handler for all diagnostics except "loop not vectorized"
55 if (!should_suppress && (original_handler != nullptr)) {
56 original_handler(&di, original_context);
57 }
58}
59
61 return vectorization_failed.load();
62}
63
65 vectorization_failed.store(false);
66}
67
69 const llvm::DiagnosticInfo* di, void* context) {
71 *di);
72}
void handleDiagnostic(const llvm::DiagnosticInfo &di)
static void diagnosticHandlerCallback(const llvm::DiagnosticInfo *di, void *context)
void setOriginalHandler(llvm::DiagnosticHandler::DiagnosticHandlerTy handler, void *context)