1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck -check-prefix=FAST %s
3# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck -check-prefix=GREEDY %s
4---
5name: uadde_s32_sss
6legalized: true
7
8body: |
9  bb.0:
10    liveins: $sgpr0, $sgpr1, $sgpr2
11    ; FAST-LABEL: name: uadde_s32_sss
12    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
13    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
14    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
15    ; FAST: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
16    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY2]](s32), [[C]]
17    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
18    ; FAST: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
19    ; FAST: [[UADDE:%[0-9]+]]:sgpr(s32), [[UADDE1:%[0-9]+]]:sgpr(s32) = G_UADDE [[COPY]], [[COPY1]], [[ZEXT]]
20    ; FAST: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[UADDE1]](s32)
21    ; GREEDY-LABEL: name: uadde_s32_sss
22    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
23    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
24    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
25    ; GREEDY: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
26    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY2]](s32), [[C]]
27    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
28    ; GREEDY: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
29    ; GREEDY: [[UADDE:%[0-9]+]]:sgpr(s32), [[UADDE1:%[0-9]+]]:sgpr(s32) = G_UADDE [[COPY]], [[COPY1]], [[ZEXT]]
30    ; GREEDY: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[UADDE1]](s32)
31    %0:_(s32) = COPY $sgpr0
32    %1:_(s32) = COPY $sgpr1
33    %2:_(s32) = COPY $sgpr2
34    %3:_(s32) = G_CONSTANT i32 0
35    %4:_(s1) = G_ICMP intpred(eq), %2, %3
36    %5:_(s32), %6:_(s1) = G_UADDE %0, %1, %4
37...
38
39---
40name: uadde_s32_vss
41legalized: true
42
43body: |
44  bb.0:
45    liveins: $vgpr0, $sgpr0, $sgpr1
46    ; FAST-LABEL: name: uadde_s32_vss
47    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
48    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
49    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
50    ; FAST: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
51    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY2]](s32), [[C]]
52    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
53    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
54    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
55    ; FAST: [[UADDE:%[0-9]+]]:vgpr(s32), [[UADDE1:%[0-9]+]]:vcc(s1) = G_UADDE [[COPY]], [[COPY3]], [[COPY4]]
56    ; GREEDY-LABEL: name: uadde_s32_vss
57    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
58    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
59    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
60    ; GREEDY: [[C:%[0-9]+]]:sgpr(s32) = G_CONSTANT i32 0
61    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY2]](s32), [[C]]
62    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
63    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
64    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
65    ; GREEDY: [[UADDE:%[0-9]+]]:vgpr(s32), [[UADDE1:%[0-9]+]]:vcc(s1) = G_UADDE [[COPY]], [[COPY3]], [[COPY4]]
66    %0:_(s32) = COPY $vgpr0
67    %1:_(s32) = COPY $sgpr0
68    %2:_(s32) = COPY $sgpr1
69    %3:_(s32) = G_CONSTANT i32 0
70    %4:_(s1) = G_ICMP intpred(eq), %2, %3
71    %5:_(s32), %6:_(s1) = G_UADDE %0, %1, %4
72...
73---
74name: uadde_s32_ssv
75legalized: true
76
77body: |
78  bb.0:
79    liveins: $sgpr0, $sgpr1, $vgpr0
80    ; FAST-LABEL: name: uadde_s32_ssv
81    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
82    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
83    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
84    ; FAST: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY2]](s32)
85    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
86    ; FAST: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
87    ; FAST: [[COPY5:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
88    ; FAST: [[UADDE:%[0-9]+]]:vgpr(s32), [[UADDE1:%[0-9]+]]:vcc(s1) = G_UADDE [[COPY3]], [[COPY4]], [[COPY5]]
89    ; GREEDY-LABEL: name: uadde_s32_ssv
90    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
91    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
92    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
93    ; GREEDY: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY2]](s32)
94    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
95    ; GREEDY: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
96    ; GREEDY: [[COPY5:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
97    ; GREEDY: [[UADDE:%[0-9]+]]:vgpr(s32), [[UADDE1:%[0-9]+]]:vcc(s1) = G_UADDE [[COPY3]], [[COPY4]], [[COPY5]]
98    %0:_(s32) = COPY $sgpr0
99    %1:_(s32) = COPY $sgpr1
100    %2:_(s32) = COPY $vgpr0
101    %3:_(s1) = G_TRUNC %2
102    %4:_(s32), %5:_(s1) = G_UADDE %0, %1, %3
103...
104
105---
106name: uadde_s32_vvs
107legalized: true
108
109body: |
110  bb.0:
111    liveins: $vgpr0, $vgpr1, $sgpr0
112    ; FAST-LABEL: name: uadde_s32_vvs
113    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
114    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
115    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
116    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY2]](s32)
117    ; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
118    ; FAST: [[UADDE:%[0-9]+]]:vgpr(s32), [[UADDE1:%[0-9]+]]:vcc(s1) = G_UADDE [[COPY]], [[COPY1]], [[COPY3]]
119    ; GREEDY-LABEL: name: uadde_s32_vvs
120    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
121    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
122    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
123    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY2]](s32)
124    ; GREEDY: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
125    ; GREEDY: [[UADDE:%[0-9]+]]:vgpr(s32), [[UADDE1:%[0-9]+]]:vcc(s1) = G_UADDE [[COPY]], [[COPY1]], [[COPY3]]
126    %0:_(s32) = COPY $vgpr0
127    %1:_(s32) = COPY $vgpr1
128    %2:_(s32) = COPY $sgpr0
129    %3:_(s1) = G_TRUNC %2
130    %4:_(s32), %5:_(s1) = G_UADDE %0, %1, %3
131...
132
133---
134name: uadde_s32_sss_noscc
135legalized: true
136
137body: |
138  bb.0:
139    liveins: $sgpr0, $sgpr1, $sgpr2
140    ; FAST-LABEL: name: uadde_s32_sss_noscc
141    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
142    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
143    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
144    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY2]](s32)
145    ; FAST: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
146    ; FAST: [[UADDE:%[0-9]+]]:sgpr(s32), [[UADDE1:%[0-9]+]]:sgpr(s32) = G_UADDE [[COPY]], [[COPY1]], [[ZEXT]]
147    ; FAST: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[UADDE1]](s32)
148    ; GREEDY-LABEL: name: uadde_s32_sss_noscc
149    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
150    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
151    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
152    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY2]](s32)
153    ; GREEDY: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
154    ; GREEDY: [[UADDE:%[0-9]+]]:sgpr(s32), [[UADDE1:%[0-9]+]]:sgpr(s32) = G_UADDE [[COPY]], [[COPY1]], [[ZEXT]]
155    ; GREEDY: [[TRUNC1:%[0-9]+]]:sgpr(s1) = G_TRUNC [[UADDE1]](s32)
156    %0:_(s32) = COPY $sgpr0
157    %1:_(s32) = COPY $sgpr1
158    %2:_(s32) = COPY $sgpr2
159    %3:_(s1) = G_TRUNC %2
160    %4:_(s32), %5:_(s1) = G_UADDE %0, %1, %3
161...
162