[llvm] r208122 - Do not make -pass-remarks additive.
Diego Novillo
dnovillo at google.com
Tue May 6 12:14:00 PDT 2014
Author: dnovillo
Date: Tue May 6 14:14:00 2014
New Revision: 208122
URL: http://llvm.org/viewvc/llvm-project?rev=208122&view=rev
Log:
Do not make -pass-remarks additive.
Summary:
When I initially introduced -pass-remarks, I thought it would be a
neat idea to make it additive. So, if one used it as:
$ llc -pass-remarks=inliner --pass-remarks=loop.*
the compiler would build the regular expression '(inliner)|(loop.*)'.
The more I think about it, the more I regret it. This is not how
other flags work. The standard semantics are right-to-left overrides.
This is how clang interprets -Rpass. And I think the two should be
compatible in this respect.
Reviewers: qcolombet
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D3614
Modified:
llvm/trunk/lib/IR/LLVMContextImpl.cpp
llvm/trunk/test/Other/optimization-remarks-inline.ll
Modified: llvm/trunk/lib/IR/LLVMContextImpl.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LLVMContextImpl.cpp?rev=208122&r1=208121&r2=208122&view=diff
==============================================================================
--- llvm/trunk/lib/IR/LLVMContextImpl.cpp (original)
+++ llvm/trunk/lib/IR/LLVMContextImpl.cpp Tue May 6 14:14:00 2014
@@ -73,22 +73,12 @@ namespace {
/// LLVMContext::emitOptimizationRemark.
static Regex *OptimizationRemarkPattern = nullptr;
-/// \brief String to hold all the values passed via -pass-remarks. Every
-/// instance of -pass-remarks on the command line will be concatenated
-/// to this string. Values are stored inside braces and concatenated with
-/// the '|' operator. This implements the expected semantics that multiple
-/// -pass-remarks are additive.
-static std::string OptimizationRemarkExpr;
-
struct PassRemarksOpt {
void operator=(const std::string &Val) const {
// Create a regexp object to match pass names for emitOptimizationRemark.
if (!Val.empty()) {
- if (!OptimizationRemarkExpr.empty())
- OptimizationRemarkExpr += "|";
- OptimizationRemarkExpr += "(" + Val + ")";
delete OptimizationRemarkPattern;
- OptimizationRemarkPattern = new Regex(OptimizationRemarkExpr);
+ OptimizationRemarkPattern = new Regex(Val);
std::string RegexError;
if (!OptimizationRemarkPattern->isValid(RegexError))
report_fatal_error("Invalid regular expression '" + Val +
Modified: llvm/trunk/test/Other/optimization-remarks-inline.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Other/optimization-remarks-inline.ll?rev=208122&r1=208121&r2=208122&view=diff
==============================================================================
--- llvm/trunk/test/Other/optimization-remarks-inline.ll (original)
+++ llvm/trunk/test/Other/optimization-remarks-inline.ll Tue May 6 14:14:00 2014
@@ -1,7 +1,14 @@
; RUN: opt < %s -inline -pass-remarks='inline' -S 2>&1 | FileCheck %s
; RUN: opt < %s -inline -pass-remarks='inl.*' -S 2>&1 | FileCheck %s
; RUN: opt < %s -inline -pass-remarks='vector' -pass-remarks='inl' -S 2>&1 | FileCheck %s
+
+; These two should not yield an inline remark for the same reason.
+; In the first command, we only ask for vectorizer remarks, in the
+; second one we ask for the inliner, but we then ask for the vectorizer
+; (thus overriding the first flag).
; RUN: opt < %s -inline -pass-remarks='vector' -S 2>&1 | FileCheck --check-prefix=REMARKS %s
+; RUN: opt < %s -inline -pass-remarks='inl' -pass-remarks='vector' -S 2>&1 | FileCheck --check-prefix=REMARKS %s
+
; RUN: opt < %s -inline -S 2>&1 | FileCheck --check-prefix=REMARKS %s
; RUN: not opt < %s -pass-remarks='(' 2>&1 | FileCheck --check-prefix=BAD-REGEXP %s
More information about the llvm-commits
mailing list