[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AMDGPU / GlobalISel / regbankselect-brcond.mir
blob8b2ef915cd20ee973c447b8078150db7ce86ac62
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 %s
3 # RUN: llc -march=amdgcn -mcpu=fiji -run-pass=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:   successors: %bb.1(0x80000000)
12   ; CHECK:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
13   ; CHECK:   [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
14   ; CHECK:   [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
15   ; CHECK:   G_BRCOND [[ICMP]](s1), %bb.1
16   ; CHECK: bb.1:
17   bb.0.entry:
18     successors: %bb.1
19     liveins: $vgpr0, $vgpr1
20     %0:_(s32) = COPY $vgpr0
21     %1:_(s32) = COPY $vgpr1
22     %2:_(s1) = G_ICMP intpred(ne), %0, %1
23     G_BRCOND %2, %bb.1
25   bb.1:
26 ...
28 ---
29 name: brcond_scc_cond
30 legalized: true
31 body:             |
32   ; CHECK-LABEL: name: brcond_scc_cond
33   ; CHECK: bb.0.entry:
34   ; CHECK:   successors: %bb.1(0x80000000)
35   ; CHECK:   [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
36   ; CHECK:   [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
37   ; CHECK:   [[ICMP:%[0-9]+]]:scc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
38   ; CHECK:   G_BRCOND [[ICMP]](s1), %bb.1
39   ; CHECK: bb.1:
40   bb.0.entry:
41     successors: %bb.1
42     liveins: $sgpr0, $sgpr1
43     %0:_(s32) = COPY $sgpr0
44     %1:_(s32) = COPY $sgpr1
45     %2:_(s1) = G_ICMP intpred(ne), %0, %1
46     G_BRCOND %2, %bb.1
48   bb.1:
49 ...
51 ---
52 name: brcond_sgpr_cond
53 legalized: true
54 body:             |
55   ; CHECK-LABEL: name: brcond_sgpr_cond
56   ; CHECK: bb.0.entry:
57   ; CHECK:   successors: %bb.1(0x80000000)
58   ; CHECK:   [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
59   ; CHECK:   [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
60   ; CHECK:   [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
61   ; CHECK:   G_BRCOND [[COPY1]](s1), %bb.1
62   ; CHECK: bb.1:
63   bb.0.entry:
64     successors: %bb.1
65     liveins: $sgpr0
66     %0:_(s32) = COPY $sgpr0
67     %1:_(s1) = G_TRUNC %0
68     G_BRCOND %1, %bb.1
70   bb.1:
71 ...
73 ---
74 name: brcond_vgpr_cond
75 legalized: true
76 body:             |
77   ; CHECK-LABEL: name: brcond_vgpr_cond
78   ; CHECK: bb.0.entry:
79   ; CHECK:   successors: %bb.1(0x80000000)
80   ; CHECK:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
81   ; CHECK:   [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
82   ; CHECK:   [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
83   ; CHECK:   G_BRCOND [[COPY1]](s1), %bb.1
84   ; CHECK: bb.1:
85   bb.0.entry:
86     successors: %bb.1
87     liveins: $vgpr0
88     %0:_(s32) = COPY $vgpr0
89     %1:_(s1) = G_TRUNC %0
90     G_BRCOND %1, %bb.1
92   bb.1:
93 ...
96 # The terminator that needs handling is the only instruction in the
97 # block.
99 ---
100 name: empty_block_vgpr_brcond
101 legalized: true
102 body:             |
103   ; CHECK-LABEL: name: empty_block_vgpr_brcond
104   ; CHECK: bb.0.entry:
105   ; CHECK:   successors: %bb.1(0x80000000)
106   ; CHECK:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
107   ; CHECK:   [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
108   ; CHECK: bb.1:
109   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
110   ; CHECK:   [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
111   ; CHECK:   G_BRCOND [[COPY1]](s1), %bb.1
112   ; CHECK: bb.2:
113   bb.0.entry:
114     successors: %bb.1
115     liveins: $vgpr0
116     %0:_(s32) = COPY $vgpr0
117     %1:_(s1) = G_TRUNC %0
119   bb.1:
120     G_BRCOND %1, %bb.1
122   bb.2:
126 # Make sure the first instruction in the block isn't skipped.
128 name: copy_first_inst_brcond
129 legalized: true
130 body:             |
131   ; CHECK-LABEL: name: copy_first_inst_brcond
132   ; CHECK: bb.0.entry:
133   ; CHECK:   successors: %bb.1(0x80000000)
134   ; CHECK:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
135   ; CHECK: bb.1:
136   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
137   ; CHECK:   [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
138   ; CHECK:   [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
139   ; CHECK:   G_BRCOND [[COPY1]](s1), %bb.1
140   ; CHECK: bb.2:
141   bb.0.entry:
142     successors: %bb.1
143     liveins: $vgpr0
144     %0:_(s32) = COPY $vgpr0
146   bb.1:
147     %1:_(s1) = G_TRUNC %0
148     G_BRCOND %1, %bb.1
150   bb.2:
153 # Extra instruction separates brcond from the condition def
155 name: copy_middle_inst_brcond
156 legalized: true
157 body:             |
158   ; CHECK-LABEL: name: copy_middle_inst_brcond
159   ; CHECK: bb.0.entry:
160   ; CHECK:   successors: %bb.1(0x80000000)
161   ; CHECK:   [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
162   ; CHECK: bb.1:
163   ; CHECK:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
164   ; CHECK:   [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
165   ; CHECK:   S_NOP 0
166   ; CHECK:   [[COPY1:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
167   ; CHECK:   G_BRCOND [[COPY1]](s1), %bb.1
168   ; CHECK: bb.2:
169   bb.0.entry:
170     successors: %bb.1
171     liveins: $vgpr0
172     %0:_(s32) = COPY $vgpr0
174   bb.1:
175     %1:_(s1) = G_TRUNC %0
176     S_NOP 0
177     G_BRCOND %1, %bb.1
179   bb.2: