1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -run-pass=si-pre-emit-peephole -o - %s | FileCheck %s 3 4--- 5name: skip_branch_taildup_endpgm 6machineFunctionInfo: 7 isEntryFunction: true 8body: | 9 ; CHECK-LABEL: name: skip_branch_taildup_endpgm 10 ; CHECK: bb.0: 11 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.1(0x40000000) 12 ; CHECK-NEXT: liveins: $vgpr0, $sgpr4_sgpr5, $sgpr7 13 ; CHECK-NEXT: {{ $}} 14 ; CHECK-NEXT: renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM renamable $sgpr4_sgpr5, 4, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4) 15 ; CHECK-NEXT: renamable $vgpr0 = V_LSHLREV_B32_e32 2, killed $vgpr0, implicit $exec 16 ; CHECK-NEXT: S_WAITCNT 127 17 ; CHECK-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $exec 18 ; CHECK-NEXT: renamable $vgpr0 = V_ADD_CO_U32_e32 $sgpr0, killed $vgpr0, implicit-def $vcc, implicit $exec 19 ; CHECK-NEXT: renamable $vgpr1 = V_ADDC_U32_e32 0, killed $vgpr1, implicit-def $vcc, implicit killed $vcc, implicit $exec 20 ; CHECK-NEXT: renamable $vgpr0 = FLAT_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 1) 21 ; CHECK-NEXT: renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed renamable $sgpr4_sgpr5, 0, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4) 22 ; CHECK-NEXT: S_WAITCNT 112 23 ; CHECK-NEXT: V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec 24 ; CHECK-NEXT: $sgpr2_sgpr3 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec 25 ; CHECK-NEXT: renamable $sgpr2_sgpr3 = S_XOR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def dead $scc 26 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 27 ; CHECK-NEXT: S_BRANCH %bb.3 28 ; CHECK-NEXT: {{ $}} 29 ; CHECK-NEXT: bb.1: 30 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 31 ; CHECK-NEXT: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3 32 ; CHECK-NEXT: {{ $}} 33 ; CHECK-NEXT: renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec 34 ; CHECK-NEXT: $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc 35 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec 36 ; CHECK-NEXT: S_BRANCH %bb.4 37 ; CHECK-NEXT: {{ $}} 38 ; CHECK-NEXT: bb.2: 39 ; CHECK-NEXT: liveins: $sgpr2_sgpr3 40 ; CHECK-NEXT: {{ $}} 41 ; CHECK-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc 42 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec 43 ; CHECK-NEXT: S_ENDPGM 0 44 ; CHECK-NEXT: {{ $}} 45 ; CHECK-NEXT: bb.3: 46 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 47 ; CHECK-NEXT: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3 48 ; CHECK-NEXT: {{ $}} 49 ; CHECK-NEXT: renamable $vgpr2 = V_MOV_B32_e32 15, implicit $exec 50 ; CHECK-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1 51 ; CHECK-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec 52 ; CHECK-NEXT: renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec 53 ; CHECK-NEXT: $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc 54 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec 55 ; CHECK-NEXT: S_BRANCH %bb.4 56 ; CHECK-NEXT: {{ $}} 57 ; CHECK-NEXT: bb.4: 58 ; CHECK-NEXT: liveins: $sgpr0_sgpr1, $sgpr2_sgpr3 59 ; CHECK-NEXT: {{ $}} 60 ; CHECK-NEXT: renamable $vgpr2 = V_MOV_B32_e32 8, implicit $exec 61 ; CHECK-NEXT: $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1 62 ; CHECK-NEXT: $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit killed $sgpr0_sgpr1, implicit $exec 63 ; CHECK-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc 64 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec 65 ; CHECK-NEXT: S_ENDPGM 0 66 bb.0: 67 successors: %bb.1, %bb.2 68 liveins: $vgpr0, $sgpr4_sgpr5, $sgpr7 69 70 renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM renamable $sgpr4_sgpr5, 4, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4) 71 renamable $vgpr0 = V_LSHLREV_B32_e32 2, killed $vgpr0, implicit $exec 72 S_WAITCNT 127 73 $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $exec 74 renamable $vgpr0 = V_ADD_CO_U32_e32 $sgpr0, killed $vgpr0, implicit-def $vcc, implicit $exec 75 renamable $vgpr1 = V_ADDC_U32_e32 0, killed $vgpr1, implicit-def $vcc, implicit killed $vcc, implicit $exec 76 renamable $vgpr0 = FLAT_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec, implicit $flat_scr :: (load (s32), addrspace 1) 77 renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed renamable $sgpr4_sgpr5, 0, 0 :: (dereferenceable invariant load (s64), align 16, addrspace 4) 78 S_WAITCNT 112 79 V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec 80 $sgpr2_sgpr3 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec 81 renamable $sgpr2_sgpr3 = S_XOR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def dead $scc 82 S_CBRANCH_EXECZ %bb.2, implicit $exec 83 S_BRANCH %bb.1 84 85 bb.2: 86 successors: %bb.3, %bb.4 87 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3 88 89 renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec 90 $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc 91 S_CBRANCH_EXECZ %bb.4, implicit $exec 92 S_BRANCH %bb.3 93 94 bb.4: 95 liveins: $sgpr2_sgpr3 96 97 $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc 98 renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec 99 S_ENDPGM 0 100 101 bb.1: 102 successors: %bb.3, %bb.4 103 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3 104 105 renamable $vgpr2 = V_MOV_B32_e32 15, implicit $exec 106 $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1 107 $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec 108 renamable $sgpr2_sgpr3 = S_OR_SAVEEXEC_B64 killed renamable $sgpr2_sgpr3, implicit-def $exec, implicit-def $scc, implicit $exec 109 $exec = S_XOR_B64 $exec, renamable $sgpr2_sgpr3, implicit-def $scc 110 S_CBRANCH_EXECZ %bb.4, implicit $exec 111 S_BRANCH %bb.3 112 113 bb.3: 114 liveins: $sgpr0_sgpr1, $sgpr2_sgpr3 115 116 renamable $vgpr2 = V_MOV_B32_e32 8, implicit $exec 117 $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1 118 $vgpr1 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit killed $sgpr0_sgpr1, implicit $exec 119 $exec = S_OR_B64 $exec, killed renamable $sgpr2_sgpr3, implicit-def $scc 120 renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec 121 S_ENDPGM 0 122 123... 124 125--- 126name: skip_branch_taildup_ret 127body: | 128 ; CHECK-LABEL: name: skip_branch_taildup_ret 129 ; CHECK: bb.0: 130 ; CHECK-NEXT: successors: %bb.3(0x40000000), %bb.1(0x40000000) 131 ; CHECK-NEXT: liveins: $vgpr0, $sgpr30_sgpr31, $vgpr1_vgpr2 132 ; CHECK-NEXT: {{ $}} 133 ; CHECK-NEXT: S_WAITCNT 0 134 ; CHECK-NEXT: V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec 135 ; CHECK-NEXT: $sgpr6_sgpr7 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec 136 ; CHECK-NEXT: renamable $sgpr6_sgpr7 = S_XOR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def dead $scc 137 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.1, implicit $exec 138 ; CHECK-NEXT: S_BRANCH %bb.3 139 ; CHECK-NEXT: {{ $}} 140 ; CHECK-NEXT: bb.1: 141 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 142 ; CHECK-NEXT: liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2 143 ; CHECK-NEXT: {{ $}} 144 ; CHECK-NEXT: renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec 145 ; CHECK-NEXT: $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc 146 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec 147 ; CHECK-NEXT: S_BRANCH %bb.4 148 ; CHECK-NEXT: {{ $}} 149 ; CHECK-NEXT: bb.2: 150 ; CHECK-NEXT: liveins: $sgpr6_sgpr7, $sgpr30_sgpr31 151 ; CHECK-NEXT: {{ $}} 152 ; CHECK-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc 153 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec 154 ; CHECK-NEXT: S_SETPC_B64_return $sgpr30_sgpr31 155 ; CHECK-NEXT: {{ $}} 156 ; CHECK-NEXT: bb.3: 157 ; CHECK-NEXT: successors: %bb.4(0x40000000), %bb.2(0x40000000) 158 ; CHECK-NEXT: liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2 159 ; CHECK-NEXT: {{ $}} 160 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 15, implicit $exec 161 ; CHECK-NEXT: renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec 162 ; CHECK-NEXT: $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc 163 ; CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec 164 ; CHECK-NEXT: S_BRANCH %bb.4 165 ; CHECK-NEXT: {{ $}} 166 ; CHECK-NEXT: bb.4: 167 ; CHECK-NEXT: liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2 168 ; CHECK-NEXT: {{ $}} 169 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 8, implicit $exec 170 ; CHECK-NEXT: $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc 171 ; CHECK-NEXT: renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec 172 ; CHECK-NEXT: S_SETPC_B64_return $sgpr30_sgpr31 173 bb.0: 174 successors: %bb.1, %bb.2 175 liveins: $vgpr0, $sgpr30_sgpr31, $vgpr1_vgpr2 176 177 S_WAITCNT 0 178 V_CMP_NE_U32_e32 0, killed $vgpr0, implicit-def $vcc, implicit $exec 179 $sgpr6_sgpr7 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec 180 renamable $sgpr6_sgpr7 = S_XOR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def dead $scc 181 S_CBRANCH_EXECZ %bb.2, implicit $exec 182 S_BRANCH %bb.1 183 184 bb.2: 185 successors: %bb.3, %bb.4 186 liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2 187 188 renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec 189 $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc 190 S_CBRANCH_EXECZ %bb.4, implicit $exec 191 S_BRANCH %bb.3 192 193 bb.4: 194 liveins: $sgpr6_sgpr7, $sgpr30_sgpr31 195 196 $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc 197 renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec 198 S_SETPC_B64_return $sgpr30_sgpr31 199 200 bb.1: 201 successors: %bb.3, %bb.4 202 liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2 203 204 renamable $vgpr0 = V_MOV_B32_e32 15, implicit $exec 205 renamable $sgpr6_sgpr7 = S_OR_SAVEEXEC_B64 killed renamable $sgpr6_sgpr7, implicit-def $exec, implicit-def $scc, implicit $exec 206 $exec = S_XOR_B64 $exec, renamable $sgpr6_sgpr7, implicit-def $scc 207 S_CBRANCH_EXECZ %bb.4, implicit $exec 208 S_BRANCH %bb.3 209 210 bb.3: 211 liveins: $sgpr6_sgpr7, $sgpr30_sgpr31, $vgpr1_vgpr2 212 213 renamable $vgpr0 = V_MOV_B32_e32 8, implicit $exec 214 $exec = S_OR_B64 $exec, killed renamable $sgpr6_sgpr7, implicit-def $scc 215 renamable $vgpr0 = V_MOV_B32_e32 32, implicit $exec 216 S_SETPC_B64_return $sgpr30_sgpr31 217 218... 219