1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=amdgcn -mcpu=gfx1100 -mattr=+wavefrontsize32 -verify-machineinstrs -run-pass post-RA-hazard-rec -o - %s | FileCheck -check-prefix=GCN %s 3 4--- 5name: trans_use_1_hazard 6body: | 7 bb.0: 8 ; GCN-LABEL: name: trans_use_1_hazard 9 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 10 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 11 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 12 ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 13 ; GCN-NEXT: S_ENDPGM 0 14 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 15 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 16 $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 17 S_ENDPGM 0 18... 19 20--- 21name: trans_use_1_no_hazard_1 22body: | 23 bb.0: 24 ; GCN-LABEL: name: trans_use_1_no_hazard_1 25 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 26 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 27 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 28 ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 29 ; GCN-NEXT: S_ENDPGM 0 30 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 31 S_WAITCNT_DEPCTR 4095 32 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 33 $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 34 S_ENDPGM 0 35... 36 37--- 38name: trans_use_2_hazard 39body: | 40 bb.0: 41 ; GCN-LABEL: name: trans_use_2_hazard 42 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 43 ; GCN-NEXT: $sgpr0 = S_MOV_B32 0 44 ; GCN-NEXT: $sgpr1 = S_MOV_B32 0 45 ; GCN-NEXT: $sgpr2 = S_MOV_B32 0 46 ; GCN-NEXT: $sgpr3 = S_MOV_B32 0 47 ; GCN-NEXT: $sgpr4 = S_MOV_B32 0 48 ; GCN-NEXT: $sgpr5 = S_MOV_B32 0 49 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 50 ; GCN-NEXT: $sgpr6 = S_MOV_B32 0 51 ; GCN-NEXT: $sgpr7 = S_MOV_B32 0 52 ; GCN-NEXT: $sgpr8 = S_MOV_B32 0 53 ; GCN-NEXT: $sgpr9 = S_MOV_B32 0 54 ; GCN-NEXT: $sgpr10 = S_MOV_B32 0 55 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 56 ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 57 ; GCN-NEXT: S_ENDPGM 0 58 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 59 $sgpr0 = S_MOV_B32 0 60 $sgpr1 = S_MOV_B32 0 61 $sgpr2 = S_MOV_B32 0 62 $sgpr3 = S_MOV_B32 0 63 $sgpr4 = S_MOV_B32 0 64 $sgpr5 = S_MOV_B32 0 65 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 66 $sgpr6 = S_MOV_B32 0 67 $sgpr7 = S_MOV_B32 0 68 $sgpr8 = S_MOV_B32 0 69 $sgpr9 = S_MOV_B32 0 70 $sgpr10 = S_MOV_B32 0 71 $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 72 S_ENDPGM 0 73... 74 75--- 76name: trans_use_3_hazard 77body: | 78 bb.0: 79 ; GCN-LABEL: name: trans_use_3_hazard 80 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 81 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 82 ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec 83 ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec 84 ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec 85 ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec 86 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 87 ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 88 ; GCN-NEXT: S_ENDPGM 0 89 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 90 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 91 $vgpr10 = V_MOV_B32_e32 0, implicit $exec 92 $vgpr11 = V_MOV_B32_e32 0, implicit $exec 93 $vgpr12 = V_MOV_B32_e32 0, implicit $exec 94 $vgpr13 = V_MOV_B32_e32 0, implicit $exec 95 $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 96 S_ENDPGM 0 97... 98 99--- 100name: trans_use_3_no_hazard_1 101body: | 102 bb.0: 103 ; GCN-LABEL: name: trans_use_3_no_hazard_1 104 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 105 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 106 ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec 107 ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec 108 ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec 109 ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec 110 ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec 111 ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 112 ; GCN-NEXT: S_ENDPGM 0 113 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 114 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 115 $vgpr10 = V_MOV_B32_e32 0, implicit $exec 116 $vgpr11 = V_MOV_B32_e32 0, implicit $exec 117 $vgpr12 = V_MOV_B32_e32 0, implicit $exec 118 $vgpr13 = V_MOV_B32_e32 0, implicit $exec 119 $vgpr14 = V_MOV_B32_e32 0, implicit $exec 120 $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 121 S_ENDPGM 0 122... 123 124--- 125name: trans_use_3_no_hazard_2 126body: | 127 bb.0: 128 ; GCN-LABEL: name: trans_use_3_no_hazard_2 129 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 130 ; GCN-NEXT: $vgpr10 = V_MOV_B32_e32 0, implicit $exec 131 ; GCN-NEXT: $vgpr11 = V_MOV_B32_e32 0, implicit $exec 132 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 133 ; GCN-NEXT: $vgpr12 = V_MOV_B32_e32 0, implicit $exec 134 ; GCN-NEXT: $vgpr13 = V_MOV_B32_e32 0, implicit $exec 135 ; GCN-NEXT: $vgpr14 = V_MOV_B32_e32 0, implicit $exec 136 ; GCN-NEXT: $vgpr15 = V_MOV_B32_e32 0, implicit $exec 137 ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 138 ; GCN-NEXT: S_ENDPGM 0 139 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 140 $vgpr10 = V_MOV_B32_e32 0, implicit $exec 141 $vgpr11 = V_MOV_B32_e32 0, implicit $exec 142 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 143 $vgpr12 = V_MOV_B32_e32 0, implicit $exec 144 $vgpr13 = V_MOV_B32_e32 0, implicit $exec 145 $vgpr14 = V_MOV_B32_e32 0, implicit $exec 146 $vgpr15 = V_MOV_B32_e32 0, implicit $exec 147 $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 148 S_ENDPGM 0 149... 150 151--- 152name: trans_use_3_no_hazard_3 153body: | 154 bb.0: 155 ; GCN-LABEL: name: trans_use_3_no_hazard_3 156 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 157 ; GCN-NEXT: $vgpr10 = V_SQRT_F32_e32 $vgpr11, implicit $mode, implicit $exec 158 ; GCN-NEXT: $vgpr12 = V_SQRT_F32_e32 $vgpr13, implicit $mode, implicit $exec 159 ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 160 ; GCN-NEXT: S_ENDPGM 0 161 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 162 $vgpr10 = V_SQRT_F32_e32 $vgpr11, implicit $mode, implicit $exec 163 $vgpr12 = V_SQRT_F32_e32 $vgpr13, implicit $mode, implicit $exec 164 $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 165 S_ENDPGM 0 166... 167 168--- 169name: trans_use_4_one_depctr_1 170body: | 171 bb.0: 172 ; GCN-LABEL: name: trans_use_4_one_depctr_1 173 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 174 ; GCN-NEXT: $vgpr3 = V_SQRT_F32_e32 $vgpr2, implicit $mode, implicit $exec 175 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 176 ; GCN-NEXT: $vgpr5 = V_ADD_F32_e32 $vgpr1, $vgpr4, implicit $mode, implicit $exec 177 ; GCN-NEXT: $vgpr7 = V_ADD_F32_e32 $vgpr3, $vgpr6, implicit $mode, implicit $exec 178 ; GCN-NEXT: S_ENDPGM 0 179 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 180 $vgpr3 = V_SQRT_F32_e32 $vgpr2, implicit $mode, implicit $exec 181 $vgpr5 = V_ADD_F32_e32 $vgpr1, $vgpr4, implicit $mode, implicit $exec 182 $vgpr7 = V_ADD_F32_e32 $vgpr3, $vgpr6, implicit $mode, implicit $exec 183 S_ENDPGM 0 184... 185 186--- 187name: trans_use_4_one_depctr_2 188body: | 189 bb.0: 190 ; GCN-LABEL: name: trans_use_4_one_depctr_2 191 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 192 ; GCN-NEXT: $vgpr3 = V_SQRT_F32_e32 $vgpr2, implicit $mode, implicit $exec 193 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 194 ; GCN-NEXT: $vgpr5 = V_ADD_F32_e32 $vgpr3, $vgpr4, implicit $mode, implicit $exec 195 ; GCN-NEXT: $vgpr7 = V_ADD_F32_e32 $vgpr1, $vgpr6, implicit $mode, implicit $exec 196 ; GCN-NEXT: S_ENDPGM 0 197 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 198 $vgpr3 = V_SQRT_F32_e32 $vgpr2, implicit $mode, implicit $exec 199 $vgpr5 = V_ADD_F32_e32 $vgpr3, $vgpr4, implicit $mode, implicit $exec 200 $vgpr7 = V_ADD_F32_e32 $vgpr1, $vgpr6, implicit $mode, implicit $exec 201 S_ENDPGM 0 202... 203 204--- 205name: trans_use_4 206body: | 207 bb.0: 208 ; GCN-LABEL: name: trans_use_4 209 ; GCN: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 210 ; GCN-NEXT: $vgpr10 = V_SQRT_F32_e32 $vgpr11, implicit $mode, implicit $exec 211 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 212 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 213 ; GCN-NEXT: $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 214 ; GCN-NEXT: S_ENDPGM 0 215 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 216 $vgpr10 = V_SQRT_F32_e32 $vgpr11, implicit $mode, implicit $exec 217 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 218 $vgpr3 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 219 S_ENDPGM 0 220... 221 222--- 223name: trans_use_branching_1a 224body: | 225 ; GCN-LABEL: name: trans_use_branching_1a 226 ; GCN: bb.0: 227 ; GCN-NEXT: successors: %bb.2(0x80000000) 228 ; GCN-NEXT: {{ $}} 229 ; GCN-NEXT: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 230 ; GCN-NEXT: S_BRANCH %bb.2 231 ; GCN-NEXT: {{ $}} 232 ; GCN-NEXT: bb.1: 233 ; GCN-NEXT: successors: %bb.2(0x80000000) 234 ; GCN-NEXT: {{ $}} 235 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 236 ; GCN-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec 237 ; GCN-NEXT: $vgpr31 = V_MOV_B32_e32 0, implicit $exec 238 ; GCN-NEXT: $vgpr32 = V_MOV_B32_e32 0, implicit $exec 239 ; GCN-NEXT: $vgpr33 = V_MOV_B32_e32 0, implicit $exec 240 ; GCN-NEXT: S_BRANCH %bb.2 241 ; GCN-NEXT: {{ $}} 242 ; GCN-NEXT: bb.2: 243 ; GCN-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec 244 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 245 ; GCN-NEXT: $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 246 ; GCN-NEXT: S_ENDPGM 0 247 bb.0: 248 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 249 S_BRANCH %bb.2 250 bb.1: 251 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 252 $vgpr30 = V_MOV_B32_e32 0, implicit $exec 253 $vgpr31 = V_MOV_B32_e32 0, implicit $exec 254 $vgpr32 = V_MOV_B32_e32 0, implicit $exec 255 $vgpr33 = V_MOV_B32_e32 0, implicit $exec 256 S_BRANCH %bb.2 257 bb.2: 258 $vgpr3 = V_MOV_B32_e32 0, implicit $exec 259 $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 260 S_ENDPGM 0 261... 262 263--- 264name: trans_use_branching_1b 265body: | 266 ; GCN-LABEL: name: trans_use_branching_1b 267 ; GCN: bb.0: 268 ; GCN-NEXT: successors: %bb.2(0x80000000) 269 ; GCN-NEXT: {{ $}} 270 ; GCN-NEXT: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 271 ; GCN-NEXT: S_BRANCH %bb.2 272 ; GCN-NEXT: {{ $}} 273 ; GCN-NEXT: bb.1: 274 ; GCN-NEXT: successors: %bb.2(0x80000000) 275 ; GCN-NEXT: {{ $}} 276 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 277 ; GCN-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec 278 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 279 ; GCN-NEXT: S_BRANCH %bb.2 280 ; GCN-NEXT: {{ $}} 281 ; GCN-NEXT: bb.2: 282 ; GCN-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec 283 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 284 ; GCN-NEXT: $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 285 ; GCN-NEXT: S_ENDPGM 0 286 bb.0: 287 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 288 S_BRANCH %bb.2 289 bb.1: 290 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 291 $vgpr30 = V_MOV_B32_e32 0, implicit $exec 292 S_WAITCNT_DEPCTR 4095 293 S_BRANCH %bb.2 294 bb.2: 295 $vgpr3 = V_MOV_B32_e32 0, implicit $exec 296 $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 297 S_ENDPGM 0 298... 299 300--- 301name: trans_use_branching_1c_no_hazard_1 302body: | 303 ; GCN-LABEL: name: trans_use_branching_1c_no_hazard_1 304 ; GCN: bb.0: 305 ; GCN-NEXT: successors: %bb.2(0x80000000) 306 ; GCN-NEXT: {{ $}} 307 ; GCN-NEXT: $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 308 ; GCN-NEXT: S_WAITCNT_DEPCTR 4095 309 ; GCN-NEXT: S_BRANCH %bb.2 310 ; GCN-NEXT: {{ $}} 311 ; GCN-NEXT: bb.1: 312 ; GCN-NEXT: successors: %bb.2(0x80000000) 313 ; GCN-NEXT: {{ $}} 314 ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec 315 ; GCN-NEXT: $vgpr30 = V_MOV_B32_e32 0, implicit $exec 316 ; GCN-NEXT: S_BRANCH %bb.2 317 ; GCN-NEXT: {{ $}} 318 ; GCN-NEXT: bb.2: 319 ; GCN-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec 320 ; GCN-NEXT: $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 321 ; GCN-NEXT: S_ENDPGM 0 322 bb.0: 323 $vgpr1 = V_SQRT_F32_e32 $vgpr0, implicit $mode, implicit $exec 324 S_WAITCNT_DEPCTR 4095 325 S_BRANCH %bb.2 326 bb.1: 327 $vgpr2 = V_MOV_B32_e32 0, implicit $exec 328 $vgpr30 = V_MOV_B32_e32 0, implicit $exec 329 S_BRANCH %bb.2 330 bb.2: 331 $vgpr3 = V_MOV_B32_e32 0, implicit $exec 332 $vgpr4 = V_ADD_F32_e32 $vgpr1, $vgpr2, implicit $mode, implicit $exec 333 S_ENDPGM 0 334... 335