Skip to content

Commit 194ecef

Browse files
authored
update_test_checks: add new --filter-out-after option (llvm#129739)
Whilst trying to clean up some loop vectoriser IR tests (see test/Transforms/LoopVectorize/AArch64/partial-reduce-chained.ll for example) a reviewer on PR llvm#129047 suggested it would be nice to have an option to stop generating CHECK lines after a certain point. Typically when performing a transformation with the loop vectoriser we don't usually care about any CHECK lines generated for the scalar tail of the loop, since the scalar loop is kept intact. Previously if you wanted to eliminate such unwanted CHECK lines you had to run the update script, then manually delete all the lines corresponding to the scalar loop. This can be very time consuming if the tests ever need changing. What I've tried to do here is add a new --filter-out-after option alongside the existing --filter* options that provides support for stopping the generation of any CHECK lines beyond the line that matches the filter. With the existing filter options we never generate CHECK-NEXT lines, but we still care about ordering with --filter-out-after so I've amended the code to ensure we treat this filter differently.
1 parent c42952a commit 194ecef

File tree

12 files changed

+332
-12
lines changed

12 files changed

+332
-12
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// RUN: %clang_cc1 -triple=aarch64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK %s
2+
3+
extern void bar(void);
4+
5+
void foo(int *p, int *q, double *t) {
6+
*p = 5;
7+
*q = 7;
8+
bar();
9+
*t = 1.3l;
10+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --filter-out-after "call.*bar" --version 5
2+
// RUN: %clang_cc1 -triple=aarch64-unknown-linux-gnu -emit-llvm -o - %s | FileCheck -check-prefixes=CHECK %s
3+
4+
extern void bar(void);
5+
6+
// CHECK-LABEL: define dso_local void @foo(
7+
// CHECK-SAME: ptr noundef [[P:%.*]], ptr noundef [[Q:%.*]], ptr noundef [[T:%.*]]) #[[ATTR0:[0-9]+]] {
8+
// CHECK-NEXT: [[ENTRY:.*:]]
9+
// CHECK-NEXT: [[P_ADDR:%.*]] = alloca ptr, align 8
10+
// CHECK-NEXT: [[Q_ADDR:%.*]] = alloca ptr, align 8
11+
// CHECK-NEXT: [[T_ADDR:%.*]] = alloca ptr, align 8
12+
// CHECK-NEXT: store ptr [[P]], ptr [[P_ADDR]], align 8
13+
// CHECK-NEXT: store ptr [[Q]], ptr [[Q_ADDR]], align 8
14+
// CHECK-NEXT: store ptr [[T]], ptr [[T_ADDR]], align 8
15+
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[P_ADDR]], align 8
16+
// CHECK-NEXT: store i32 5, ptr [[TMP0]], align 4
17+
// CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[Q_ADDR]], align 8
18+
// CHECK-NEXT: store i32 7, ptr [[TMP1]], align 4
19+
// CHECK-NEXT: call void @bar()
20+
//
21+
void foo(int *p, int *q, double *t) {
22+
*p = 5;
23+
*q = 7;
24+
bar();
25+
*t = 1.3l;
26+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
## Check that --filter_out_after works properly.
2+
# RUN: cp -f %S/Inputs/filter_out_after.c %t.c && %update_cc_test_checks --version=5 --filter-out-after="call.*bar" %t.c
3+
# RUN: diff -u %t.c %S/Inputs/filter_out_after.c.expected
4+
5+
## Check that running the script again does not change the result:
6+
# RUN: %update_cc_test_checks --version=5 --filter-out-after="call.*bar" %t.c
7+
# RUN: diff -u %t.c %S/Inputs/filter_out_after.c.expected
8+
9+
## Check that running the script again, without arguments, does not change the result:
10+
# RUN: %update_cc_test_checks --version=5 %t.c
11+
# RUN: diff -u %t.c %S/Inputs/filter_out_after.c.expected
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
; RUN: opt < %s -S | FileCheck %s
2+
3+
define i32 @func({i32, i32} %x, i32 %y, i1 %cond) {
4+
entry:
5+
br i1 %cond, label %b1, label %b2
6+
7+
b1:
8+
%x.idx0 = extractvalue {i32, i32} %x, 0
9+
%add1 = add i32 %y, 1
10+
%add2 = add i32 %x.idx0, %add1
11+
%mul = mul i32 %add2, 3
12+
br label %b2
13+
14+
b2:
15+
%res = phi i32 [ -1, %entry ], [ %mul, %b1 ]
16+
ret i32 %res
17+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --filter-out-after "^b2:" --version 5
2+
; RUN: opt < %s -S | FileCheck %s
3+
4+
define i32 @func({i32, i32} %x, i32 %y, i1 %cond) {
5+
; CHECK-LABEL: define i32 @func(
6+
; CHECK-SAME: { i32, i32 } [[X:%.*]], i32 [[Y:%.*]], i1 [[COND:%.*]]) {
7+
; CHECK-NEXT: [[ENTRY:.*:]]
8+
; CHECK-NEXT: br i1 [[COND]], label %[[B1:.*]], label %[[B2:.*]]
9+
; CHECK: [[B1]]:
10+
; CHECK-NEXT: [[X_IDX0:%.*]] = extractvalue { i32, i32 } [[X]], 0
11+
; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[Y]], 1
12+
; CHECK-NEXT: [[ADD2:%.*]] = add i32 [[X_IDX0]], [[ADD1]]
13+
; CHECK-NEXT: [[MUL:%.*]] = mul i32 [[ADD2]], 3
14+
; CHECK-NEXT: br label %[[B2]]
15+
; CHECK: [[B2]]:
16+
;
17+
entry:
18+
br i1 %cond, label %b1, label %b2
19+
20+
b1:
21+
%x.idx0 = extractvalue {i32, i32} %x, 0
22+
%add1 = add i32 %y, 1
23+
%add2 = add i32 %x.idx0, %add1
24+
%mul = mul i32 %add2, 3
25+
br label %b2
26+
27+
b2:
28+
%res = phi i32 [ -1, %entry ], [ %mul, %b1 ]
29+
ret i32 %res
30+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --filter-out-after "= mul i32" --filter-out-after "^b2:" --version 5
2+
; RUN: opt < %s -S | FileCheck %s
3+
4+
define i32 @func({i32, i32} %x, i32 %y, i1 %cond) {
5+
; CHECK-LABEL: define i32 @func(
6+
; CHECK-SAME: { i32, i32 } [[X:%.*]], i32 [[Y:%.*]], i1 [[COND:%.*]]) {
7+
; CHECK-NEXT: [[ENTRY:.*:]]
8+
; CHECK-NEXT: br i1 [[COND]], label %[[B1:.*]], [[B2:label %.*]]
9+
; CHECK: [[B1]]:
10+
; CHECK-NEXT: [[X_IDX0:%.*]] = extractvalue { i32, i32 } [[X]], 0
11+
; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[Y]], 1
12+
; CHECK-NEXT: [[ADD2:%.*]] = add i32 [[X_IDX0]], [[ADD1]]
13+
; CHECK-NEXT: [[MUL:%.*]] = mul i32 [[ADD2]], 3
14+
;
15+
entry:
16+
br i1 %cond, label %b1, label %b2
17+
18+
b1:
19+
%x.idx0 = extractvalue {i32, i32} %x, 0
20+
%add1 = add i32 %y, 1
21+
%add2 = add i32 %x.idx0, %add1
22+
%mul = mul i32 %add2, 3
23+
br label %b2
24+
25+
b2:
26+
%res = phi i32 [ -1, %entry ], [ %mul, %b1 ]
27+
ret i32 %res
28+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
; RUN: opt < %s -S | FileCheck %s
2+
3+
define i32 @func1({i32, i32} %x, i32 %y, i1 %cond) {
4+
entry:
5+
br i1 %cond, label %b1, label %b2
6+
7+
b1:
8+
%x.idx0 = extractvalue {i32, i32} %x, 0
9+
%add1 = add i32 %y, 1
10+
%add2 = add i32 %x.idx0, %add1
11+
%mul = mul i32 %add2, 3
12+
br label %b2
13+
14+
b2:
15+
%res = phi i32 [ -1, %entry ], [ %mul, %b1 ]
16+
ret i32 %res
17+
}
18+
19+
define i32 @func2({i32, i32} %x, i32 %y, i1 %cond) {
20+
entry:
21+
br i1 %cond, label %b2, label %b0
22+
23+
b2:
24+
%x.idx0 = extractvalue {i32, i32} %x, 0
25+
%add1 = add i32 %y, 1
26+
%add2 = add i32 %x.idx0, %add1
27+
%mul = mul i32 %add2, 3
28+
br label %b0
29+
30+
b0:
31+
%res = phi i32 [ -1, %entry ], [ %mul, %b2 ]
32+
ret i32 %res
33+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --filter-out-after "^b2:" --version 5
2+
; RUN: opt < %s -S | FileCheck %s
3+
4+
define i32 @func1({i32, i32} %x, i32 %y, i1 %cond) {
5+
; CHECK-LABEL: define i32 @func1(
6+
; CHECK-SAME: { i32, i32 } [[X:%.*]], i32 [[Y:%.*]], i1 [[COND:%.*]]) {
7+
; CHECK-NEXT: [[ENTRY:.*:]]
8+
; CHECK-NEXT: br i1 [[COND]], label %[[B1:.*]], label %[[B2:.*]]
9+
; CHECK: [[B1]]:
10+
; CHECK-NEXT: [[X_IDX0:%.*]] = extractvalue { i32, i32 } [[X]], 0
11+
; CHECK-NEXT: [[ADD1:%.*]] = add i32 [[Y]], 1
12+
; CHECK-NEXT: [[ADD2:%.*]] = add i32 [[X_IDX0]], [[ADD1]]
13+
; CHECK-NEXT: [[MUL:%.*]] = mul i32 [[ADD2]], 3
14+
; CHECK-NEXT: br label %[[B2]]
15+
; CHECK: [[B2]]:
16+
;
17+
entry:
18+
br i1 %cond, label %b1, label %b2
19+
20+
b1:
21+
%x.idx0 = extractvalue {i32, i32} %x, 0
22+
%add1 = add i32 %y, 1
23+
%add2 = add i32 %x.idx0, %add1
24+
%mul = mul i32 %add2, 3
25+
br label %b2
26+
27+
b2:
28+
%res = phi i32 [ -1, %entry ], [ %mul, %b1 ]
29+
ret i32 %res
30+
}
31+
32+
define i32 @func2({i32, i32} %x, i32 %y, i1 %cond) {
33+
; CHECK-LABEL: define i32 @func2(
34+
; CHECK-SAME: { i32, i32 } [[X:%.*]], i32 [[Y:%.*]], i1 [[COND:%.*]]) {
35+
; CHECK-NEXT: [[ENTRY:.*:]]
36+
; CHECK-NEXT: br i1 [[COND]], label %[[B2:.*]], [[B0:label %.*]]
37+
; CHECK: [[B2]]:
38+
;
39+
entry:
40+
br i1 %cond, label %b2, label %b0
41+
42+
b2:
43+
%x.idx0 = extractvalue {i32, i32} %x, 0
44+
%add1 = add i32 %y, 1
45+
%add2 = add i32 %x.idx0, %add1
46+
%mul = mul i32 %add2, 3
47+
br label %b0
48+
49+
b0:
50+
%res = phi i32 [ -1, %entry ], [ %mul, %b2 ]
51+
ret i32 %res
52+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
; RUN: opt -S -mtriple aarch64-linux-gnu -passes=instnamer < %s | FileCheck %s
2+
3+
define i32 @f_0(i32) {
4+
%2 = add i32 %0, 2
5+
br label %3
6+
7+
; <label>:3:
8+
ret i32 %2
9+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --filter-out-after "br label %3" --version 5
2+
; RUN: opt -S -mtriple aarch64-linux-gnu -passes=instnamer < %s | FileCheck %s
3+
4+
define i32 @f_0(i32) {
5+
; CHECK-LABEL: define i32 @f_0(
6+
; CHECK-SAME: i32 [[ARG:%.*]]) {
7+
; CHECK-NEXT: [[BB:.*:]]
8+
; CHECK-NEXT: [[I:%.*]] = add i32 [[ARG]], 2
9+
; CHECK-NEXT: br label %[[BB1:.*]]
10+
; CHECK: [[BB1]]:
11+
; CHECK-NEXT: ret i32 [[I]]
12+
;
13+
%2 = add i32 %0, 2
14+
br label %3
15+
16+
; <label>:3:
17+
ret i32 %2
18+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
## Check that --filter-out-after works properly.
2+
# RUN: cp -f %S/Inputs/filter-out-after.ll %t.ll && %update_test_checks --version=5 --filter-out-after="^b2:" %t.ll
3+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after.ll.expected
4+
5+
## Check that running the script again does not change the result:
6+
# RUN: %update_test_checks --version=5 --filter-out-after="^b2:" %t.ll
7+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after.ll.expected
8+
9+
## Check that running the script again, without arguments, does not change the result:
10+
# RUN: %update_test_checks --version=5 %t.ll
11+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after.ll.expected
12+
13+
## Check that multiple --filter-out-after options work properly.
14+
# RUN: cp -f %S/Inputs/filter-out-after.ll %t.ll && %update_test_checks --version=5 --filter-out-after="= mul i32" --filter-out-after="^b2:" %t.ll
15+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after.ll.expected2
16+
17+
## Check that running the script again does not change the result:
18+
# RUN: %update_test_checks --version=5 --filter-out-after="= mul i32" --filter-out-after="^b2:" %t.ll
19+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after.ll.expected2
20+
21+
## Check that running the script again, without arguments, does not change the result:
22+
# RUN: %update_test_checks --version=5 %t.ll
23+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after.ll.expected2
24+
25+
## Check that --filter-out-after works per function only.
26+
# RUN: cp -f %S/Inputs/filter-out-after2.ll %t.ll && %update_test_checks --version=5 --filter-out-after="^b2:" %t.ll
27+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after2.ll.expected
28+
29+
## Check that running the script again does not change the result:
30+
# RUN: %update_test_checks --version=5 --filter-out-after="^b2:" %t.ll
31+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after2.ll.expected
32+
33+
## Check that running the script again, without arguments, does not change the result:
34+
# RUN: %update_test_checks --version=5 %t.ll
35+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after2.ll.expected
36+
37+
## Check that --filter-out-after does not filter input IR.
38+
# RUN: cp -f %S/Inputs/filter-out-after3.ll %t.ll && %update_test_checks --version=5 --filter-out-after="br label %3" %t.ll
39+
# RUN: diff -u %t.ll %S/Inputs/filter-out-after3.ll.expected

0 commit comments

Comments
 (0)