Skip to content

Commit 41e58b6

Browse files
committed
[SLP][NFC]Add a test for 2 spilled vector values spilled in diamond shaped control flow
1 parent 25713ed commit 41e58b6

File tree

1 file changed

+45
-1
lines changed

1 file changed

+45
-1
lines changed

llvm/test/Transforms/SLPVectorizer/RISCV/spillcost.ll

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ baz:
4545
ret void
4646
}
4747

48-
; Shouldn't be vectorized
48+
; Should be vectorized - just one spill of TMP0
4949
define void @f1(i1 %c, ptr %p, ptr %q, ptr %r) {
5050
; CHECK-LABEL: define void @f1(
5151
; CHECK-SAME: i1 [[C:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]], ptr [[R:%.*]]) #[[ATTR0]] {
@@ -89,6 +89,50 @@ baz:
8989
ret void
9090
}
9191

92+
; Shouldn't be vectorized
93+
define void @f11(i1 %c, ptr %p, ptr %q, ptr %r) {
94+
; CHECK-LABEL: define void @f11(
95+
; CHECK-SAME: i1 [[C:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]], ptr [[R:%.*]]) #[[ATTR0]] {
96+
; CHECK-NEXT: [[ENTRY:.*:]]
97+
; CHECK-NEXT: [[TMP0:%.*]] = load <2 x i64>, ptr [[P]], align 8
98+
; CHECK-NEXT: [[TMP1:%.*]] = add <2 x i64> [[TMP0]], splat (i64 1)
99+
; CHECK-NEXT: br i1 [[C]], label %[[FOO:.*]], label %[[BAR:.*]]
100+
; CHECK: [[FOO]]:
101+
; CHECK-NEXT: br label %[[BAZ:.*]]
102+
; CHECK: [[BAR]]:
103+
; CHECK-NEXT: call void @g()
104+
; CHECK-NEXT: call void @g()
105+
; CHECK-NEXT: call void @g()
106+
; CHECK-NEXT: br label %[[BAZ]]
107+
; CHECK: [[BAZ]]:
108+
; CHECK-NEXT: [[TMP2:%.*]] = phi <2 x i64> [ [[TMP1]], %[[FOO]] ], [ [[TMP0]], %[[BAR]] ]
109+
; CHECK-NEXT: store <2 x i64> [[TMP2]], ptr [[Q]], align 8
110+
; CHECK-NEXT: ret void
111+
;
112+
entry:
113+
%x0 = load i64, ptr %p
114+
%p1 = getelementptr i64, ptr %p, i64 1
115+
%x1 = load i64, ptr %p1
116+
%y0 = add i64 %x0, 1
117+
%y1 = add i64 %x1, 1
118+
br i1 %c, label %foo, label %bar
119+
foo:
120+
br label %baz
121+
bar:
122+
call void @g()
123+
call void @g()
124+
call void @g()
125+
br label %baz
126+
baz:
127+
%phi0 = phi i64 [%y0, %foo], [%x0, %bar]
128+
%phi1 = phi i64 [%y1, %foo], [%x1, %bar]
129+
store i64 %phi0, ptr %q
130+
%q1 = getelementptr i64, ptr %q, i64 1
131+
store i64 %phi1, ptr %q1
132+
133+
ret void
134+
}
135+
92136
; Should be vectorized
93137
define void @f2(i1 %c, ptr %p, ptr %q, ptr %r) {
94138
; CHECK-LABEL: define void @f2(

0 commit comments

Comments
 (0)