Skip to content

Commit 3568e78

Browse files
committed
[DAGCombiner] Add pre-commit test for forwarding vector store
1 parent d7b936b commit 3568e78

File tree

1 file changed

+66
-0
lines changed

1 file changed

+66
-0
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2+
; RUN: llc -mtriple=riscv64 -mattr=+v,+d,+zvfh -o - %s | FileCheck %s
3+
4+
define void @forward_store(<32 x half> %halves, ptr %p, ptr %p2, ptr %p3, ptr %p4) {
5+
; CHECK-LABEL: forward_store:
6+
; CHECK: # %bb.0:
7+
; CHECK-NEXT: addi a4, a0, 16
8+
; CHECK-NEXT: li a5, 32
9+
; CHECK-NEXT: vsetvli zero, a5, e16, m4, ta, ma
10+
; CHECK-NEXT: vse16.v v8, (a0)
11+
; CHECK-NEXT: addi a5, a0, 32
12+
; CHECK-NEXT: addi a0, a0, 48
13+
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
14+
; CHECK-NEXT: vle16.v v8, (a4)
15+
; CHECK-NEXT: vle16.v v9, (a5)
16+
; CHECK-NEXT: vle16.v v10, (a0)
17+
; CHECK-NEXT: vse16.v v8, (a1)
18+
; CHECK-NEXT: vse16.v v9, (a2)
19+
; CHECK-NEXT: vse16.v v10, (a3)
20+
; CHECK-NEXT: ret
21+
store <32 x half> %halves, ptr %p, align 256
22+
%gep1 = getelementptr inbounds nuw i8, ptr %p, i32 16
23+
%gep2 = getelementptr inbounds nuw i8, ptr %p, i32 32
24+
%gep3 = getelementptr inbounds nuw i8, ptr %p, i32 48
25+
%ld1 = load <8 x half>, ptr %gep1, align 4
26+
%ld2 = load <8 x half>, ptr %gep2, align 4
27+
%ld3 = load <8 x half>, ptr %gep3, align 4
28+
store <8 x half> %ld1, ptr %p2
29+
store <8 x half> %ld2, ptr %p3
30+
store <8 x half> %ld3, ptr %p4
31+
ret void
32+
}
33+
34+
define void @no_forward_store(<32 x half> %halves, ptr %p, ptr %p2, ptr %p3, ptr %p4) {
35+
; CHECK-LABEL: no_forward_store:
36+
; CHECK: # %bb.0:
37+
; CHECK-NEXT: addi a4, a0, 8
38+
; CHECK-NEXT: li a5, 32
39+
; CHECK-NEXT: vsetvli zero, a5, e16, m4, ta, ma
40+
; CHECK-NEXT: vse16.v v8, (a0)
41+
; CHECK-NEXT: addi a5, a0, 16
42+
; CHECK-NEXT: addi a0, a0, 64
43+
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
44+
; CHECK-NEXT: vle16.v v8, (a4)
45+
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
46+
; CHECK-NEXT: vle32.v v9, (a5)
47+
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
48+
; CHECK-NEXT: vle16.v v10, (a0)
49+
; CHECK-NEXT: vse16.v v8, (a1)
50+
; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma
51+
; CHECK-NEXT: vse32.v v9, (a2)
52+
; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma
53+
; CHECK-NEXT: vse16.v v10, (a3)
54+
; CHECK-NEXT: ret
55+
store <32 x half> %halves, ptr %p, align 256
56+
%gep1 = getelementptr inbounds nuw i8, ptr %p, i32 8
57+
%gep2 = getelementptr inbounds nuw i8, ptr %p, i32 16
58+
%gep3 = getelementptr inbounds nuw i8, ptr %p, i32 64
59+
%ld1 = load <8 x half>, ptr %gep1, align 4
60+
%ld2 = load <4 x i32>, ptr %gep2, align 4
61+
%ld3 = load <8 x half>, ptr %gep3, align 4
62+
store <8 x half> %ld1, ptr %p2
63+
store <4 x i32> %ld2, ptr %p3
64+
store <8 x half> %ld3, ptr %p4
65+
ret void
66+
}

0 commit comments

Comments
 (0)