xref: /llvm-project/llvm/test/CodeGen/RISCV/rda-stack.mir (revision 3c3c850a45c8f1ea1e9d6aa514e2b6076d1a4534)
1# RUN: llc %s -mtriple=riscv64 -run-pass=reaching-defs-analysis -print-all-reaching-defs -o - 2>&1 | FileCheck %s
2
3---
4name:            test0
5tracksRegLiveness: true
6stack:
7  - { id: 0, name: '', type: default, offset: 0, size: 4, alignment: 4,
8      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
9      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
10body:             |
11  ; CHECK-LABEL: RDA results for test0
12  ; CHECK-NEXT: %stack.0:{ }
13  ; CHECK-NEXT:0: $x10 = LD %stack.0, 0 :: (load (s64))
14  ; CHECK-EMPTY:
15  ; CHECK-NEXT: implicit $x10:{ 0 }
16  ; CHECK-NEXT:1: PseudoRET implicit $x10
17
18  bb.0.entry:
19    $x10 = LD %stack.0, 0 :: (load (s64))
20    PseudoRET implicit $x10
21
22...
23---
24name:            test1
25tracksRegLiveness: true
26stack:
27  - { id: 0, name: '', type: default, offset: 0, size: 4, alignment: 4,
28      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
29      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
30  - { id: 1, name: '', type: default, offset: 0, size: 4, alignment: 4,
31      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
32      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
33body:             |
34  ; CHECK-LABEL: RDA results for test1
35  ; CHECK-NEXT: %stack.0:{ }
36  ; CHECK-NEXT: 0: $x10 = LD %stack.0, 0 :: (load (s64))
37  ; CHECK-EMPTY:
38  ; CHECK-NEXT: %stack.1:{ }
39  ; CHECK-NEXT: 1: $x11 = LD %stack.1, 0 :: (load (s64))
40  ; CHECK-EMPTY:
41  ; CHECK-NEXT: $x10:{ 0 }
42  ; CHECK-NEXT: $x11:{ 1 }
43  ; CHECK-NEXT: 2: $x10 = ADD $x10, $x11
44  ; CHECK-EMPTY:
45  ; CHECK-NEXT: implicit $x10:{ 2 }
46  ; CHECK-NEXT: 3: PseudoRET implicit $x10
47
48  bb.0.entry:
49    $x10 = LD %stack.0, 0 :: (load (s64))
50    $x11 = LD %stack.1, 0 :: (load (s64))
51    $x10 = ADD $x10, $x11
52    PseudoRET implicit $x10
53
54...
55---
56name:            test2
57tracksRegLiveness: true
58stack:
59  - { id: 0, name: '', type: default, offset: 0, size: 4, alignment: 4,
60      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
61      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
62  - { id: 1, name: '', type: default, offset: 0, size: 4, alignment: 4,
63      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
64      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
65body:             |
66  ; CHECK-LABEL: RDA results for test2
67  ; CHECK-NEXT: %stack.0:{ }
68  ; CHECK-NEXT: 0: $x10 = LD %stack.0, 0 :: (load (s64))
69  ; CHECK-EMPTY:
70  ; CHECK-NEXT: %stack.1:{ }
71  ; CHECK-NEXT: 1: $x11 = LD %stack.1, 0 :: (load (s64))
72  ; CHECK-EMPTY:
73  ; CHECK-NEXT: $x10:{ 0 }
74  ; CHECK-NEXT: $x11:{ 1 }
75  ; CHECK-NEXT: 2: $x10 = ADD $x10, $x11
76  ; CHECK-EMPTY:
77  ; CHECK-NEXT: $x10:{ 2 }
78  ; CHECK-NEXT: %stack.0:{ }
79  ; CHECK-NEXT: 3: SD $x10, %stack.0, 0 :: (store (s64))
80  ; CHECK-EMPTY:
81  ; CHECK-NEXT: %stack.0:{ 3 }
82  ; CHECK-NEXT: 4: $x10 = LD %stack.0, 0 :: (load (s64))
83  ; CHECK-EMPTY:
84  ; CHECK-NEXT: implicit $x10:{ 4 }
85  ; CHECK-NEXT: 5: PseudoRET implicit $x10
86
87  bb.0.entry:
88    $x10 = LD %stack.0, 0 :: (load (s64))
89    $x11 = LD %stack.1, 0 :: (load (s64))
90    $x10 = ADD $x10, $x11
91    SD $x10, %stack.0, 0 :: (store (s64))
92    $x10 = LD %stack.0, 0 :: (load (s64))
93    PseudoRET implicit $x10
94
95...
96---
97name:            test3
98tracksRegLiveness: true
99stack:
100  - { id: 0, name: '', type: default, offset: 0, size: 4, alignment: 4,
101      stack-id: default, callee-saved-register: '', callee-saved-restored: true,
102      debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }
103body:             |
104  ; CHECK-LABEL: RDA results for test3
105  ; CHECK-NEXT: $x10:{ }
106  ; CHECK-NEXT: $x0:{ }
107  ; CHECK-NEXT: 0: BEQ $x10, $x0, %bb.2
108  ; CHECK-EMPTY:
109  ; CHECK-NEXT: $x10:{ }
110  ; CHECK-NEXT: 1: $x10 = ADDI $x10, 1
111  ; CHECK-EMPTY:
112  ; CHECK-NEXT: $x10:{ 1 }
113  ; CHECK-NEXT: %stack.0:{ }
114  ; CHECK-NEXT: 2: SD $x10, %stack.0, 0 :: (store (s64))
115  ; CHECK-EMPTY:
116  ; CHECK-NEXT: $x0:{ }
117  ; CHECK-NEXT: $x0:{ }
118  ; CHECK-NEXT: 3: BEQ $x0, $x0, %bb.3
119  ; CHECK-EMPTY:
120  ; CHECK-NEXT: $x10:{ 1 }
121  ; CHECK-NEXT: 4: $x10 = ADDI $x10, 2
122  ; CHECK-EMPTY:
123  ; CHECK-NEXT: $x10:{ 4 }
124  ; CHECK-NEXT: %stack.0:{ 2 }
125  ; CHECK-NEXT: 5: SD $x10, %stack.0, 0 :: (store (s64))
126  ; CHECK-EMPTY:
127  ; CHECK-NEXT: %stack.0:{ 2 5 }
128  ; CHECK-NEXT: 6: $x10 = LD %stack.0, 0 :: (load (s64))
129  ; CHECK-EMPTY:
130  ; CHECK-NEXT: implicit $x10:{ 6 }
131  ; CHECK-NEXT: 7: PseudoRET implicit $x10
132
133  bb.0.entry:
134    liveins: $x10
135    BEQ $x10, $x0, %bb.2
136
137  bb.1:
138    liveins: $x10
139    $x10 = ADDI $x10, 1
140    SD $x10, %stack.0, 0 :: (store (s64))
141    BEQ $x0, $x0, %bb.3
142
143  bb.2:
144    liveins: $x10
145    $x10 = ADDI $x10, 2
146    SD $x10, %stack.0, 0 :: (store (s64))
147
148  bb.3:
149    $x10 = LD %stack.0, 0 :: (load (s64))
150    PseudoRET implicit $x10
151...
152