Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / remove-short-exec-branches-special-instructions.mir
blobfe4aa6a9aea68cba4da7b60f659153fdb95216e7
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=si-pre-emit-peephole -amdgpu-skip-threshold=10 -verify-machineinstrs  %s -o - | FileCheck %s
3 # Make sure mandatory skips are not removed around mode defs.
4 # FIXME: -amdgpu-skip-threshold seems to be backwards.
6 ---
8 name: need_skip_setreg_imm32_b32
9 body: |
10   ; CHECK-LABEL: name: need_skip_setreg_imm32_b32
11   ; CHECK: bb.0:
12   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
13   ; CHECK-NEXT: {{  $}}
14   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
15   ; CHECK-NEXT: {{  $}}
16   ; CHECK-NEXT: bb.1:
17   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
18   ; CHECK-NEXT: {{  $}}
19   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
20   ; CHECK-NEXT:   S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode
21   ; CHECK-NEXT: {{  $}}
22   ; CHECK-NEXT: bb.2:
23   ; CHECK-NEXT:   S_ENDPGM 0
24   bb.0:
25     successors: %bb.1, %bb.2
26     S_CBRANCH_EXECZ %bb.2, implicit $exec
28   bb.1:
29     successors: %bb.2
30     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
31     S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode
33   bb.2:
34     S_ENDPGM 0
35 ...
37 ---
39 name: need_skip_setreg_b32
40 body: |
41   ; CHECK-LABEL: name: need_skip_setreg_b32
42   ; CHECK: bb.0:
43   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
44   ; CHECK-NEXT:   liveins: $sgpr0
45   ; CHECK-NEXT: {{  $}}
46   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
47   ; CHECK-NEXT: {{  $}}
48   ; CHECK-NEXT: bb.1:
49   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
50   ; CHECK-NEXT:   liveins: $sgpr0
51   ; CHECK-NEXT: {{  $}}
52   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
53   ; CHECK-NEXT:   S_SETREG_B32 $sgpr0, 3, implicit-def $mode, implicit $mode
54   ; CHECK-NEXT: {{  $}}
55   ; CHECK-NEXT: bb.2:
56   ; CHECK-NEXT:   S_ENDPGM 0
57   bb.0:
58     liveins: $sgpr0
59     successors: %bb.1, %bb.2
60     S_CBRANCH_EXECZ %bb.2, implicit $exec
62   bb.1:
63     liveins: $sgpr0
64     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
65     S_SETREG_B32 $sgpr0, 3, implicit-def $mode, implicit $mode
67   bb.2:
68     S_ENDPGM 0
69 ...
71 ---
73 name: need_skip_denorm_mode
74 body: |
75   ; CHECK-LABEL: name: need_skip_denorm_mode
76   ; CHECK: bb.0:
77   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
78   ; CHECK-NEXT: {{  $}}
79   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
80   ; CHECK-NEXT: {{  $}}
81   ; CHECK-NEXT: bb.1:
82   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
83   ; CHECK-NEXT: {{  $}}
84   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
85   ; CHECK-NEXT:   S_DENORM_MODE 3, implicit-def $mode, implicit $mode
86   ; CHECK-NEXT: {{  $}}
87   ; CHECK-NEXT: bb.2:
88   ; CHECK-NEXT:   S_ENDPGM 0
89   bb.0:
90     successors: %bb.1, %bb.2
91     S_CBRANCH_EXECZ %bb.2, implicit $exec
93   bb.1:
94     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
95     S_DENORM_MODE 3, implicit-def $mode, implicit $mode
97   bb.2:
98     S_ENDPGM 0
99 ...
103 name: need_skip_round_mode
104 body: |
105   ; CHECK-LABEL: name: need_skip_round_mode
106   ; CHECK: bb.0:
107   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
108   ; CHECK-NEXT: {{  $}}
109   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
110   ; CHECK-NEXT: {{  $}}
111   ; CHECK-NEXT: bb.1:
112   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
113   ; CHECK-NEXT: {{  $}}
114   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
115   ; CHECK-NEXT:   S_ROUND_MODE 3, implicit-def $mode, implicit $mode
116   ; CHECK-NEXT: {{  $}}
117   ; CHECK-NEXT: bb.2:
118   ; CHECK-NEXT:   S_ENDPGM 0
119   bb.0:
120     successors: %bb.1, %bb.2
121     S_CBRANCH_EXECZ %bb.2, implicit $exec
123   bb.1:
124     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
125     S_ROUND_MODE 3, implicit-def $mode, implicit $mode
127   bb.2:
128     S_ENDPGM 0
133 name: need_skip_writelane_b32
134 body: |
135   ; CHECK-LABEL: name: need_skip_writelane_b32
136   ; CHECK: bb.0:
137   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
138   ; CHECK-NEXT: {{  $}}
139   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
140   ; CHECK-NEXT: {{  $}}
141   ; CHECK-NEXT: bb.1:
142   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
143   ; CHECK-NEXT: {{  $}}
144   ; CHECK-NEXT:   $sgpr0 = IMPLICIT_DEF
145   ; CHECK-NEXT:   $vgpr0 = V_WRITELANE_B32 $sgpr0, 0, $vgpr0
146   ; CHECK-NEXT: {{  $}}
147   ; CHECK-NEXT: bb.2:
148   ; CHECK-NEXT:   S_ENDPGM 0
149   bb.0:
150     successors: %bb.1, %bb.2
151     S_CBRANCH_EXECZ %bb.2, implicit $exec
153   bb.1:
154     successors: %bb.2
155     $sgpr0 = IMPLICIT_DEF
156     $vgpr0 = V_WRITELANE_B32 $sgpr0, 0, $vgpr0
158   bb.2:
159     S_ENDPGM 0
163 name: need_skip_readlane_b32
164 body: |
165   ; CHECK-LABEL: name: need_skip_readlane_b32
166   ; CHECK: bb.0:
167   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
168   ; CHECK-NEXT: {{  $}}
169   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
170   ; CHECK-NEXT: {{  $}}
171   ; CHECK-NEXT: bb.1:
172   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
173   ; CHECK-NEXT: {{  $}}
174   ; CHECK-NEXT:   $vgpr0 = IMPLICIT_DEF
175   ; CHECK-NEXT:   $sgpr0 = V_READLANE_B32 $vgpr0, 0
176   ; CHECK-NEXT: {{  $}}
177   ; CHECK-NEXT: bb.2:
178   ; CHECK-NEXT:   S_ENDPGM 0
179   bb.0:
180     successors: %bb.1, %bb.2
181     S_CBRANCH_EXECZ %bb.2, implicit $exec
183   bb.1:
184     successors: %bb.2
185     $vgpr0 = IMPLICIT_DEF
186     $sgpr0 = V_READLANE_B32 $vgpr0, 0
188   bb.2:
189     S_ENDPGM 0