[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / remove-short-exec-branches-special-instructions.mir
blob20de119471ba39e6f23faec6ce07ede0514b29fa
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=si-pre-emit-peephole -verify-machineinstrs  %s -o - | FileCheck %s
3 # Make sure mandatory skips are not removed around mode defs.
5 ---
7 name: need_skip_setreg_imm32_b32
8 body: |
9   ; CHECK-LABEL: name: need_skip_setreg_imm32_b32
10   ; CHECK: bb.0:
11   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
12   ; CHECK-NEXT: {{  $}}
13   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
14   ; CHECK-NEXT: {{  $}}
15   ; CHECK-NEXT: bb.1:
16   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
17   ; CHECK-NEXT: {{  $}}
18   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
19   ; CHECK-NEXT:   S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode
20   ; CHECK-NEXT: {{  $}}
21   ; CHECK-NEXT: bb.2:
22   ; CHECK-NEXT:   S_ENDPGM 0
23   bb.0:
24     successors: %bb.1, %bb.2
25     S_CBRANCH_EXECZ %bb.2, implicit $exec
27   bb.1:
28     successors: %bb.2
29     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
30     S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode
32   bb.2:
33     S_ENDPGM 0
34 ...
36 ---
38 name: need_skip_setreg_b32
39 body: |
40   ; CHECK-LABEL: name: need_skip_setreg_b32
41   ; CHECK: bb.0:
42   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
43   ; CHECK-NEXT:   liveins: $sgpr0
44   ; CHECK-NEXT: {{  $}}
45   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
46   ; CHECK-NEXT: {{  $}}
47   ; CHECK-NEXT: bb.1:
48   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
49   ; CHECK-NEXT:   liveins: $sgpr0
50   ; CHECK-NEXT: {{  $}}
51   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
52   ; CHECK-NEXT:   S_SETREG_B32 $sgpr0, 3, implicit-def $mode, implicit $mode
53   ; CHECK-NEXT: {{  $}}
54   ; CHECK-NEXT: bb.2:
55   ; CHECK-NEXT:   S_ENDPGM 0
56   bb.0:
57     liveins: $sgpr0
58     successors: %bb.1, %bb.2
59     S_CBRANCH_EXECZ %bb.2, implicit $exec
61   bb.1:
62     liveins: $sgpr0
63     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
64     S_SETREG_B32 $sgpr0, 3, implicit-def $mode, implicit $mode
66   bb.2:
67     S_ENDPGM 0
68 ...
70 ---
72 name: need_skip_denorm_mode
73 body: |
74   ; CHECK-LABEL: name: need_skip_denorm_mode
75   ; CHECK: bb.0:
76   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
77   ; CHECK-NEXT: {{  $}}
78   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
79   ; CHECK-NEXT: {{  $}}
80   ; CHECK-NEXT: bb.1:
81   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
82   ; CHECK-NEXT: {{  $}}
83   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
84   ; CHECK-NEXT:   S_DENORM_MODE 3, implicit-def $mode, implicit $mode
85   ; CHECK-NEXT: {{  $}}
86   ; CHECK-NEXT: bb.2:
87   ; CHECK-NEXT:   S_ENDPGM 0
88   bb.0:
89     successors: %bb.1, %bb.2
90     S_CBRANCH_EXECZ %bb.2, implicit $exec
92   bb.1:
93     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
94     S_DENORM_MODE 3, implicit-def $mode, implicit $mode
96   bb.2:
97     S_ENDPGM 0
98 ...
102 name: need_skip_round_mode
103 body: |
104   ; CHECK-LABEL: name: need_skip_round_mode
105   ; CHECK: bb.0:
106   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
107   ; CHECK-NEXT: {{  $}}
108   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
109   ; CHECK-NEXT: {{  $}}
110   ; CHECK-NEXT: bb.1:
111   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
112   ; CHECK-NEXT: {{  $}}
113   ; CHECK-NEXT:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
114   ; CHECK-NEXT:   S_ROUND_MODE 3, implicit-def $mode, implicit $mode
115   ; CHECK-NEXT: {{  $}}
116   ; CHECK-NEXT: bb.2:
117   ; CHECK-NEXT:   S_ENDPGM 0
118   bb.0:
119     successors: %bb.1, %bb.2
120     S_CBRANCH_EXECZ %bb.2, implicit $exec
122   bb.1:
123     $vgpr0 = V_MOV_B32_e32 0, implicit $exec
124     S_ROUND_MODE 3, implicit-def $mode, implicit $mode
126   bb.2:
127     S_ENDPGM 0
132 name: need_skip_writelane_b32
133 body: |
134   ; CHECK-LABEL: name: need_skip_writelane_b32
135   ; CHECK: bb.0:
136   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
137   ; CHECK-NEXT: {{  $}}
138   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
139   ; CHECK-NEXT: {{  $}}
140   ; CHECK-NEXT: bb.1:
141   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
142   ; CHECK-NEXT: {{  $}}
143   ; CHECK-NEXT:   $sgpr0 = IMPLICIT_DEF
144   ; CHECK-NEXT:   $vgpr0 = V_WRITELANE_B32 $sgpr0, 0, $vgpr0
145   ; CHECK-NEXT: {{  $}}
146   ; CHECK-NEXT: bb.2:
147   ; CHECK-NEXT:   S_ENDPGM 0
148   bb.0:
149     successors: %bb.1, %bb.2
150     S_CBRANCH_EXECZ %bb.2, implicit $exec
152   bb.1:
153     successors: %bb.2
154     $sgpr0 = IMPLICIT_DEF
155     $vgpr0 = V_WRITELANE_B32 $sgpr0, 0, $vgpr0
157   bb.2:
158     S_ENDPGM 0
162 name: need_skip_readlane_b32
163 body: |
164   ; CHECK-LABEL: name: need_skip_readlane_b32
165   ; CHECK: bb.0:
166   ; CHECK-NEXT:   successors: %bb.1(0x40000000), %bb.2(0x40000000)
167   ; CHECK-NEXT: {{  $}}
168   ; CHECK-NEXT:   S_CBRANCH_EXECZ %bb.2, implicit $exec
169   ; CHECK-NEXT: {{  $}}
170   ; CHECK-NEXT: bb.1:
171   ; CHECK-NEXT:   successors: %bb.2(0x80000000)
172   ; CHECK-NEXT: {{  $}}
173   ; CHECK-NEXT:   $vgpr0 = IMPLICIT_DEF
174   ; CHECK-NEXT:   $sgpr0 = V_READLANE_B32 $vgpr0, 0
175   ; CHECK-NEXT: {{  $}}
176   ; CHECK-NEXT: bb.2:
177   ; CHECK-NEXT:   S_ENDPGM 0
178   bb.0:
179     successors: %bb.1, %bb.2
180     S_CBRANCH_EXECZ %bb.2, implicit $exec
182   bb.1:
183     successors: %bb.2
184     $vgpr0 = IMPLICIT_DEF
185     $sgpr0 = V_READLANE_B32 $vgpr0, 0
187   bb.2:
188     S_ENDPGM 0