1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=si-remove-short-exec-branches -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.
5
6---
7
8name: need_skip_gpr_idx_mode
9body: |
10  ; CHECK-LABEL: name: need_skip_gpr_idx_mode
11  ; CHECK: bb.0:
12  ; CHECK:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
13  ; CHECK:   S_CBRANCH_EXECZ %bb.2, implicit $exec
14  ; CHECK: bb.1:
15  ; CHECK:   successors: %bb.2(0x80000000)
16  ; CHECK:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
17  ; CHECK:   S_SET_GPR_IDX_MODE 0, implicit-def $mode, implicit-def $m0, implicit $mode, implicit $m0
18  ; CHECK: bb.2:
19  ; CHECK:   S_ENDPGM 0
20  bb.0:
21    S_CBRANCH_EXECZ %bb.2, implicit $exec
22
23  bb.1:
24    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
25    S_SET_GPR_IDX_MODE 0, implicit-def $mode, implicit-def $m0, implicit $mode, implicit $m0
26
27  bb.2:
28    S_ENDPGM 0
29...
30
31---
32
33name: need_skip_gpr_idx_on
34body: |
35  ; CHECK-LABEL: name: need_skip_gpr_idx_on
36  ; CHECK: bb.0:
37  ; CHECK:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
38  ; CHECK:   S_CBRANCH_EXECZ %bb.2, implicit $exec
39  ; CHECK: bb.1:
40  ; CHECK:   successors: %bb.2(0x80000000)
41  ; CHECK:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
42  ; CHECK:   S_SET_GPR_IDX_ON $sgpr0, 0, implicit-def $mode, implicit-def $m0, implicit $mode, implicit $m0
43  ; CHECK: bb.2:
44  ; CHECK:   S_ENDPGM 0
45  bb.0:
46    liveins: $sgpr0
47    S_CBRANCH_EXECZ %bb.2, implicit $exec
48
49  bb.1:
50    liveins: $sgpr0
51    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
52    S_SET_GPR_IDX_ON $sgpr0, 0, implicit-def $mode, implicit-def $m0, implicit $mode, implicit $m0
53
54  bb.2:
55    S_ENDPGM 0
56...
57
58---
59
60name: need_skip_gpr_idx_off
61body: |
62  ; CHECK-LABEL: name: need_skip_gpr_idx_off
63  ; CHECK: bb.0:
64  ; CHECK:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
65  ; CHECK:   S_CBRANCH_EXECZ %bb.2, implicit $exec
66  ; CHECK: bb.1:
67  ; CHECK:   successors: %bb.2(0x80000000)
68  ; CHECK:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
69  ; CHECK:   S_SET_GPR_IDX_OFF implicit-def $mode, implicit $mode
70  ; CHECK: bb.2:
71  ; CHECK:   S_ENDPGM 0
72  bb.0:
73    S_CBRANCH_EXECZ %bb.2, implicit $exec
74
75  bb.1:
76    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
77    S_SET_GPR_IDX_OFF implicit-def $mode, implicit $mode
78
79  bb.2:
80    S_ENDPGM 0
81...
82
83---
84
85name: need_skip_gpr_idx_idx
86body: |
87  ; CHECK-LABEL: name: need_skip_gpr_idx_idx
88  ; CHECK: bb.0:
89  ; CHECK:   successors: %bb.2(0x40000000), %bb.1(0x40000000)
90  ; CHECK:   S_CBRANCH_EXECZ %bb.2, implicit $exec
91  ; CHECK: bb.1:
92  ; CHECK:   successors: %bb.2(0x80000000)
93  ; CHECK:   $vgpr0 = V_MOV_B32_e32 0, implicit $exec
94  ; CHECK:   S_SET_GPR_IDX_IDX $sgpr0, implicit-def $mode, implicit-def $m0, implicit $mode, implicit $m0
95  ; CHECK: bb.2:
96  ; CHECK:   S_ENDPGM 0
97  bb.0:
98    liveins: $sgpr0
99    S_CBRANCH_EXECZ %bb.2, implicit $exec
100
101  bb.1:
102    liveins: $sgpr0
103    $vgpr0 = V_MOV_B32_e32 0, implicit $exec
104    S_SET_GPR_IDX_IDX $sgpr0, implicit-def $mode, implicit-def $m0, implicit $mode, implicit $m0
105
106  bb.2:
107    S_ENDPGM 0
108...
109