Skip to content

Commit e89abb7

Browse files
committedAug 15, 2022
8292190: [IR Framework] Remove redundant regex matching for failing counts constraints
Reviewed-by: kvn, rcastanedalo, thartmann
1 parent 77cd917 commit e89abb7

File tree

2 files changed

+18
-22
lines changed

2 files changed

+18
-22
lines changed
 

‎test/hotspot/jtreg/compiler/lib/ir_framework/driver/irmatching/irrule/Counts.java

+16-21
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@
3030

3131
import java.util.ArrayList;
3232
import java.util.List;
33+
import java.util.regex.MatchResult;
3334
import java.util.regex.Matcher;
3435
import java.util.regex.Pattern;
36+
import java.util.stream.Collectors;
3537

3638
/**
3739
* Class representing a counts attribute of an IR rule.
@@ -53,7 +55,7 @@ public static Counts create(List<String> nodesWithCountConstraint, IRRule irRule
5355
TestFormat.check(i + 1 < nodesWithCountConstraint.size(),
5456
"Missing count " + getPostfixErrorMsg(irRule, node));
5557
String countConstraint = nodesWithCountConstraint.get(i + 1);
56-
Comparison<Long> comparison = parseComparison(irRule, node, countConstraint);
58+
Comparison<Integer> comparison = parseComparison(irRule, node, countConstraint);
5759
constraints.add(new Constraint(node, comparison, nodeId));
5860
}
5961
return new Counts(constraints);
@@ -63,9 +65,9 @@ private static String getPostfixErrorMsg(IRRule irRule, String node) {
6365
return "for IR rule " + irRule.getRuleId() + ", node \"" + node + "\" at " + irRule.getMethod();
6466
}
6567

66-
private static Comparison<Long> parseComparison(IRRule irRule, String node, String constraint) {
68+
private static Comparison<Integer> parseComparison(IRRule irRule, String node, String constraint) {
6769
String postfixErrorMsg = "in count constraint " + getPostfixErrorMsg(irRule, node);
68-
return ComparisonConstraintParser.parse(constraint, Long::parseLong, postfixErrorMsg);
70+
return ComparisonConstraintParser.parse(constraint, Integer::parseInt, postfixErrorMsg);
6971
}
7072

7173
@Override
@@ -82,37 +84,30 @@ private void checkConstraints(CountsMatchResult result, String compilation) {
8284
}
8385

8486
private void checkConstraint(CountsMatchResult result, String compilation, Constraint constraint) {
85-
long foundCount = getFoundCount(compilation, constraint);
86-
Comparison<Long> comparison = constraint.comparison;
87-
if (!comparison.compare(foundCount)) {
88-
result.addFailure(createRegexFailure(compilation, constraint, foundCount));
87+
List<String> countsMatches = getCountsMatches(compilation, constraint);
88+
Comparison<Integer> comparison = constraint.comparison;
89+
if (!comparison.compare(countsMatches.size())) {
90+
result.addFailure(createRegexFailure(countsMatches, constraint));
8991
}
9092
}
9193

92-
private long getFoundCount(String compilation, Constraint constraint) {
94+
private List<String> getCountsMatches(String compilation, Constraint constraint) {
9395
Pattern pattern = Pattern.compile(constraint.nodeRegex);
9496
Matcher matcher = pattern.matcher(compilation);
95-
return matcher.results().count();
97+
return matcher.results().map(MatchResult::group).collect(Collectors.toList());
9698
}
9799

98-
private CountsRegexFailure createRegexFailure(String compilation, Constraint constraint, long foundCount) {
99-
Pattern p = Pattern.compile(constraint.nodeRegex);
100-
Matcher m = p.matcher(compilation);
101-
List<String> matches;
102-
if (m.find()) {
103-
matches = getMatchedNodes(m);
104-
} else {
105-
matches = new ArrayList<>();
106-
}
107-
return new CountsRegexFailure(constraint.nodeRegex, constraint.nodeId, foundCount, constraint.comparison, matches);
100+
private CountsRegexFailure createRegexFailure(List<String> countsMatches, Constraint constraint) {
101+
return new CountsRegexFailure(constraint.nodeRegex, constraint.nodeId, countsMatches.size(), constraint.comparison,
102+
countsMatches);
108103
}
109104

110105
static class Constraint {
111106
final String nodeRegex;
112-
final Comparison<Long> comparison;
107+
final Comparison<Integer> comparison;
113108
private final int nodeId;
114109

115-
Constraint(String nodeRegex, Comparison<Long> comparison, int nodeId) {
110+
Constraint(String nodeRegex, Comparison<Integer> comparison, int nodeId) {
116111
this.nodeRegex = nodeRegex;
117112
this.comparison = comparison;
118113
this.nodeId = nodeId;

‎test/hotspot/jtreg/compiler/lib/ir_framework/driver/irmatching/irrule/CountsRegexFailure.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@
3535
class CountsRegexFailure extends RegexFailure {
3636
String failedComparison;
3737

38-
public CountsRegexFailure(String nodeRegex, int nodeId, long foundValue, Comparison<Long> comparison, List<String> matches) {
38+
public CountsRegexFailure(String nodeRegex, int nodeId, int foundValue, Comparison<Integer> comparison,
39+
List<String> matches) {
3940
super(nodeRegex, nodeId, matches);
4041
this.failedComparison = "[found] " + foundValue + " " + comparison.getComparator() + " "
4142
+ comparison.getGivenValue() + " [given]";

1 commit comments

Comments
 (1)

openjdk-notifier[bot] commented on Aug 15, 2022

@openjdk-notifier[bot]
Please sign in to comment.