1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -mtriple=amdgcn -mcpu=gfx90a -verify-machineinstrs -run-pass post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN %s 3 4--- 5name: highest_reg_shift_amt_v7 6tracksRegLiveness: true 7body: | 8 bb.0: 9 10 ; GCN-LABEL: name: highest_reg_shift_amt_v7 11 ; GCN: $vgpr7 = IMPLICIT_DEF 12 ; GCN-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF 13 ; GCN-NEXT: S_WAITCNT 0 14 ; GCN-NEXT: $vgpr0, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr0, implicit $exec 15 ; GCN-NEXT: renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 undef $vgpr0, killed $vgpr2_vgpr3, implicit $exec 16 ; GCN-NEXT: $vgpr7, $vgpr0 = V_SWAP_B32 $vgpr0, $vgpr7, implicit $exec 17 $vgpr7 = IMPLICIT_DEF 18 $vgpr2_vgpr3 = IMPLICIT_DEF 19 renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr2_vgpr3, implicit $exec 20... 21 22--- 23name: highest_reg_shift_amt_v15 24tracksRegLiveness: true 25body: | 26 bb.0: 27 28 ; GCN-LABEL: name: highest_reg_shift_amt_v15 29 ; GCN: $vgpr15 = IMPLICIT_DEF 30 ; GCN-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF 31 ; GCN-NEXT: S_WAITCNT 0 32 ; GCN-NEXT: $vgpr0, $vgpr15 = V_SWAP_B32 undef $vgpr15, undef $vgpr0, implicit $exec 33 ; GCN-NEXT: renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 undef $vgpr0, killed $vgpr2_vgpr3, implicit $exec 34 ; GCN-NEXT: $vgpr15, $vgpr0 = V_SWAP_B32 $vgpr0, $vgpr15, implicit $exec 35 $vgpr15 = IMPLICIT_DEF 36 $vgpr2_vgpr3 = IMPLICIT_DEF 37 renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 killed $vgpr15, killed $vgpr2_vgpr3, implicit $exec 38... 39 40--- 41name: highest_reg_shift_amt_v255 42tracksRegLiveness: true 43body: | 44 bb.0: 45 46 ; GCN-LABEL: name: highest_reg_shift_amt_v255 47 ; GCN: $vgpr255 = IMPLICIT_DEF 48 ; GCN-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF 49 ; GCN-NEXT: S_WAITCNT 0 50 ; GCN-NEXT: $vgpr0, $vgpr255 = V_SWAP_B32 undef $vgpr255, undef $vgpr0, implicit $exec 51 ; GCN-NEXT: renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 undef $vgpr0, killed $vgpr2_vgpr3, implicit $exec 52 ; GCN-NEXT: $vgpr255, $vgpr0 = V_SWAP_B32 $vgpr0, $vgpr255, implicit $exec 53 $vgpr255 = IMPLICIT_DEF 54 $vgpr2_vgpr3 = IMPLICIT_DEF 55 renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 killed $vgpr255, killed $vgpr2_vgpr3, implicit $exec 56... 57 58--- 59name: highest_reg_shift_amt_used_v0_dst 60tracksRegLiveness: true 61body: | 62 bb.0: 63 64 ; GCN-LABEL: name: highest_reg_shift_amt_used_v0_dst 65 ; GCN: $vgpr7 = IMPLICIT_DEF 66 ; GCN-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF 67 ; GCN-NEXT: S_WAITCNT 0 68 ; GCN-NEXT: $vgpr4, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr4, implicit $exec 69 ; GCN-NEXT: renamable $vgpr0_vgpr1 = V_LSHRREV_B64_e64 undef $vgpr4, killed $vgpr2_vgpr3, implicit $exec 70 ; GCN-NEXT: $vgpr7, $vgpr4 = V_SWAP_B32 $vgpr4, $vgpr7, implicit $exec 71 $vgpr7 = IMPLICIT_DEF 72 $vgpr2_vgpr3 = IMPLICIT_DEF 73 renamable $vgpr0_vgpr1 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr2_vgpr3, implicit $exec 74... 75 76--- 77name: highest_reg_shift_amt_used_v0_src 78tracksRegLiveness: true 79body: | 80 bb.0: 81 82 ; GCN-LABEL: name: highest_reg_shift_amt_used_v0_src 83 ; GCN: $vgpr7 = IMPLICIT_DEF 84 ; GCN-NEXT: $vgpr0_vgpr1 = IMPLICIT_DEF 85 ; GCN-NEXT: S_WAITCNT 0 86 ; GCN-NEXT: $vgpr4, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr4, implicit $exec 87 ; GCN-NEXT: renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 undef $vgpr4, killed $vgpr0_vgpr1, implicit $exec 88 ; GCN-NEXT: $vgpr7, $vgpr4 = V_SWAP_B32 $vgpr4, $vgpr7, implicit $exec 89 $vgpr7 = IMPLICIT_DEF 90 $vgpr0_vgpr1 = IMPLICIT_DEF 91 renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr0_vgpr1, implicit $exec 92... 93 94--- 95name: highest_reg_shift_amt_used_v0_both 96tracksRegLiveness: true 97body: | 98 bb.0: 99 100 ; GCN-LABEL: name: highest_reg_shift_amt_used_v0_both 101 ; GCN: $vgpr7 = IMPLICIT_DEF 102 ; GCN-NEXT: $vgpr0_vgpr1 = IMPLICIT_DEF 103 ; GCN-NEXT: S_WAITCNT 0 104 ; GCN-NEXT: $vgpr2, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr2, implicit $exec 105 ; GCN-NEXT: renamable $vgpr0_vgpr1 = V_LSHRREV_B64_e64 undef $vgpr2, killed $vgpr0_vgpr1, implicit $exec 106 ; GCN-NEXT: $vgpr7, $vgpr2 = V_SWAP_B32 $vgpr2, $vgpr7, implicit $exec 107 $vgpr7 = IMPLICIT_DEF 108 $vgpr0_vgpr1 = IMPLICIT_DEF 109 renamable $vgpr0_vgpr1 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr0_vgpr1, implicit $exec 110... 111 112--- 113name: highest_reg_shift_amt_overlapped_src 114tracksRegLiveness: true 115body: | 116 bb.0: 117 118 ; GCN-LABEL: name: highest_reg_shift_amt_overlapped_src 119 ; GCN: $vgpr7 = IMPLICIT_DEF 120 ; GCN-NEXT: $vgpr6_vgpr7 = IMPLICIT_DEF 121 ; GCN-NEXT: S_WAITCNT 0 122 ; GCN-NEXT: $vgpr2, $vgpr6 = V_SWAP_B32 undef $vgpr6, undef $vgpr2, implicit $exec 123 ; GCN-NEXT: $vgpr3, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr3, implicit $exec 124 ; GCN-NEXT: renamable $vgpr0_vgpr1 = V_LSHRREV_B64_e64 undef $vgpr3, undef $vgpr2_vgpr3, implicit $exec 125 ; GCN-NEXT: $vgpr6, $vgpr2 = V_SWAP_B32 $vgpr2, $vgpr6, implicit $exec 126 ; GCN-NEXT: $vgpr7, $vgpr3 = V_SWAP_B32 $vgpr3, $vgpr7, implicit $exec 127 $vgpr7 = IMPLICIT_DEF 128 $vgpr6_vgpr7 = IMPLICIT_DEF 129 renamable $vgpr0_vgpr1 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr6_vgpr7, implicit $exec 130... 131 132--- 133name: highest_reg_shift_amt_overlapped_dst 134tracksRegLiveness: true 135body: | 136 bb.0: 137 138 ; GCN-LABEL: name: highest_reg_shift_amt_overlapped_dst 139 ; GCN: $vgpr7 = IMPLICIT_DEF 140 ; GCN-NEXT: $vgpr0_vgpr1 = IMPLICIT_DEF 141 ; GCN-NEXT: S_WAITCNT 0 142 ; GCN-NEXT: $vgpr2, $vgpr6 = V_SWAP_B32 undef $vgpr6, undef $vgpr2, implicit $exec 143 ; GCN-NEXT: $vgpr3, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr3, implicit $exec 144 ; GCN-NEXT: $vgpr2_vgpr3 = V_LSHRREV_B64_e64 undef $vgpr3, killed $vgpr0_vgpr1, implicit $exec 145 ; GCN-NEXT: $vgpr6, $vgpr2 = V_SWAP_B32 $vgpr2, $vgpr6, implicit $exec 146 ; GCN-NEXT: $vgpr7, $vgpr3 = V_SWAP_B32 $vgpr3, $vgpr7, implicit $exec 147 $vgpr7 = IMPLICIT_DEF 148 $vgpr0_vgpr1 = IMPLICIT_DEF 149 renamable $vgpr6_vgpr7 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr0_vgpr1, implicit $exec 150... 151 152--- 153name: highest_reg_shift_amt_overlapped_both 154tracksRegLiveness: true 155body: | 156 bb.0: 157 158 ; GCN-LABEL: name: highest_reg_shift_amt_overlapped_both 159 ; GCN: $vgpr7 = IMPLICIT_DEF 160 ; GCN-NEXT: $vgpr6_vgpr7 = IMPLICIT_DEF 161 ; GCN-NEXT: S_WAITCNT 0 162 ; GCN-NEXT: $vgpr0, $vgpr6 = V_SWAP_B32 undef $vgpr6, undef $vgpr0, implicit $exec 163 ; GCN-NEXT: $vgpr1, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr1, implicit $exec 164 ; GCN-NEXT: $vgpr0_vgpr1 = V_LSHRREV_B64_e64 undef $vgpr1, undef $vgpr0_vgpr1, implicit $exec 165 ; GCN-NEXT: $vgpr6, $vgpr0 = V_SWAP_B32 $vgpr0, $vgpr6, implicit $exec 166 ; GCN-NEXT: $vgpr7, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr7, implicit $exec 167 $vgpr7 = IMPLICIT_DEF 168 $vgpr6_vgpr7 = IMPLICIT_DEF 169 renamable $vgpr6_vgpr7 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr6_vgpr7, implicit $exec 170... 171 172--- 173name: highest_reg_shift_amt_hazard_in_swap 174tracksRegLiveness: true 175body: | 176 bb.0: 177 178 ; GCN-LABEL: name: highest_reg_shift_amt_hazard_in_swap 179 ; GCN: $vgpr7 = IMPLICIT_DEF 180 ; GCN-NEXT: $vgpr0_vgpr1 = IMPLICIT_DEF 181 ; GCN-NEXT: $vgpr4_vgpr5 = V_MFMA_F64_4X4X4F64_vgprcd_e64 $vgpr0_vgpr1, $vgpr0_vgpr1, $vgpr0_vgpr1, 0, 0, 0, implicit $mode, implicit $exec 182 ; GCN-NEXT: S_WAITCNT 0 183 ; GCN-NEXT: S_NOP 4 184 ; GCN-NEXT: $vgpr4, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr4, implicit $exec 185 ; GCN-NEXT: renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 undef $vgpr4, killed $vgpr0_vgpr1, implicit $exec 186 ; GCN-NEXT: $vgpr7, $vgpr4 = V_SWAP_B32 $vgpr4, $vgpr7, implicit $exec 187 $vgpr7 = IMPLICIT_DEF 188 $vgpr0_vgpr1 = IMPLICIT_DEF 189 $vgpr4_vgpr5 = V_MFMA_F64_4X4X4F64_vgprcd_e64 $vgpr0_vgpr1, $vgpr0_vgpr1, $vgpr0_vgpr1, 0, 0, 0, implicit $mode, implicit $exec 190 renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr0_vgpr1, implicit $exec 191... 192 193--- 194name: highest_reg_shift_amt_hazard_in_swap2 195tracksRegLiveness: true 196body: | 197 bb.0: 198 199 ; GCN-LABEL: name: highest_reg_shift_amt_hazard_in_swap2 200 ; GCN: $vgpr1 = IMPLICIT_DEF 201 ; GCN-NEXT: $vgpr7 = IMPLICIT_DEF 202 ; GCN-NEXT: $vgpr6_vgpr7 = IMPLICIT_DEF 203 ; GCN-NEXT: $vgpr1 = V_DOT4C_I32_I8_e32 $vgpr7, $vgpr7, $vgpr1, implicit $exec 204 ; GCN-NEXT: S_WAITCNT 0 205 ; GCN-NEXT: $vgpr0, $vgpr6 = V_SWAP_B32 undef $vgpr6, undef $vgpr0, implicit $exec 206 ; GCN-NEXT: S_NOP 0 207 ; GCN-NEXT: $vgpr1, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr1, implicit $exec 208 ; GCN-NEXT: $vgpr0_vgpr1 = V_LSHRREV_B64_e64 undef $vgpr1, undef $vgpr0_vgpr1, implicit $exec 209 ; GCN-NEXT: $vgpr6, $vgpr0 = V_SWAP_B32 $vgpr0, $vgpr6, implicit $exec 210 ; GCN-NEXT: $vgpr7, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr7, implicit $exec 211 $vgpr1 = IMPLICIT_DEF 212 $vgpr7 = IMPLICIT_DEF 213 $vgpr6_vgpr7 = IMPLICIT_DEF 214 $vgpr1 = V_DOT4C_I32_I8_e32 $vgpr7, $vgpr7, $vgpr1, implicit $exec 215 renamable $vgpr6_vgpr7 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr6_vgpr7, implicit $exec 216... 217 218--- 219name: highest_reg_shift_amt_v7_bundle 220tracksRegLiveness: true 221body: | 222 bb.0: 223 224 ; GCN-LABEL: name: highest_reg_shift_amt_v7_bundle 225 ; GCN: $vgpr7 = IMPLICIT_DEF 226 ; GCN-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF 227 ; GCN-NEXT: BUNDLE implicit-def $vgpr2_vgpr3, implicit-def $vgpr7 { 228 ; GCN-NEXT: S_WAITCNT 0 229 ; GCN-NEXT: $vgpr0, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr0, implicit $exec 230 ; GCN-NEXT: renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 undef $vgpr0, killed $vgpr2_vgpr3, implicit $exec 231 ; GCN-NEXT: } 232 ; GCN-NEXT: $vgpr7, $vgpr0 = V_SWAP_B32 $vgpr0, $vgpr7, implicit $exec 233 $vgpr7 = IMPLICIT_DEF 234 $vgpr2_vgpr3 = IMPLICIT_DEF 235 BUNDLE implicit-def $vgpr2_vgpr3, implicit-def $vgpr7 { 236 renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 $vgpr7, killed $vgpr2_vgpr3, implicit $exec 237 } 238... 239 240--- 241name: highest_reg_shift_amt_hazard_in_swap2_bundle 242tracksRegLiveness: true 243body: | 244 bb.0: 245 246 ; GCN-LABEL: name: highest_reg_shift_amt_hazard_in_swap2_bundle 247 ; GCN: $vgpr1 = IMPLICIT_DEF 248 ; GCN-NEXT: $vgpr7 = IMPLICIT_DEF 249 ; GCN-NEXT: $vgpr6_vgpr7 = IMPLICIT_DEF 250 ; GCN-NEXT: BUNDLE internal $vgpr7, implicit-def $vgpr1, implicit-def $vgpr6_vgpr7 { 251 ; GCN-NEXT: $vgpr1 = IMPLICIT_DEF 252 ; GCN-NEXT: $vgpr7 = IMPLICIT_DEF 253 ; GCN-NEXT: $vgpr6_vgpr7 = IMPLICIT_DEF 254 ; GCN-NEXT: $vgpr1 = V_DOT4C_I32_I8_e32 $vgpr7, $vgpr7, $vgpr1, implicit $exec 255 ; GCN-NEXT: S_WAITCNT 0 256 ; GCN-NEXT: $vgpr0, $vgpr6 = V_SWAP_B32 undef $vgpr6, undef $vgpr0, implicit $exec 257 ; GCN-NEXT: S_NOP 0 258 ; GCN-NEXT: $vgpr1, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr1, implicit $exec 259 ; GCN-NEXT: $vgpr0_vgpr1 = V_LSHRREV_B64_e64 undef $vgpr1, undef $vgpr0_vgpr1, implicit $exec 260 ; GCN-NEXT: } 261 ; GCN-NEXT: $vgpr6, $vgpr0 = V_SWAP_B32 $vgpr0, $vgpr6, implicit $exec 262 ; GCN-NEXT: $vgpr7, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr7, implicit $exec 263 $vgpr1 = IMPLICIT_DEF 264 $vgpr7 = IMPLICIT_DEF 265 $vgpr6_vgpr7 = IMPLICIT_DEF 266 BUNDLE implicit-def $vgpr1, implicit-def $vgpr6_vgpr7, internal $vgpr7 { 267 $vgpr1 = IMPLICIT_DEF 268 $vgpr7 = IMPLICIT_DEF 269 $vgpr6_vgpr7 = IMPLICIT_DEF 270 $vgpr1 = V_DOT4C_I32_I8_e32 $vgpr7, $vgpr7, $vgpr1, implicit $exec 271 renamable $vgpr6_vgpr7 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr6_vgpr7, implicit $exec 272 } 273... 274 275--- 276name: highest_reg_shift_amt_v7_defined 277tracksRegLiveness: true 278body: | 279 bb.0: 280 281 ; GCN-LABEL: name: highest_reg_shift_amt_v7_defined 282 ; GCN: $vgpr0 = IMPLICIT_DEF 283 ; GCN-NEXT: $vgpr7 = IMPLICIT_DEF 284 ; GCN-NEXT: $vgpr2_vgpr3 = IMPLICIT_DEF 285 ; GCN-NEXT: S_WAITCNT 0 286 ; GCN-NEXT: $vgpr0, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr0, implicit $exec 287 ; GCN-NEXT: renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 undef $vgpr0, killed $vgpr2_vgpr3, implicit $exec 288 ; GCN-NEXT: $vgpr7, $vgpr0 = V_SWAP_B32 $vgpr0, $vgpr7, implicit $exec 289 $vgpr0 = IMPLICIT_DEF 290 $vgpr7 = IMPLICIT_DEF 291 $vgpr2_vgpr3 = IMPLICIT_DEF 292 renamable $vgpr2_vgpr3 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr2_vgpr3, implicit $exec 293... 294 295--- 296name: highest_reg_shift_amt_hazard_in_swap2_defined 297tracksRegLiveness: true 298body: | 299 bb.0: 300 301 ; GCN-LABEL: name: highest_reg_shift_amt_hazard_in_swap2_defined 302 ; GCN: $vgpr0 = IMPLICIT_DEF 303 ; GCN-NEXT: $vgpr1 = IMPLICIT_DEF 304 ; GCN-NEXT: $vgpr7 = IMPLICIT_DEF 305 ; GCN-NEXT: $vgpr6_vgpr7 = IMPLICIT_DEF 306 ; GCN-NEXT: $vgpr1 = V_DOT4C_I32_I8_e32 $vgpr7, $vgpr7, $vgpr1, implicit $exec 307 ; GCN-NEXT: S_WAITCNT 0 308 ; GCN-NEXT: $vgpr0, $vgpr6 = V_SWAP_B32 undef $vgpr6, undef $vgpr0, implicit $exec 309 ; GCN-NEXT: S_NOP 0 310 ; GCN-NEXT: $vgpr1, $vgpr7 = V_SWAP_B32 undef $vgpr7, undef $vgpr1, implicit $exec 311 ; GCN-NEXT: $vgpr0_vgpr1 = V_LSHRREV_B64_e64 undef $vgpr1, undef $vgpr0_vgpr1, implicit $exec 312 ; GCN-NEXT: $vgpr6, $vgpr0 = V_SWAP_B32 $vgpr0, $vgpr6, implicit $exec 313 ; GCN-NEXT: $vgpr7, $vgpr1 = V_SWAP_B32 $vgpr1, $vgpr7, implicit $exec 314 $vgpr0 = IMPLICIT_DEF 315 $vgpr1 = IMPLICIT_DEF 316 $vgpr7 = IMPLICIT_DEF 317 $vgpr6_vgpr7 = IMPLICIT_DEF 318 $vgpr1 = V_DOT4C_I32_I8_e32 $vgpr7, $vgpr7, $vgpr1, implicit $exec 319 renamable $vgpr6_vgpr7 = V_LSHRREV_B64_e64 killed $vgpr7, killed $vgpr6_vgpr7, implicit $exec 320... 321