Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / regbankselect-brcond.mir
blobbca0fdc6a14675dc1fcdc912d0aa6ce61bf83de5
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=amdgpu-regbankselect %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck %s
3 # RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=amdgpu-regbankselect %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck %s
5 ---
6 name: brcond_vcc_cond
7 legalized: true
8 body:             |
9   ; CHECK-LABEL: name: brcond_vcc_cond
10   ; CHECK: bb.0.entry:
11   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
12   ; CHECK-NEXT:   liveins: $vgpr0, $vgpr1
13   ; CHECK-NEXT: {{  $}}
14   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
15   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
16   ; CHECK-NEXT:   [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
17   ; CHECK-NEXT:   G_BRCOND [[ICMP]](s1), %bb.1
18   ; CHECK-NEXT: {{  $}}
19   ; CHECK-NEXT: bb.1:
20   bb.0.entry:
21     successors: %bb.1
22     liveins: $vgpr0, $vgpr1
23     %0:_(s32) = COPY $vgpr0
24     %1:_(s32) = COPY $vgpr1
25     %2:_(s1) = G_ICMP intpred(ne), %0, %1
26     G_BRCOND %2, %bb.1
28   bb.1:
29 ...
31 ---
32 name: brcond_scc_cond
33 legalized: true
34 body:             |
35   ; CHECK-LABEL: name: brcond_scc_cond
36   ; CHECK: bb.0.entry:
37   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
38   ; CHECK-NEXT:   liveins: $sgpr0, $sgpr1
39   ; CHECK-NEXT: {{  $}}
40   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
41   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
42   ; CHECK-NEXT:   [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
43   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
44   ; CHECK-NEXT:   [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
45   ; CHECK-NEXT:   G_BRCOND [[ZEXT]](s32), %bb.1
46   ; CHECK-NEXT: {{  $}}
47   ; CHECK-NEXT: bb.1:
48   bb.0.entry:
49     successors: %bb.1
50     liveins: $sgpr0, $sgpr1
51     %0:_(s32) = COPY $sgpr0
52     %1:_(s32) = COPY $sgpr1
53     %2:_(s1) = G_ICMP intpred(ne), %0, %1
54     G_BRCOND %2, %bb.1
56   bb.1:
57 ...
59 ---
60 name: brcond_sgpr_cond
61 legalized: true
62 body:             |
63   ; CHECK-LABEL: name: brcond_sgpr_cond
64   ; CHECK: bb.0.entry:
65   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
66   ; CHECK-NEXT:   liveins: $sgpr0
67   ; CHECK-NEXT: {{  $}}
68   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
69   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
70   ; CHECK-NEXT:   [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
71   ; CHECK-NEXT:   G_BRCOND [[ZEXT]](s32), %bb.1
72   ; CHECK-NEXT: {{  $}}
73   ; CHECK-NEXT: bb.1:
74   bb.0.entry:
75     successors: %bb.1
76     liveins: $sgpr0
77     %0:_(s32) = COPY $sgpr0
78     %1:_(s1) = G_TRUNC %0
79     G_BRCOND %1, %bb.1
81   bb.1:
82 ...
84 ---
85 name: brcond_vgpr_cond
86 legalized: true
87 body:             |
88   ; CHECK-LABEL: name: brcond_vgpr_cond
89   ; CHECK: bb.0.entry:
90   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
91   ; CHECK-NEXT:   liveins: $vgpr0
92   ; CHECK-NEXT: {{  $}}
93   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
94   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
95   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
96   ; CHECK-NEXT:   G_BRCOND [[COPY1]](s1), %bb.1
97   ; CHECK-NEXT: {{  $}}
98   ; CHECK-NEXT: bb.1:
99   bb.0.entry:
100     successors: %bb.1
101     liveins: $vgpr0
102     %0:_(s32) = COPY $vgpr0
103     %1:_(s1) = G_TRUNC %0
104     G_BRCOND %1, %bb.1
106   bb.1:
110 # The terminator that needs handling is the only instruction in the
111 # block.
114 name: empty_block_vgpr_brcond
115 legalized: true
116 body:             |
117   ; CHECK-LABEL: name: empty_block_vgpr_brcond
118   ; CHECK: bb.0.entry:
119   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
120   ; CHECK-NEXT:   liveins: $vgpr0
121   ; CHECK-NEXT: {{  $}}
122   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
123   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
124   ; CHECK-NEXT: {{  $}}
125   ; CHECK-NEXT: bb.1:
126   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
127   ; CHECK-NEXT: {{  $}}
128   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
129   ; CHECK-NEXT:   G_BRCOND [[COPY1]](s1), %bb.1
130   ; CHECK-NEXT: {{  $}}
131   ; CHECK-NEXT: bb.2:
132   bb.0.entry:
133     successors: %bb.1
134     liveins: $vgpr0
135     %0:_(s32) = COPY $vgpr0
136     %1:_(s1) = G_TRUNC %0
138   bb.1:
139     G_BRCOND %1, %bb.1
141   bb.2:
145 # Make sure the first instruction in the block isn't skipped.
147 name: copy_first_inst_brcond
148 legalized: true
149 body:             |
150   ; CHECK-LABEL: name: copy_first_inst_brcond
151   ; CHECK: bb.0.entry:
152   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
153   ; CHECK-NEXT:   liveins: $vgpr0
154   ; CHECK-NEXT: {{  $}}
155   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
156   ; CHECK-NEXT: {{  $}}
157   ; CHECK-NEXT: bb.1:
158   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
159   ; CHECK-NEXT: {{  $}}
160   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
161   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
162   ; CHECK-NEXT:   G_BRCOND [[COPY1]](s1), %bb.1
163   ; CHECK-NEXT: {{  $}}
164   ; CHECK-NEXT: bb.2:
165   bb.0.entry:
166     successors: %bb.1
167     liveins: $vgpr0
168     %0:_(s32) = COPY $vgpr0
170   bb.1:
171     %1:_(s1) = G_TRUNC %0
172     G_BRCOND %1, %bb.1
174   bb.2:
177 # Extra instruction separates brcond from the condition def
179 name: copy_middle_inst_brcond
180 legalized: true
181 body:             |
182   ; CHECK-LABEL: name: copy_middle_inst_brcond
183   ; CHECK: bb.0.entry:
184   ; CHECK-NEXT:   successors: %bb.1(0x80000000)
185   ; CHECK-NEXT:   liveins: $vgpr0
186   ; CHECK-NEXT: {{  $}}
187   ; CHECK-NEXT:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
188   ; CHECK-NEXT: {{  $}}
189   ; CHECK-NEXT: bb.1:
190   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
191   ; CHECK-NEXT: {{  $}}
192   ; CHECK-NEXT:   [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
193   ; CHECK-NEXT:   S_NOP 0
194   ; CHECK-NEXT:   [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
195   ; CHECK-NEXT:   G_BRCOND [[COPY1]](s1), %bb.1
196   ; CHECK-NEXT: {{  $}}
197   ; CHECK-NEXT: bb.2:
198   bb.0.entry:
199     successors: %bb.1
200     liveins: $vgpr0
201     %0:_(s32) = COPY $vgpr0
203   bb.1:
204     %1:_(s1) = G_TRUNC %0
205     S_NOP 0
206     G_BRCOND %1, %bb.1
208   bb.2: