1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass=si-post-ra-bundler %s -o - | FileCheck -check-prefix=GCN %s 3 4--- 5name: bundle_memops 6tracksRegLiveness: true 7body: | 8 bb.0: 9 ; GCN-LABEL: name: bundle_memops 10 ; GCN: $vgpr0 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 11 ; GCN-NEXT: S_NOP 0 12 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr1, implicit-def $vgpr1_lo16, implicit-def $vgpr1_hi16, implicit undef $vgpr3_vgpr4, implicit $exec { 13 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 14 ; GCN-NEXT: $vgpr1 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 4, 0, implicit $exec 15 ; GCN-NEXT: } 16 ; GCN-NEXT: S_NOP 0 17 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 18 ; GCN-NEXT: BUNDLE implicit-def $vgpr1, implicit-def $vgpr1_lo16, implicit-def $vgpr1_hi16, implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit-def $vgpr5, implicit-def $vgpr5_lo16, implicit-def $vgpr5_hi16, implicit undef $vgpr0_vgpr1, implicit $exec, implicit undef $vgpr3_vgpr4 { 19 ; GCN-NEXT: $vgpr1 = GLOBAL_LOAD_DWORD undef $vgpr0_vgpr1, 4, 0, implicit $exec 20 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 4, 0, implicit $exec 21 ; GCN-NEXT: $vgpr5 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 22 ; GCN-NEXT: } 23 ; GCN-NEXT: BUNDLE implicit undef $vgpr3_vgpr4, implicit $vgpr1, implicit $exec, implicit $vgpr0 { 24 ; GCN-NEXT: GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr1, 0, 0, implicit $exec 25 ; GCN-NEXT: GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr0, 4, 0, implicit $exec 26 ; GCN-NEXT: } 27 ; GCN-NEXT: S_NOP 0 28 ; GCN-NEXT: BUNDLE implicit undef $vgpr3_vgpr4, implicit $vgpr1, implicit $exec, implicit $vgpr0 { 29 ; GCN-NEXT: GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr1, 0, 0, implicit $exec 30 ; GCN-NEXT: GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr0, 4, 0, implicit $exec 31 ; GCN-NEXT: GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr1, 0, 0, implicit $exec 32 ; GCN-NEXT: } 33 ; GCN-NEXT: S_NOP 0 34 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 35 ; GCN-NEXT: S_NOP 0 36 ; GCN-NEXT: GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr0, 4, 0, implicit $exec 37 ; GCN-NEXT: BUNDLE implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit-def $vgpr3, implicit-def $vgpr3_lo16, implicit-def $vgpr3_hi16, implicit $vgpr0, implicit $exec, implicit $vgpr1 { 38 ; GCN-NEXT: $vgpr2 = DS_READ_B32_gfx9 $vgpr0, 0, 0, implicit $exec 39 ; GCN-NEXT: $vgpr3 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $exec 40 ; GCN-NEXT: } 41 ; GCN-NEXT: BUNDLE implicit $vgpr0, implicit $vgpr2, implicit killed $m0, implicit $exec, implicit $vgpr3 { 42 ; GCN-NEXT: DS_WRITE_B32_gfx9 $vgpr0, $vgpr2, 0, 0, implicit killed $m0, implicit $exec 43 ; GCN-NEXT: DS_WRITE_B32_gfx9 $vgpr0, $vgpr3, 4, 0, implicit killed $m0, implicit $exec 44 ; GCN-NEXT: } 45 ; GCN-NEXT: S_NOP 0 46 ; GCN-NEXT: BUNDLE implicit-def $sgpr2, implicit-def $sgpr2_lo16, implicit-def $sgpr2_hi16, implicit-def $sgpr3, implicit-def $sgpr3_lo16, implicit-def $sgpr3_hi16, implicit undef $sgpr0_sgpr1, implicit undef $sgpr10 { 47 ; GCN-NEXT: $sgpr2 = S_LOAD_DWORD_IMM undef $sgpr0_sgpr1, 0, 0 48 ; GCN-NEXT: $sgpr3 = S_LOAD_DWORD_SGPR undef $sgpr0_sgpr1, undef $sgpr10, 0 49 ; GCN-NEXT: } 50 ; GCN-NEXT: BUNDLE implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit-def $vgpr3, implicit-def $vgpr3_lo16, implicit-def $vgpr3_hi16, implicit $vgpr0, implicit undef $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr2, implicit $exec, implicit $vgpr1 { 51 ; GCN-NEXT: $vgpr2 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr2, 0, 0, 0, implicit $exec 52 ; GCN-NEXT: $vgpr3 = BUFFER_LOAD_DWORD_OFFEN $vgpr1, undef $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr2, 0, 0, 0, implicit $exec 53 ; GCN-NEXT: } 54 ; GCN-NEXT: BUNDLE implicit $vgpr0, implicit $vgpr2_vgpr3, implicit undef $sgpr0_sgpr1_sgpr2_sgpr3, implicit $exec { 55 ; GCN-NEXT: BUFFER_STORE_DWORD_ADDR64 $vgpr0, $vgpr2_vgpr3, undef $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec 56 ; GCN-NEXT: BUFFER_STORE_DWORD_ADDR64 $vgpr0, $vgpr2_vgpr3, undef $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec 57 ; GCN-NEXT: } 58 ; GCN-NEXT: BUNDLE implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit-def $vgpr3, implicit-def $vgpr3_lo16, implicit-def $vgpr3_hi16, implicit undef $vgpr4_vgpr5_vgpr6_vgpr7, implicit undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, implicit $exec { 59 ; GCN-NEXT: $vgpr2 = IMAGE_LOAD_V1_V4 undef $vgpr4_vgpr5_vgpr6_vgpr7, undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 2, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (load (s32)) 60 ; GCN-NEXT: $vgpr3 = IMAGE_LOAD_V1_V4 undef $vgpr4_vgpr5_vgpr6_vgpr7, undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 2, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (load (s32)) 61 ; GCN-NEXT: } 62 ; GCN-NEXT: BUNDLE implicit undef $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr0_vgpr1, implicit undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, implicit $exec { 63 ; GCN-NEXT: IMAGE_STORE_V4_V2 undef $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr0_vgpr1, undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 15, -1, 1, 0, 0, 0, 0, 0, implicit $exec :: (store (s128)) 64 ; GCN-NEXT: IMAGE_STORE_V4_V2 undef $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr0_vgpr1, undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 15, -1, 1, 0, 0, 0, 0, 0, implicit $exec :: (store (s128)) 65 ; GCN-NEXT: } 66 ; GCN-NEXT: S_NOP 0 67 ; GCN-NEXT: $sgpr64_sgpr65_sgpr66_sgpr67_sgpr68_sgpr69_sgpr70_sgpr71 = S_LOAD_DWORDX8_IMM undef $sgpr10_sgpr11, 464, 0 68 ; GCN-NEXT: $sgpr68_sgpr69_sgpr70_sgpr71_sgpr72_sgpr73_sgpr74_sgpr75 = S_LOAD_DWORDX8_IMM undef $sgpr10_sgpr11, 128, 0 69 ; GCN-NEXT: S_NOP 0 70 ; GCN-NEXT: BUNDLE implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit-def $vgpr3, implicit-def $vgpr3_lo16, implicit-def $vgpr3_hi16, implicit $vgpr0, implicit $exec, implicit $vgpr1 { 71 ; GCN-NEXT: $vgpr2 = DS_READ_B32_gfx9 $vgpr0, 0, 0, implicit $exec 72 ; GCN-NEXT: $vgpr3 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $exec 73 ; GCN-NEXT: } 74 $vgpr0 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 75 S_NOP 0 76 $vgpr0 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 77 $vgpr1 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 4, 0, implicit $exec 78 S_NOP 0 79 $vgpr0 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 80 $vgpr1 = GLOBAL_LOAD_DWORD undef $vgpr0_vgpr1, 4, 0, implicit $exec 81 $vgpr2 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 4, 0, implicit $exec 82 $vgpr5 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 83 GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr1, 0, 0, implicit $exec 84 GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr0, 4, 0, implicit $exec 85 S_NOP 0 86 GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr1, 0, 0, implicit $exec 87 GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr0, 4, 0, implicit $exec 88 GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr1, 0, 0, implicit $exec 89 S_NOP 0 90 $vgpr0 = GLOBAL_LOAD_DWORD undef $vgpr3_vgpr4, 0, 0, implicit $exec 91 S_NOP 0 92 GLOBAL_STORE_DWORD undef $vgpr3_vgpr4, $vgpr0, 4, 0, implicit $exec 93 $vgpr2 = DS_READ_B32_gfx9 $vgpr0, 0, 0, implicit $exec 94 $vgpr3 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $exec 95 DS_WRITE_B32_gfx9 $vgpr0, $vgpr2, 0, 0, implicit killed $m0, implicit $exec 96 DS_WRITE_B32_gfx9 $vgpr0, $vgpr3, 4, 0, implicit killed $m0, implicit $exec 97 S_NOP 0 98 $sgpr2 = S_LOAD_DWORD_IMM undef $sgpr0_sgpr1, 0, 0 99 $sgpr3 = S_LOAD_DWORD_SGPR undef $sgpr0_sgpr1, undef $sgpr10, 0 100 $vgpr2 = BUFFER_LOAD_DWORD_OFFEN $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr2, 0, 0, 0, implicit $exec 101 $vgpr3 = BUFFER_LOAD_DWORD_OFFEN $vgpr1, undef $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr2, 0, 0, 0, implicit $exec 102 BUFFER_STORE_DWORD_ADDR64 $vgpr0, $vgpr2_vgpr3, undef $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec 103 BUFFER_STORE_DWORD_ADDR64 $vgpr0, $vgpr2_vgpr3, undef $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec 104 $vgpr2 = IMAGE_LOAD_V1_V4 undef $vgpr4_vgpr5_vgpr6_vgpr7, undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 2, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (load (s32)) 105 $vgpr3 = IMAGE_LOAD_V1_V4 undef $vgpr4_vgpr5_vgpr6_vgpr7, undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 2, -1, 0, 0, 0, 0, 0, 0, implicit $exec :: (load (s32)) 106 IMAGE_STORE_V4_V2 undef $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr0_vgpr1, undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 15, -1, 1, 0, 0, 0, 0, 0, implicit $exec :: (store (s128)) 107 IMAGE_STORE_V4_V2 undef $vgpr0_vgpr1_vgpr2_vgpr3, $vgpr0_vgpr1, undef $sgpr0_sgpr1_sgpr2_sgpr3_sgpr4_sgpr5_sgpr6_sgpr7, 15, -1, 1, 0, 0, 0, 0, 0, implicit $exec :: (store (s128)) 108 S_NOP 0 109 $sgpr64_sgpr65_sgpr66_sgpr67_sgpr68_sgpr69_sgpr70_sgpr71 = S_LOAD_DWORDX8_IMM undef $sgpr10_sgpr11, 464, 0 110 $sgpr68_sgpr69_sgpr70_sgpr71_sgpr72_sgpr73_sgpr74_sgpr75 = S_LOAD_DWORDX8_IMM undef $sgpr10_sgpr11, 128, 0 111 S_NOP 0 112 $vgpr2 = DS_READ_B32_gfx9 $vgpr0, 0, 0, implicit $exec 113 $vgpr3 = DS_READ_B32_gfx9 $vgpr1, 0, 0, implicit $exec 114... 115 116# Middle dbg_value should be bundled 117--- 118name: bundle_dbg_value_0 119tracksRegLiveness: true 120body: | 121 bb.0: 122 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 123 ; GCN-LABEL: name: bundle_dbg_value_0 124 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 125 ; GCN-NEXT: {{ $}} 126 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr1, implicit-def $vgpr1_lo16, implicit-def $vgpr1_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 127 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 128 ; GCN-NEXT: DBG_VALUE $vgpr0, 0, 0 129 ; GCN-NEXT: $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 130 ; GCN-NEXT: } 131 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 132 DBG_VALUE $vgpr0, 0, 0 133 $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 134 135... 136 137# Middle dbg_value should be bundled 138--- 139name: bundle_dbg_value_1 140tracksRegLiveness: true 141body: | 142 bb.0: 143 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6, $vgpr1 144 ; GCN-LABEL: name: bundle_dbg_value_1 145 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6, $vgpr1 146 ; GCN-NEXT: {{ $}} 147 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 148 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 149 ; GCN-NEXT: DBG_VALUE $vgpr0, 0, 0 150 ; GCN-NEXT: DBG_VALUE $vgpr1, 0, 0 151 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 152 ; GCN-NEXT: } 153 ; GCN-NEXT: DBG_VALUE $vgpr2, 0, 0 154 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 155 DBG_VALUE $vgpr0, 0, 0 156 DBG_VALUE $vgpr1, 0, 0 157 $vgpr2 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 158 DBG_VALUE $vgpr2, 0, 0 159... 160 161# Starting and ending dbg_values should not be in the bundle 162--- 163name: bundle_dbg_value_2 164tracksRegLiveness: true 165body: | 166 bb.0: 167 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6, $vgpr1 168 ; GCN-LABEL: name: bundle_dbg_value_2 169 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6, $vgpr1 170 ; GCN-NEXT: {{ $}} 171 ; GCN-NEXT: DBG_VALUE $vgpr1, 0, 0 172 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 173 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 174 ; GCN-NEXT: DBG_VALUE $vgpr0, 0, 0 175 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 176 ; GCN-NEXT: } 177 ; GCN-NEXT: DBG_VALUE $vgpr2, 0, 0 178 DBG_VALUE $vgpr1, 0, 0 179 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 180 DBG_VALUE $vgpr0, 0, 0 181 $vgpr2 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 182 DBG_VALUE $vgpr2, 0, 0 183... 184 185--- 186name: bundle_kill 187tracksRegLiveness: true 188body: | 189 bb.0: 190 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 191 ; GCN-LABEL: name: bundle_kill 192 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 193 ; GCN-NEXT: {{ $}} 194 ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec 195 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr1, implicit $vgpr5_vgpr6 { 196 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 197 ; GCN-NEXT: KILL $vgpr1 198 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 199 ; GCN-NEXT: } 200 $vgpr1 = V_MOV_B32_e32 0, implicit $exec 201 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 202 KILL $vgpr1 203 $vgpr2 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 204 205... 206 207--- 208name: bundle_kill_def_in_bundle 209tracksRegLiveness: true 210body: | 211 bb.0: 212 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 213 ; GCN-LABEL: name: bundle_kill_def_in_bundle 214 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 215 ; GCN-NEXT: {{ $}} 216 ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec 217 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr2, implicit-def $vgpr2_lo16, implicit-def $vgpr2_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 218 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 219 ; GCN-NEXT: KILL internal $vgpr0 220 ; GCN-NEXT: $vgpr2 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 221 ; GCN-NEXT: } 222 $vgpr1 = V_MOV_B32_e32 0, implicit $exec 223 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 224 KILL $vgpr0 225 $vgpr2 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 226 227... 228 229# Before register allocation, KILL hints are inserted after potential soft 230# clauses to hint the register allocator to not clobber the input 231# registers. Kills that look like this should be erased. 232--- 233name: post_bundle_kill 234body: | 235 bb.0: 236 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 237 238 ; GCN-LABEL: name: post_bundle_kill 239 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 240 ; GCN-NEXT: {{ $}} 241 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr1, implicit-def $vgpr1_lo16, implicit-def $vgpr1_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 242 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 243 ; GCN-NEXT: $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 244 ; GCN-NEXT: } 245 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 246 $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 247 KILL killed $vgpr3_vgpr4, killed $vgpr5_vgpr6 248... 249 250# Kill some other register not used in the bundle, should not be touched. 251--- 252name: post_bundle_kill_other 253body: | 254 bb.0: 255 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 256 ; GCN-LABEL: name: post_bundle_kill_other 257 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 258 ; GCN-NEXT: {{ $}} 259 ; GCN-NEXT: $vgpr7 = V_MOV_B32_e32 0, implicit $exec 260 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr1, implicit-def $vgpr1_lo16, implicit-def $vgpr1_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 261 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 262 ; GCN-NEXT: $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 263 ; GCN-NEXT: } 264 ; GCN-NEXT: KILL killed $vgpr7 265 $vgpr7 = V_MOV_B32_e32 0, implicit $exec 266 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 267 $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 268 KILL killed $vgpr7 269... 270 271# Kill some other register not used in the bundle, but also some 272# from the bundle. 273--- 274name: post_bundle_kill_plus_other 275body: | 276 bb.0: 277 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 278 ; GCN-LABEL: name: post_bundle_kill_plus_other 279 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 280 ; GCN-NEXT: {{ $}} 281 ; GCN-NEXT: $vgpr7 = V_MOV_B32_e32 0, implicit $exec 282 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr1, implicit-def $vgpr1_lo16, implicit-def $vgpr1_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 283 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 284 ; GCN-NEXT: $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 285 ; GCN-NEXT: } 286 ; GCN-NEXT: KILL killed $vgpr7, killed $vgpr3 287 $vgpr7 = V_MOV_B32_e32 0, implicit $exec 288 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 289 $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 290 KILL killed $vgpr7, killed $vgpr3 291... 292 293--- 294name: post_bundle_multi_kill_0 295body: | 296 bb.0: 297 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 298 299 ; GCN-LABEL: name: post_bundle_multi_kill_0 300 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 301 ; GCN-NEXT: {{ $}} 302 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr1, implicit-def $vgpr1_lo16, implicit-def $vgpr1_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 303 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 304 ; GCN-NEXT: $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 305 ; GCN-NEXT: } 306 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 307 $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 308 KILL killed $vgpr3_vgpr4 309 KILL killed $vgpr5_vgpr6 310... 311 312 313--- 314name: post_bundle_multi_kill_1 315body: | 316 bb.0: 317 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 318 319 ; GCN-LABEL: name: post_bundle_multi_kill_1 320 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 321 ; GCN-NEXT: {{ $}} 322 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr1, implicit-def $vgpr1_lo16, implicit-def $vgpr1_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 323 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 324 ; GCN-NEXT: $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 325 ; GCN-NEXT: } 326 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 327 $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 328 KILL killed $vgpr3 329 KILL $vgpr4 330 KILL killed $vgpr5 331 KILL killed $vgpr6 332... 333 334--- 335name: post_bundle_kill_and_null_reg_dbginfo 336body: | 337 bb.0: 338 liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 339 340 ; GCN-LABEL: name: post_bundle_kill_and_null_reg_dbginfo 341 ; GCN: liveins: $vgpr3_vgpr4, $vgpr5_vgpr6 342 ; GCN-NEXT: {{ $}} 343 ; GCN-NEXT: BUNDLE implicit-def $vgpr0, implicit-def $vgpr0_lo16, implicit-def $vgpr0_hi16, implicit-def $vgpr1, implicit-def $vgpr1_lo16, implicit-def $vgpr1_hi16, implicit $vgpr3_vgpr4, implicit $exec, implicit $vgpr5_vgpr6 { 344 ; GCN-NEXT: $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 345 ; GCN-NEXT: DBG_VALUE $noreg, $noreg 346 ; GCN-NEXT: $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 347 ; GCN-NEXT: } 348 $vgpr0 = GLOBAL_LOAD_DWORD $vgpr3_vgpr4, 0, 0, implicit $exec 349 DBG_VALUE $noreg, $noreg 350 $vgpr1 = GLOBAL_LOAD_DWORD $vgpr5_vgpr6, 0, 0, implicit $exec 351 KILL killed $vgpr3_vgpr4, killed $vgpr5_vgpr6 352... 353