Allow diagnostic handlers to check for optimization remarks.

Summary:
When optimization remarks are enabled via the driver flag -Rpass, we
should allow the FE diagnostic handler to check if the given pass name
needs a diagnostic.

We were unconditionally checking the pattern defined in opt's
-pass-remarks flag. This was causing the FE to not emit any diagnostics.

Reviewers: qcolombet

CC: llvm-commits

Differential Revision: http://reviews.llvm.org/D3362

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206400 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Diego Novillo 2014-04-16 16:53:41 +00:00
parent 685d699870
commit b902acb16c

View File

@ -130,6 +130,16 @@ void LLVMContext::diagnose(const DiagnosticInfo &DI) {
pImpl->DiagnosticHandler(DI, pImpl->DiagnosticContext);
return;
}
// Optimization remarks are selective. They need to check whether
// the regexp pattern, passed via -pass-remarks, matches the name
// of the pass that is emitting the diagnostic. If there is no match,
// ignore the diagnostic and return.
if (DI.getKind() == llvm::DK_OptimizationRemark &&
!pImpl->optimizationRemarksEnabledFor(
cast<DiagnosticInfoOptimizationRemark>(DI).getPassName()))
return;
// Otherwise, print the message with a prefix based on the severity.
std::string MsgStorage;
raw_string_ostream Stream(MsgStorage);
@ -160,7 +170,6 @@ void LLVMContext::emitOptimizationRemark(const char *PassName,
const Function &Fn,
const DebugLoc &DLoc,
const Twine &Msg) {
if (pImpl->optimizationRemarksEnabledFor(PassName))
diagnose(DiagnosticInfoOptimizationRemark(PassName, Fn, DLoc, Msg));
}