-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[utils] Use stricter SSA regexp for CHECK-SAME. #128083
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
When CHECK-SAME checks are split across multiple lines, the '.*' regexp for the SSA variable name may cause problems, e.g.: // CHECK_LABEL: func.func @whatever( // CHECK-SAME: %[[VAL_0:.*]]: i32, // CHECK-SAME: %[[VAL_1:.*]]: i32, // CHECK-SAME: %[[VAL_2:.*]]: i64) This will not work for `func.func @whatever(%0: i32, %1: i32, %2: i64)`, because VAL_0 will match to `0: i32, %1`.
@llvm/pr-subscribers-mlir Author: Slava Zakharin (vzakhari) ChangesWhen CHECK-SAME checks are split across multiple lines,
This will not work for Full diff: https://github.com/llvm/llvm-project/pull/128083.diff 1 Files Affected:
diff --git a/mlir/utils/generate-test-checks.py b/mlir/utils/generate-test-checks.py
index 8faa425beace1..80069737be97d 100755
--- a/mlir/utils/generate-test-checks.py
+++ b/mlir/utils/generate-test-checks.py
@@ -159,7 +159,7 @@ def get_num_ssa_results(input_line):
# Process a line of input that has been split at each SSA identifier '%'.
-def process_line(line_chunks, variable_namer):
+def process_line(line_chunks, variable_namer, strict=False):
output_line = ""
# Process the rest that contained an SSA value name.
@@ -180,7 +180,14 @@ def process_line(line_chunks, variable_namer):
else:
# Otherwise, generate a new variable.
variable = variable_namer.generate_name(ssa_name)
- output_line += "%[[" + variable + ":.*]]"
+ if strict:
+ # Use stricter regexp for the variable name, if requested.
+ # Greedy matching may cause issues with the generic '.*'
+ # regexp when the checks are split across several
+ # lines (e.g. for CHECK-SAME).
+ output_line += "%[[" + variable + ":" + SSA_RE_STR + "]]"
+ else:
+ output_line += "%[[" + variable + ":.*]]"
# Append the non named group.
output_line += chunk[len(ssa_name) :]
@@ -390,7 +397,7 @@ def main():
output_line += " " * len(ssa_split[0])
# Process the rest of the line.
- output_line += process_line([argument], variable_namer)
+ output_line += process_line([argument], variable_namer, strict=True)
# Append the output line.
output_segments[-1].append(output_line)
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems reasonable to me!
mlir/utils/generate-test-checks.py
Outdated
@@ -180,7 +180,14 @@ def process_line(line_chunks, variable_namer): | |||
else: | |||
# Otherwise, generate a new variable. | |||
variable = variable_namer.generate_name(ssa_name) | |||
output_line += "%[[" + variable + ":.*]]" | |||
if strict: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can you use a more descriptive name here? Something like strict_name_re
, just to be a bit more clear.
✅ With the latest revision this PR passed the Python code formatter. |
It looks like I have some old clang-format in my path, so I keep catching formatting issues only on pre-commit. Sorry for the noise... |
Following llvm#128083, all `CHECK-SAME` lines generated by generate-test-checks.py use a strict regex: ```mlir // CHECK-SAME: %[[A:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]] = arith.constant 0 : index ``` However, in most cases this strict form is unnecessary and can obscure readability. In such cases, the following would be sufficient: ```mlir // CHECK-SAME: %[[A:.*]] = arith.constant 0 : index ``` This patch adds a command-line flag to make the strict mode optional. To enable strict regex matching, use: ```bash generate-test-checks.py --strict_name_re=true file.mlir ```
Following #128083, all `CHECK-SAME` lines generated by generate-test-checks.py use a strict regex: ```mlir // CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: memref<128x256x512xf32>, ``` However, in most cases this strict form is unnecessary and can obscure readability. In such cases, the following would be sufficient: ```mlir // CHECK-SAME: %[[VAL_0:.*]]: memref<128x256x512xf32>, ``` This patch adds a command-line flag to make the strict mode optional. To enable strict regex matching, use: ```bash generate-test-checks.py --strict_name_re=true file.mlir ```
Following llvm#128083, all `CHECK-SAME` lines generated by generate-test-checks.py use a strict regex: ```mlir // CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: memref<128x256x512xf32>, ``` However, in most cases this strict form is unnecessary and can obscure readability. In such cases, the following would be sufficient: ```mlir // CHECK-SAME: %[[VAL_0:.*]]: memref<128x256x512xf32>, ``` This patch adds a command-line flag to make the strict mode optional. To enable strict regex matching, use: ```bash generate-test-checks.py --strict_name_re=true file.mlir ```
Following llvm#128083, all `CHECK-SAME` lines generated by generate-test-checks.py use a strict regex: ```mlir // CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: memref<128x256x512xf32>, ``` However, in most cases this strict form is unnecessary and can obscure readability. In such cases, the following would be sufficient: ```mlir // CHECK-SAME: %[[VAL_0:.*]]: memref<128x256x512xf32>, ``` This patch adds a command-line flag to make the strict mode optional. To enable strict regex matching, use: ```bash generate-test-checks.py --strict_name_re=true file.mlir ```
Following llvm#128083, all `CHECK-SAME` lines generated by generate-test-checks.py use a strict regex: ```mlir // CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: memref<128x256x512xf32>, ``` However, in most cases this strict form is unnecessary and can obscure readability. In such cases, the following would be sufficient: ```mlir // CHECK-SAME: %[[VAL_0:.*]]: memref<128x256x512xf32>, ``` This patch adds a command-line flag to make the strict mode optional. To enable strict regex matching, use: ```bash generate-test-checks.py --strict_name_re=true file.mlir ```
When CHECK-SAME checks are split across multiple lines,
the '.*' regexp for the SSA variable name may cause problems, e.g.:
This will not work for
func.func @whatever(%0: i32, %1: i32, %2: i64)
,because VAL_0 will match to
0: i32, %1
.