Skip to content

Commit 24839c3

Browse files
authored
[UTC] Escape multiple {{ or }} in input for check lines. (llvm#71790)
SCEV expressions may contain multiple {{ or }} in the debug output, which needs escaping. See llvm/test/Analysis/LoopAccessAnalysis/loops-with-indirect-reads-and-writes.ll for a test that needs escaping.
1 parent 24577bd commit 24839c3

File tree

3 files changed

+12
-5
lines changed

3 files changed

+12
-5
lines changed

llvm/test/Analysis/LoopAccessAnalysis/loops-with-indirect-reads-and-writes.ll

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ define void @test_indirect_read_write_loop_also_modifies_pointer_array(ptr nound
3434
; CHECK-NEXT: Grouped accesses:
3535
; CHECK-NEXT: Group [[GRP1]]:
3636
; CHECK-NEXT: (Low: {(64 + %arr),+,64}<%loop.1> High: {(8064 + %arr),+,64}<%loop.1>)
37-
; CHECK-NEXT: Member: {{\{{}}(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
37+
; CHECK-NEXT: Member: {{\{\{}}(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
3838
; CHECK-NEXT: Group [[GRP2]]:
3939
; CHECK-NEXT: (Low: %arr High: (8000 + %arr))
4040
; CHECK-NEXT: Member: {%arr,+,8}<nuw><%loop.2>
@@ -105,7 +105,7 @@ define void @test_indirect_read_loop_also_modifies_pointer_array(ptr noundef %ar
105105
; CHECK-NEXT: Grouped accesses:
106106
; CHECK-NEXT: Group [[GRP3]]:
107107
; CHECK-NEXT: (Low: {(64 + %arr),+,64}<%loop.1> High: {(8064 + %arr),+,64}<%loop.1>)
108-
; CHECK-NEXT: Member: {{\{{}}(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
108+
; CHECK-NEXT: Member: {{\{\{}}(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
109109
; CHECK-NEXT: Group [[GRP4]]:
110110
; CHECK-NEXT: (Low: %arr High: (8000 + %arr))
111111
; CHECK-NEXT: Member: {%arr,+,8}<nuw><%loop.2>
@@ -175,7 +175,7 @@ define void @test_indirect_write_loop_also_modifies_pointer_array(ptr noundef %a
175175
; CHECK-NEXT: Grouped accesses:
176176
; CHECK-NEXT: Group [[GRP5]]:
177177
; CHECK-NEXT: (Low: {(64 + %arr),+,64}<%loop.1> High: {(8064 + %arr),+,64}<%loop.1>)
178-
; CHECK-NEXT: Member: {{\{{}}(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
178+
; CHECK-NEXT: Member: {{\{\{}}(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
179179
; CHECK-NEXT: Group [[GRP6]]:
180180
; CHECK-NEXT: (Low: %arr High: (8000 + %arr))
181181
; CHECK-NEXT: Member: {%arr,+,8}<nuw><%loop.2>
@@ -244,7 +244,7 @@ define void @test_indirect_read_write_loop_does_not_modify_pointer_array(ptr nou
244244
; CHECK-NEXT: Grouped accesses:
245245
; CHECK-NEXT: Group [[GRP7]]:
246246
; CHECK-NEXT: (Low: {(64 + %arr),+,64}<%loop.1> High: {(8064 + %arr),+,64}<%loop.1>)
247-
; CHECK-NEXT: Member: {{\{{}}(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
247+
; CHECK-NEXT: Member: {{\{\{}}(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
248248
; CHECK-NEXT: Group [[GRP8]]:
249249
; CHECK-NEXT: (Low: %arr High: (8000 + %arr))
250250
; CHECK-NEXT: Member: {%arr,+,8}<nuw><%loop.2>

llvm/test/tools/UpdateTestChecks/update_analyze_test_checks/Inputs/loop-access-analysis.ll.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ define void @test_brace_escapes(ptr noundef %arr) {
8181
; CHECK-NEXT: Grouped accesses:
8282
; CHECK-NEXT: Group [[GRP4]]:
8383
; CHECK-NEXT: (Low: {(64 + %arr),+,64}<%loop.1> High: {(8064 + %arr),+,64}<%loop.1>)
84-
; CHECK-NEXT: Member: {{(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
84+
; CHECK-NEXT: Member: {{\{\{}}(64 + %arr),+,64}<%loop.1>,+,8}<%loop.2>
8585
; CHECK-NEXT: Group [[GRP5]]:
8686
; CHECK-NEXT: (Low: %arr High: (8000 + %arr))
8787
; CHECK-NEXT: Member: {%arr,+,8}<nuw><%loop.2>

llvm/utils/UpdateTestChecks/common.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,9 @@ def transform_line_vars(match):
11711171
return match.group(1) + rv + match.group(match.lastindex)
11721172

11731173
lines_with_def = []
1174+
multiple_braces_re = re.compile(r"({{+)|(}}+)")
1175+
def escape_braces(match_obj):
1176+
return '{{' + re.escape(match_obj.group(0)) + '}}'
11741177

11751178
for i, line in enumerate(lines):
11761179
if not is_asm and not is_analyze:
@@ -1200,6 +1203,10 @@ def transform_line_vars(match):
12001203
(lines[i], changed) = nameless_value_regex.subn(
12011204
transform_line_vars, lines[i], count=1
12021205
)
1206+
if is_analyze:
1207+
# Escape multiple {{ or }} as {{}} denotes a FileCheck regex.
1208+
scrubbed_line = multiple_braces_re.sub(escape_braces, lines[i])
1209+
lines[i] = scrubbed_line
12031210
return lines
12041211

12051212

0 commit comments

Comments
 (0)