Use Align for TFL::TransientStackAlignment
[llvm-core.git] / test / CodeGen / AMDGPU / macro-fusion-cluster-vcc-uses.mir
blob42b5f1957302f85ee26c9a0ddfb9e88817f6af63
1 # RUN: llc -march=amdgcn -mcpu=tahiti -verify-machineinstrs -run-pass machine-scheduler -o - %s | FileCheck -check-prefix=GCN %s
3 # GCN-LABEL: name: cluster_add_addc
4 # GCN: S_NOP 0, implicit-def $vcc
5 # GCN: dead %2:vgpr_32, %3:sreg_64_xexec = V_ADD_I32_e64 %0, %1, 0, implicit $exec
6 # GCN: dead %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %6, %7, %3, 0, implicit $exec
7 name: cluster_add_addc
8 registers:
9   - { id: 0, class: vgpr_32 }
10   - { id: 1, class: vgpr_32 }
11   - { id: 2, class: vgpr_32 }
12   - { id: 3, class: sreg_64_xexec }
13   - { id: 4, class: vgpr_32 }
14   - { id: 5, class: sreg_64_xexec }
15   - { id: 6, class: vgpr_32 }
16   - { id: 7, class: vgpr_32 }
18 body: |
19   bb.0:
20     %0 = V_MOV_B32_e32 0, implicit $exec
21     %1 = V_MOV_B32_e32 0, implicit $exec
22     %2, %3 = V_ADD_I32_e64 %0, %1, 0, implicit $exec
23     %6 = V_MOV_B32_e32 0, implicit $exec
24     %7 = V_MOV_B32_e32 0, implicit $exec
25     S_NOP 0, implicit def $vcc
26     %4, %5 = V_ADDC_U32_e64 %6, %7, %3, 0, implicit $exec
27 ...
29 # GCN-LABEL: name: interleave_add64s
30 # GCN: dead %8:vgpr_32, %9:sreg_64_xexec = V_ADD_I32_e64 %0, %1, 0, implicit $exec
31 # GCN-NEXT: dead %12:vgpr_32, dead %13:sreg_64_xexec = V_ADDC_U32_e64 %4, %5, %9, 0, implicit $exec
32 # GCN-NEXT: dead %10:vgpr_32, %11:sreg_64_xexec = V_ADD_I32_e64 %2, %3, 0, implicit $exec
33 # GCN-NEXT: dead %14:vgpr_32, dead %15:sreg_64_xexec = V_ADDC_U32_e64 %6, %7, %11, 0, implicit $exec
34 name: interleave_add64s
35 registers:
36   - { id: 0, class: vgpr_32 }
37   - { id: 1, class: vgpr_32 }
38   - { id: 2, class: vgpr_32 }
39   - { id: 3, class: vgpr_32 }
40   - { id: 4, class: vgpr_32 }
41   - { id: 5, class: vgpr_32 }
42   - { id: 6, class: vgpr_32 }
43   - { id: 7, class: vgpr_32 }
44   - { id: 8, class: vgpr_32 }
45   - { id: 9, class: sreg_64_xexec }
46   - { id: 10, class: vgpr_32 }
47   - { id: 11, class: sreg_64_xexec }
48   - { id: 12, class: vgpr_32 }
49   - { id: 13, class: sreg_64_xexec }
50   - { id: 14, class: vgpr_32 }
51   - { id: 15, class: sreg_64_xexec }
53 body: |
54   bb.0:
55     %0 = V_MOV_B32_e32 0, implicit $exec
56     %1 = V_MOV_B32_e32 0, implicit $exec
57     %2 = V_MOV_B32_e32 0, implicit $exec
58     %3 = V_MOV_B32_e32 0, implicit $exec
59     %4 = V_MOV_B32_e32 0, implicit $exec
60     %5 = V_MOV_B32_e32 0, implicit $exec
61     %6 = V_MOV_B32_e32 0, implicit $exec
62     %7 = V_MOV_B32_e32 0, implicit $exec
64     %8, %9 = V_ADD_I32_e64 %0, %1, 0, implicit $exec
65     %10, %11 = V_ADD_I32_e64 %2, %3, 0, implicit $exec
68     %12, %13 = V_ADDC_U32_e64 %4, %5, %9, 0, implicit $exec
69     %14, %15 = V_ADDC_U32_e64 %6, %7, %11, 0, implicit $exec
70 ...
72 # GCN-LABEL: name: cluster_mov_addc
73 # GCN: S_NOP 0, implicit-def $vcc
74 # GCN-NEXT: %2:sreg_64_xexec = S_MOV_B64 0
75 # GCN-NEXT: dead %3:vgpr_32, dead %4:sreg_64_xexec = V_ADDC_U32_e64 %0, %1, %2, 0, implicit $exec
76 name: cluster_mov_addc
77 registers:
78   - { id: 0, class: vgpr_32 }
79   - { id: 1, class: vgpr_32 }
80   - { id: 2, class: sreg_64_xexec }
81   - { id: 3, class: vgpr_32 }
82   - { id: 4, class: sreg_64_xexec }
83   - { id: 6, class: vgpr_32 }
84   - { id: 7, class: vgpr_32 }
86 body: |
87   bb.0:
88     %0 = V_MOV_B32_e32 0, implicit $exec
89     %1 = V_MOV_B32_e32 0, implicit $exec
90     %2 = S_MOV_B64 0
91     S_NOP 0, implicit def $vcc
92     %3, %4 = V_ADDC_U32_e64 %0, %1, %2, 0, implicit $exec
93 ...
95 # GCN-LABEL: name: no_cluster_add_addc_diff_sgpr
96 # GCN: dead %2:vgpr_32, dead %3:sreg_64_xexec = V_ADD_I32_e64 %0, %1, 0, implicit $exec
97 # GCN-NEXT: %6:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
98 # GCN-NEXT: %7:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
99 # GCN-NEXT: S_NOP 0, implicit-def $vcc
100 # GCN-NEXT: %8:sreg_64_xexec = S_MOV_B64 0
101 # GCN-NEXT: dead %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %6, %7, %8, 0, implicit $exec
102 name: no_cluster_add_addc_diff_sgpr
103 registers:
104   - { id: 0, class: vgpr_32 }
105   - { id: 1, class: vgpr_32 }
106   - { id: 2, class: vgpr_32 }
107   - { id: 3, class: sreg_64_xexec }
108   - { id: 4, class: vgpr_32 }
109   - { id: 5, class: sreg_64_xexec }
110   - { id: 6, class: vgpr_32 }
111   - { id: 7, class: vgpr_32 }
112   - { id: 8, class: sreg_64_xexec }
113 body: |
114   bb.0:
115     %0 = V_MOV_B32_e32 0, implicit $exec
116     %1 = V_MOV_B32_e32 0, implicit $exec
117     %8 = S_MOV_B64 0
118     %2, %3 = V_ADD_I32_e64 %0, %1, 0, implicit $exec
119     %6 = V_MOV_B32_e32 0, implicit $exec
120     %7 = V_MOV_B32_e32 0, implicit $exec
121     S_NOP 0, implicit def $vcc
122     %4, %5 = V_ADDC_U32_e64 %6, %7, %8, 0, implicit $exec
124 # GCN-LABEL: name: cluster_sub_subb
125 # GCN: S_NOP 0, implicit-def $vcc
126 # GCN: dead %2:vgpr_32, %3:sreg_64_xexec = V_SUB_I32_e64 %0, %1, 0, implicit $exec
127 # GCN: dead %4:vgpr_32, dead %5:sreg_64_xexec = V_SUBB_U32_e64 %6, %7, %3, 0, implicit $exec
128 name: cluster_sub_subb
129 registers:
130   - { id: 0, class: vgpr_32 }
131   - { id: 1, class: vgpr_32 }
132   - { id: 2, class: vgpr_32 }
133   - { id: 3, class: sreg_64_xexec }
134   - { id: 4, class: vgpr_32 }
135   - { id: 5, class: sreg_64_xexec }
136   - { id: 6, class: vgpr_32 }
137   - { id: 7, class: vgpr_32 }
139 body: |
140   bb.0:
141     %0 = V_MOV_B32_e32 0, implicit $exec
142     %1 = V_MOV_B32_e32 0, implicit $exec
143     %2, %3 = V_SUB_I32_e64 %0, %1, 0, implicit $exec
144     %6 = V_MOV_B32_e32 0, implicit $exec
145     %7 = V_MOV_B32_e32 0, implicit $exec
146     S_NOP 0, implicit def $vcc
147     %4, %5 = V_SUBB_U32_e64 %6, %7, %3, 0, implicit $exec
150 # GCN-LABEL: name: cluster_cmp_cndmask
151 # GCN: S_NOP 0, implicit-def $vcc
152 # GCN-NEXT: %3:sreg_64_xexec = V_CMP_EQ_I32_e64 %0, %1, implicit $exec
153 # GCN-NEXT: dead %4:vgpr_32 = V_CNDMASK_B32_e64 0, %0, 0, %1, %3, implicit $exec
154 name: cluster_cmp_cndmask
155 registers:
156   - { id: 0, class: vgpr_32 }
157   - { id: 1, class: vgpr_32 }
158   - { id: 2, class: vgpr_32 }
159   - { id: 3, class: sreg_64_xexec }
160   - { id: 4, class: vgpr_32 }
161   - { id: 5, class: sreg_64_xexec }
162   - { id: 6, class: vgpr_32 }
163   - { id: 7, class: vgpr_32 }
165 body: |
166   bb.0:
167     %0 = V_MOV_B32_e32 0, implicit $exec
168     %1 = V_MOV_B32_e32 0, implicit $exec
169     %3 = V_CMP_EQ_I32_e64 %0, %1, implicit $exec
170     S_NOP 0, implicit def $vcc
171     %4 = V_CNDMASK_B32_e64 0, %0, 0, %1, %3, implicit $exec
174 # GCN-LABEL: name: cluster_multi_use_cmp_cndmask
175 # GCN: %4:sreg_64_xexec = V_CMP_EQ_I32_e64 %0, %1, implicit $exec
176 # GCN-NEXT: dead %5:vgpr_32 = V_CNDMASK_B32_e64 0, %2, 0, %1, %4, implicit $exec
177 # GCN-NEXT: dead %6:vgpr_32 = V_CNDMASK_B32_e64 0, %1, 0, %3, %4, implicit $exec
178 name: cluster_multi_use_cmp_cndmask
179 registers:
180   - { id: 0, class: vgpr_32 }
181   - { id: 1, class: vgpr_32 }
182   - { id: 2, class: vgpr_32 }
183   - { id: 3, class: vgpr_32 }
184   - { id: 4, class: sreg_64_xexec }
185   - { id: 5, class: vgpr_32 }
186   - { id: 6, class: vgpr_32 }
187   - { id: 7, class: vgpr_32 }
189 body: |
190   bb.0:
191     %0 = V_MOV_B32_e32 0, implicit $exec
192     %1 = V_MOV_B32_e32 0, implicit $exec
193     %2 = V_MOV_B32_e32 0, implicit $exec
194     %3 = V_MOV_B32_e32 0, implicit $exec
196     %4 = V_CMP_EQ_I32_e64 %0, %1, implicit $exec
197     S_NOP 0, implicit def $vcc
198     %5 = V_CNDMASK_B32_e64 0, %2, 0, %1, %4, implicit $exec
199     %6 = V_CNDMASK_B32_e64 0, %1, 0, %3, %4, implicit $exec
202 # GCN-LABEL: name: cluster_multi_use_cmp_cndmask2
203 # GCN: %4:sreg_64_xexec = V_CMP_EQ_I32_e64 %0, %1, implicit $exec
204 # GCN-NEXT: dead %5:vgpr_32 = V_CNDMASK_B32_e64 0, %2, 0, %1, %4, implicit $exec
205 # GCN-NEXT: %3:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
206 # GCN-NEXT: dead %6:vgpr_32 = V_CNDMASK_B32_e64 0, %1, 0, %3, %4, implicit $exec
207 name: cluster_multi_use_cmp_cndmask2
208 registers:
209   - { id: 0, class: vgpr_32 }
210   - { id: 1, class: vgpr_32 }
211   - { id: 2, class: vgpr_32 }
212   - { id: 3, class: vgpr_32 }
213   - { id: 4, class: sreg_64_xexec }
214   - { id: 5, class: vgpr_32 }
215   - { id: 6, class: vgpr_32 }
216   - { id: 7, class: vgpr_32 }
218 body: |
219   bb.0:
220     %0 = V_MOV_B32_e32 0, implicit $exec
221     %1 = V_MOV_B32_e32 0, implicit $exec
222     %4 = V_CMP_EQ_I32_e64 %0, %1, implicit $exec
223     %2 = V_MOV_B32_e32 0, implicit $exec
224     %5 = V_CNDMASK_B32_e64 0, %2, 0, %1, %4, implicit $exec
225     %3 = V_MOV_B32_e32 0, implicit $exec
226     %6 = V_CNDMASK_B32_e64 0, %1, 0, %3, %4, implicit $exec