From e3e870facee9f1fcf5b19f15a3deb78b582fb37e Mon Sep 17 00:00:00 2001 From: Diego Novillo Date: Tue, 6 May 2014 19:14:00 +0000 Subject: 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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208122 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/IR/LLVMContextImpl.cpp | 12 +----------- test/Other/optimization-remarks-inline.ll | 7 +++++++ 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/lib/IR/LLVMContextImpl.cpp b/lib/IR/LLVMContextImpl.cpp index 50740a0c34..2bccd2a091 100644 --- a/lib/IR/LLVMContextImpl.cpp +++ b/lib/IR/LLVMContextImpl.cpp @@ -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 + diff --git a/test/Other/optimization-remarks-inline.ll b/test/Other/optimization-remarks-inline.ll index 4870c17ae2..566b206919 100644 --- a/test/Other/optimization-remarks-inline.ll +++ b/test/Other/optimization-remarks-inline.ll @@ -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 -- cgit v1.2.3