Skip to content

Commit 3a8444d

Browse files
committed
createExactOrRE
1 parent abe8f96 commit 3a8444d

File tree

4 files changed

+34
-33
lines changed

4 files changed

+34
-33
lines changed

llvm/test/tools/llvm-remarkutil/instruction-count.test

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ RUN: llvm-remarkutil instruction-count --parser=yaml %p/Inputs/instruction-count
22
RUN: llvm-remarkutil yaml2bitstream %p/Inputs/instruction-count.yaml | llvm-remarkutil instruction-count --parser=bitstream | FileCheck %s
33
RUN: llvm-remarkutil count --parser=yaml --count-by=arg --group-by=function --remark-name="InstructionCount" %p/Inputs/instruction-count.yaml | FileCheck %s --check-prefix=COUNT-CHECK
44
RUN: llvm-remarkutil yaml2bitstream %p/Inputs/instruction-count.yaml | llvm-remarkutil count --parser=bitstream --count-by=arg --group-by=function --remark-name="InstructionCount" | FileCheck %s --check-prefix=COUNT-CHECK
5-
RUN: not llvm-remarkutil count --parser=yaml --count-by=arg --group-by=function --rremark-name=* %p/Inputs/instruction-count.yaml 2>&1 | FileCheck %s --check-prefix=ERROR -DARG=rremark-name
6-
RUN: not llvm-remarkutil count --parser=yaml --count-by=arg --group-by=function --rpass-name=* %p/Inputs/instruction-count.yaml 2>&1 | FileCheck %s --check-prefix=ERROR -DARG=rpass-name
7-
RUN: not llvm-remarkutil count --parser=yaml --count-by=arg --group-by=function --rfilter-arg-by=* %p/Inputs/instruction-count.yaml 2>&1 | FileCheck %s --check-prefix=ERROR -DARG=rfilter-arg-by
5+
RUN: not llvm-remarkutil count --parser=yaml --count-by=arg --group-by=function --rremark-name=* %p/Inputs/instruction-count.yaml 2>&1 | FileCheck %s --check-prefix=ERROR-REPOPERATOR -DARG=rremark-name
6+
RUN: not llvm-remarkutil count --parser=yaml --count-by=arg --group-by=function --rpass-name=* %p/Inputs/instruction-count.yaml 2>&1 | FileCheck %s --check-prefix=ERROR-REPOPERATOR -DARG=rpass-name
7+
RUN: not llvm-remarkutil count --parser=yaml --count-by=arg --group-by=function --rfilter-arg-by=* %p/Inputs/instruction-count.yaml 2>&1 | FileCheck %s --check-prefix=ERROR-REPOPERATOR -DARG=rfilter-arg-by
8+
RUN: not llvm-remarkutil count --parser=yaml --count-by=arg --group-by=function --rremark-name=InstCombine --remark-name=InstCombine %p/Inputs/instruction-count.yaml 2>&1 | FileCheck %s --check-prefix=ERROR-BOTHFILTERS -DARG=rremark-name
89

910
; CHECK-LABEL: Function,InstructionCount
1011
; CHECK: func1,1
@@ -16,4 +17,5 @@ RUN: not llvm-remarkutil count --parser=yaml --count-by=arg --group-by=function
1617
; COUNT-CHECK: func2,2
1718
; COUNT-CHECK: func3,3
1819

19-
; ERROR: error: invalid argument '--[[ARG]]=*': repetition-operator operand invalid
20+
; ERROR-REPOPERATOR: error: invalid argument '--[[ARG]]=*': repetition-operator operand invalid
21+
; ERROR-BOTHFILTERS: error: conflicting arguments: --remark-name and --rremark-name

llvm/tools/llvm-remarkutil/RemarkCounter.cpp

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -236,43 +236,25 @@ Error RemarkCounter::print(StringRef OutputFileName) {
236236

237237
Expected<Filters> getRemarkFilter() {
238238
// Create Filter properties.
239-
std::optional<FilterMatcher> RemarkNameFilter;
240-
if (!RemarkNameOpt.empty())
241-
RemarkNameFilter = FilterMatcher::createExact(RemarkNameOpt);
242-
else if (!RemarkNameOptRE.empty()) {
243-
auto FM = FilterMatcher::createRE(RemarkNameOptRE);
244-
if (!FM)
245-
return FM.takeError();
246-
RemarkNameFilter = std::move(*FM);
247-
}
239+
auto MaybeRemarkNameFilter = FilterMatcher::createExactOrRE(RemarkNameOpt, RemarkNameOptRE);
240+
if (!MaybeRemarkNameFilter)
241+
return MaybeRemarkNameFilter.takeError();
248242

249-
std::optional<FilterMatcher> PassNameFilter;
250-
if (!PassNameOpt.empty())
251-
PassNameFilter = FilterMatcher::createExact(PassNameOpt);
252-
else if (!PassNameOptRE.empty()) {
253-
auto FM = FilterMatcher::createRE(PassNameOptRE);
254-
if (!FM)
255-
return FM.takeError();
256-
PassNameFilter = std::move(*FM);
257-
}
243+
auto MaybePassNameFilter = FilterMatcher::createExactOrRE(PassNameOpt, PassNameOptRE);
244+
if (!MaybePassNameFilter)
245+
return MaybePassNameFilter.takeError();
258246

259-
std::optional<FilterMatcher> RemarkArgFilter;
260-
if (!RemarkFilterArgByOpt.empty())
261-
RemarkArgFilter = FilterMatcher::createExact(RemarkFilterArgByOpt);
262-
else if (!RemarkArgFilterOptRE.empty()) {
263-
auto FM = FilterMatcher::createRE(RemarkArgFilterOptRE);
264-
if (!FM)
265-
return FM.takeError();
266-
RemarkArgFilter = std::move(*FM);
267-
}
247+
auto MaybeRemarkArgFilter = FilterMatcher::createExactOrRE(RemarkFilterArgByOpt, RemarkArgFilterOptRE);
248+
if (!MaybeRemarkArgFilter)
249+
return MaybeRemarkArgFilter.takeError();
268250

269251
std::optional<Type> RemarkType;
270252
if (RemarkTypeOpt != Type::Failure)
271253
RemarkType = RemarkTypeOpt;
272254

273255
// Create RemarkFilter.
274-
return Filters{std::move(RemarkNameFilter), std::move(PassNameFilter),
275-
std::move(RemarkArgFilter), RemarkType};
256+
return Filters{std::move(*MaybeRemarkNameFilter), std::move(*MaybePassNameFilter),
257+
std::move(*MaybeRemarkArgFilter), RemarkType};
276258
}
277259

278260
Error useCollectRemark(StringRef Buffer, Counter &Counter, Filters &Filter) {

llvm/tools/llvm-remarkutil/RemarkUtilHelpers.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,5 +75,19 @@ Expected<FilterMatcher> FilterMatcher::createRE(StringRef Arg,
7575
return std::move(FM);
7676
}
7777

78+
Expected<std::optional<FilterMatcher>> FilterMatcher::createExactOrRE(const llvm::cl::opt<std::string> &ExactArg,
79+
const llvm::cl::opt<std::string> &REArg) {
80+
if (!ExactArg.empty() && !REArg.empty())
81+
return createStringError(make_error_code(std::errc::invalid_argument), "conflicting arguments: --" + ExactArg.ArgStr + " and --" + REArg.ArgStr);
82+
83+
if (!ExactArg.empty())
84+
return createExact(ExactArg);
85+
86+
if (!REArg.empty())
87+
return createRE(REArg);
88+
89+
return std::nullopt;
90+
}
91+
7892
} // namespace remarks
7993
} // namespace llvm

llvm/tools/llvm-remarkutil/RemarkUtilHelpers.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ class FilterMatcher {
7979
static Expected<FilterMatcher> createRE(StringRef Filter,
8080
const cl::list<std::string> &Arg);
8181

82+
static Expected<std::optional<FilterMatcher>> createExactOrRE(const llvm::cl::opt<std::string> &ExactArg,
83+
const llvm::cl::opt<std::string> &REArg);
84+
8285
static FilterMatcher createAny() { return {".*", true}; }
8386

8487
bool match(StringRef StringToMatch) const {

0 commit comments

Comments
 (0)