430 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=tahiti -run-pass post-RA-hazard-rec %s -o - | FileCheck %s -check-prefixes=GCN,SICI2# RUN: llc -mtriple=amdgcn -mcpu=hawaii -run-pass post-RA-hazard-rec %s -o - | FileCheck %s -check-prefixes=GCN,CIVI,SICI3# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass post-RA-hazard-rec %s -o - | FileCheck %s -check-prefixes=GCN,CIVI,VI4# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass post-RA-hazard-rec %s -o - | FileCheck %s -check-prefixes=GCN,CIVI,VI,GFX95 6--- |7 define amdgpu_kernel void @div_fmas() { ret void }8 define amdgpu_kernel void @s_getreg() { ret void }9 define amdgpu_kernel void @s_setreg() { ret void }10 define amdgpu_kernel void @vmem_gt_8dw_store() { ret void }11 define amdgpu_kernel void @readwrite_lane() { ret void }12 define amdgpu_kernel void @rfe() { ret void }13 define amdgpu_kernel void @s_movrel() { ret void }14 define amdgpu_kernel void @v_interp() { ret void }15 define amdgpu_kernel void @dpp() { ret void }16...17---18# GCN-LABEL: name: div_fmas19 20# GCN-LABEL: bb.0:21# GCN: S_MOV_B6422# GCN-NOT: S_NOP23# GCN: V_DIV_FMAS24 25# GCN-LABEL: bb.1:26# GCN: V_CMP_EQ_I3227# GCN: S_NOP 328# GCN: V_DIV_FMAS_F3229 30# GCN-LABEL: bb.2:31# GCN: V_CMP_EQ_I3232# GCN: S_NOP 333# GCN: V_DIV_FMAS_F3234 35# GCN-LABEL: bb.3:36# GCN: V_DIV_SCALE_F3237# GCN: S_NOP 338# GCN: V_DIV_FMAS_F3239name: div_fmas40 41body: |42 bb.0:43 $vcc = S_MOV_B64 044 $vgpr0 = V_DIV_FMAS_F32_e64 0, $vgpr1, 0, $vgpr2, 0, $vgpr3, 0, 0, implicit $mode, implicit $vcc, implicit $exec45 S_BRANCH %bb.146 47 bb.1:48 implicit $vcc = V_CMP_EQ_I32_e32 $vgpr1, $vgpr2, implicit $exec49 $vgpr0 = V_DIV_FMAS_F32_e64 0, $vgpr1, 0, $vgpr2, 0, $vgpr3, 0, 0, implicit $mode, implicit $vcc, implicit $exec50 S_BRANCH %bb.251 52 bb.2:53 $vcc = V_CMP_EQ_I32_e64 $vgpr1, $vgpr2, implicit $exec54 $vgpr0 = V_DIV_FMAS_F32_e64 0, $vgpr1, 0, $vgpr2, 0, $vgpr3, 0, 0, implicit $mode, implicit $vcc, implicit $exec55 S_BRANCH %bb.356 57 bb.3:58 $vgpr4, $vcc = V_DIV_SCALE_F32_e64 0, $vgpr1, 0, $vgpr1, 0, $vgpr3, 0, 0, implicit $mode, implicit $exec59 $vgpr0 = V_DIV_FMAS_F32_e64 0, $vgpr1, 0, $vgpr2, 0, $vgpr3, 0, 0, implicit $mode, implicit $vcc, implicit $exec60 S_ENDPGM 061 62...63 64...65---66# GCN-LABEL: name: s_getreg67 68# GCN-LABEL: bb.0:69# GCN: S_SETREG70# GCN: S_NOP 171# GCN: S_GETREG72 73# GCN-LABEL: bb.1:74# GCN: S_SETREG_IMM3275# GCN: S_NOP 176# GCN: S_GETREG77 78# GCN-LABEL: bb.2:79# GCN: S_SETREG80# GCN: S_NOP 081# GCN: S_GETREG82 83# GCN-LABEL: bb.3:84# GCN: S_SETREG85# GCN-NEXT: S_GETREG86 87name: s_getreg88 89body: |90 bb.0:91 S_SETREG_B32 $sgpr0, 1, implicit-def $mode, implicit $mode92 $sgpr1 = S_GETREG_B32 1, implicit-def $mode, implicit $mode93 S_BRANCH %bb.194 95 bb.1:96 S_SETREG_IMM32_B32 0, 1, implicit-def $mode, implicit $mode97 $sgpr1 = S_GETREG_B32 1, implicit-def $mode, implicit $mode98 S_BRANCH %bb.299 100 bb.2:101 S_SETREG_B32 $sgpr0, 1, implicit-def $mode, implicit $mode102 $sgpr1 = S_MOV_B32 0103 $sgpr2 = S_GETREG_B32 1, implicit-def $mode, implicit $mode104 S_BRANCH %bb.3105 106 bb.3:107 S_SETREG_B32 $sgpr0, 0, implicit-def $mode, implicit $mode108 $sgpr1 = S_GETREG_B32 1, implicit-def $mode, implicit $mode109 S_ENDPGM 0110...111 112...113---114# GCN-LABEL: name: s_setreg115 116# GCN-LABEL: bb.0:117# GCN: S_SETREG118# SICI: S_NOP 0119# VI: S_NOP 1120# GCN: S_SETREG121 122# GCN-LABEL: bb.1:123# GCN: S_SETREG124# SICI: S_NOP 0125# VI: S_NOP 1126# GCN: S_SETREG127 128# GCN-LABEL: bb.2:129# GCN: S_SETREG130# GCN-NEXT: S_SETREG131 132name: s_setreg133 134body: |135 bb.0:136 S_SETREG_B32 $sgpr0, 1, implicit-def $mode, implicit $mode137 S_SETREG_B32 $sgpr1, 1, implicit-def $mode, implicit $mode138 S_BRANCH %bb.1139 140 bb.1:141 S_SETREG_B32 $sgpr0, 64, implicit-def $mode, implicit $mode142 S_SETREG_B32 $sgpr1, 128, implicit-def $mode, implicit $mode143 S_BRANCH %bb.2144 145 bb.2:146 S_SETREG_B32 $sgpr0, 1, implicit-def $mode, implicit $mode147 S_SETREG_B32 $sgpr1, 0, implicit-def $mode, implicit $mode148 S_ENDPGM 0149...150 151...152---153# GCN-LABEL: name: vmem_gt_8dw_store154 155# GCN-LABEL: bb.0:156# GCN: BUFFER_STORE_DWORD_OFFSET157# GCN-NEXT: V_MOV_B32158# GCN: BUFFER_STORE_DWORDX3_OFFSET159# CIVI: S_NOP160# GCN-NEXT: V_MOV_B32161# GCN: BUFFER_STORE_DWORDX4_OFFSET162# GCN-NEXT: V_MOV_B32163# GCN: BUFFER_STORE_DWORDX4_OFFSET164# CIVI: S_NOP165# GCN-NEXT: V_MOV_B32166# GCN: BUFFER_STORE_FORMAT_XYZ_OFFSET167# CIVI: S_NOP168# GCN-NEXT: V_MOV_B32169# GCN: BUFFER_STORE_FORMAT_XYZW_OFFSET170# CIVI: S_NOP171# GCN-NEXT: V_MOV_B32172 173# GCN-LABEL: bb.1:174# GCN: FLAT_STORE_DWORDX2175# GCN-NEXT: V_MOV_B32176# GCN: FLAT_STORE_DWORDX3177# CIVI: S_NOP178# GCN-NEXT: V_MOV_B32179# GCN: FLAT_STORE_DWORDX4180# CIVI: S_NOP181# GCN-NEXT: V_MOV_B32182# GCN: FLAT_ATOMIC_CMPSWAP_X2183# CIVI: S_NOP184# GCN-NEXT: V_MOV_B32185# GCN: FLAT_ATOMIC_FCMPSWAP_X2186# CIVI: S_NOP187# GCN: V_MOV_B32188 189name: vmem_gt_8dw_store190 191body: |192 bb.0:193 BUFFER_STORE_DWORD_OFFSET $vgpr3, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, implicit $exec194 $vgpr3 = V_MOV_B32_e32 0, implicit $exec195 BUFFER_STORE_DWORDX3_OFFSET $vgpr2_vgpr3_vgpr4, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec196 $vgpr3 = V_MOV_B32_e32 0, implicit $exec197 BUFFER_STORE_DWORDX4_OFFSET $vgpr2_vgpr3_vgpr4_vgpr5, $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, 0, 0, 0, implicit $exec198 $vgpr3 = V_MOV_B32_e32 0, implicit $exec199 BUFFER_STORE_DWORDX4_OFFSET $vgpr2_vgpr3_vgpr4_vgpr5, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec200 $vgpr3 = V_MOV_B32_e32 0, implicit $exec201 BUFFER_STORE_FORMAT_XYZ_OFFSET $vgpr2_vgpr3_vgpr4, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec202 $vgpr3 = V_MOV_B32_e32 0, implicit $exec203 BUFFER_STORE_FORMAT_XYZW_OFFSET $vgpr2_vgpr3_vgpr4_vgpr5, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec204 $vgpr3 = V_MOV_B32_e32 0, implicit $exec205 BUFFER_ATOMIC_CMPSWAP_X2_OFFSET $vgpr2_vgpr3_vgpr4_vgpr5, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, implicit $exec206 $vgpr3 = V_MOV_B32_e32 0, implicit $exec207 S_BRANCH %bb.1208 209 bb.1:210 FLAT_STORE_DWORDX2 $vgpr0_vgpr1, $vgpr2_vgpr3, 0, 0, implicit $exec, implicit $flat_scr211 $vgpr3 = V_MOV_B32_e32 0, implicit $exec212 FLAT_STORE_DWORDX3 $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4, 0, 0, implicit $exec, implicit $flat_scr213 $vgpr3 = V_MOV_B32_e32 0, implicit $exec214 FLAT_STORE_DWORDX4 $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr215 $vgpr3 = V_MOV_B32_e32 0, implicit $exec216 FLAT_ATOMIC_CMPSWAP_X2 $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr217 $vgpr3 = V_MOV_B32_e32 0, implicit $exec218 FLAT_ATOMIC_FCMPSWAP_X2 $vgpr0_vgpr1, $vgpr2_vgpr3_vgpr4_vgpr5, 0, 0, implicit $exec, implicit $flat_scr219 $vgpr3 = V_MOV_B32_e32 0, implicit $exec220 S_ENDPGM 0221 222...223 224...225---226 227# GCN-LABEL: name: readwrite_lane228 229# GCN-LABEL: bb.0:230# GCN: V_ADD_CO_U32231# GCN: S_NOP 3232# GCN: V_READLANE_B32233 234# GCN-LABEL: bb.1:235# GCN: V_ADD_CO_U32236# GCN: S_NOP 3237# GCN: V_WRITELANE_B32238 239# GCN-LABEL: bb.2:240# GCN: V_ADD_CO_U32241# GCN: S_NOP 3242# GCN: V_READLANE_B32243 244# GCN-LABEL: bb.3:245# GCN: V_ADD_CO_U32246# GCN: S_NOP 3247# GCN: V_WRITELANE_B32248 249name: readwrite_lane250 251body: |252 bb.0:253 $vgpr0,$sgpr0_sgpr1 = V_ADD_CO_U32_e64 $vgpr1, $vgpr2, implicit $vcc, 0, implicit $exec254 $sgpr4 = V_READLANE_B32 $vgpr4, $sgpr0255 S_BRANCH %bb.1256 257 bb.1:258 $vgpr0,$sgpr0_sgpr1 = V_ADD_CO_U32_e64 $vgpr1, $vgpr2, implicit $vcc, 0, implicit $exec259 $vgpr4 = V_WRITELANE_B32 $sgpr0, $sgpr0, $vgpr4260 S_BRANCH %bb.2261 262 bb.2:263 $vgpr0,implicit $vcc = V_ADD_CO_U32_e32 $vgpr1, $vgpr2, implicit $vcc, implicit $exec264 $sgpr4 = V_READLANE_B32 $vgpr4, $vcc_lo265 S_BRANCH %bb.3266 267 bb.3:268 $m0 = S_MOV_B32 $sgpr4269 $vgpr0,implicit $vcc = V_ADD_CO_U32_e32 $vgpr1, $vgpr2, implicit $vcc, implicit $exec270 $vgpr4 = V_WRITELANE_B32 $m0, $vcc_lo, $vgpr4271 S_ENDPGM 0272 273...274 275...276---277 278# GCN-LABEL: name: rfe279 280# GCN-LABEL: bb.0:281# GCN: S_SETREG282# VI: S_NOP283# GCN-NEXT: S_RFE_B64284 285# GCN-LABEL: bb.1:286# GCN: S_SETREG287# GCN-NEXT: S_RFE_B64288 289name: rfe290 291body: |292 bb.0:293 S_SETREG_B32 $sgpr0, 3, implicit-def $mode, implicit $mode294 S_RFE_B64 $sgpr2_sgpr3295 S_BRANCH %bb.1296 297 bb.1:298 S_SETREG_B32 $sgpr0, 0, implicit-def $mode, implicit $mode299 S_RFE_B64 $sgpr2_sgpr3300 S_ENDPGM 0301 302...303 304...305---306 307# GCN-LABEL: name: s_movrel308 309# GCN-LABEL: bb.0:310# GCN: S_MOV_B32311# GFX9: S_NOP312# GCN-NEXT: S_MOVRELS_B32313 314# GCN-LABEL: bb.1:315# GCN: S_MOV_B32316# GFX9: S_NOP317# GCN-NEXT: S_MOVRELS_B64318 319# GCN-LABEL: bb.2:320# GCN: S_MOV_B32321# GFX9: S_NOP322# GCN-NEXT: S_MOVRELD_B32323 324# GCN-LABEL: bb.3:325# GCN: S_MOV_B32326# GFX9: S_NOP327# GCN-NEXT: S_MOVRELD_B64328 329name: s_movrel330 331body: |332 bb.0:333 $m0 = S_MOV_B32 0334 $sgpr0 = S_MOVRELS_B32 $sgpr0, implicit $m0335 S_BRANCH %bb.1336 337 bb.1:338 $m0 = S_MOV_B32 0339 $sgpr0_sgpr1 = S_MOVRELS_B64 $sgpr0_sgpr1, implicit $m0340 S_BRANCH %bb.2341 342 bb.2:343 $m0 = S_MOV_B32 0344 S_MOVRELD_B32 $sgpr0, $sgpr0, implicit $m0345 S_BRANCH %bb.3346 347 bb.3:348 $m0 = S_MOV_B32 0349 S_MOVRELD_B64 $sgpr0_sgpr1, $sgpr0_sgpr1, implicit $m0350 S_ENDPGM 0351...352 353...354---355 356# GCN-LABEL: name: v_interp357 358# GCN-LABEL: bb.0:359# GCN: S_MOV_B32360# GFX9-NEXT: S_NOP361# GCN-NEXT: V_INTERP_P1_F32362 363# GCN-LABEL: bb.1:364# GCN: S_MOV_B32365# GFX9-NEXT: S_NOP366# GCN-NEXT: V_INTERP_P2_F32367 368# GCN-LABEL: bb.2:369# GCN: S_MOV_B32370# GFX9-NEXT: S_NOP371# GCN-NEXT: V_INTERP_P1_F32_16bank372 373# GCN-LABEL: bb.3:374# GCN: S_MOV_B32375# GFX9-NEXT: S_NOP376# GCN-NEXT: V_INTERP_MOV_F32377 378name: v_interp379 380body: |381 bb.0:382 $m0 = S_MOV_B32 0383 $vgpr0 = V_INTERP_P1_F32 $vgpr0, 0, 0, implicit $mode, implicit $m0, implicit $exec384 S_BRANCH %bb.1385 386 bb.1:387 $m0 = S_MOV_B32 0388 $vgpr0 = V_INTERP_P2_F32 $vgpr0, $vgpr1, 0, 0, implicit $mode, implicit $m0, implicit $exec389 S_BRANCH %bb.2390 391 bb.2:392 $m0 = S_MOV_B32 0393 $vgpr0 = V_INTERP_P1_F32_16bank $vgpr0, 0, 0, implicit $mode, implicit $m0, implicit $exec394 S_BRANCH %bb.3395 396 bb.3:397 $m0 = S_MOV_B32 0398 $vgpr0 = V_INTERP_MOV_F32 0, 0, 0, implicit $mode, implicit $m0, implicit $exec399 S_ENDPGM 0400...401 402...403---404 405# GCN-LABEL: name: dpp406 407# VI-LABEL: bb.0:408# VI: V_MOV_B32_e32409# VI-NEXT: S_NOP 1410# VI-NEXT: V_MOV_B32_dpp411 412# VI-LABEL: bb.1:413# VI: V_CMPX_EQ_I32_e32414# VI-NEXT: S_NOP 4415# VI-NEXT: V_MOV_B32_dpp416 417name: dpp418 419body: |420 bb.0:421 $vgpr0 = V_MOV_B32_e32 0, implicit $exec422 $vgpr1 = V_MOV_B32_dpp $vgpr1, $vgpr0, 0, 15, 15, 0, implicit $exec423 S_BRANCH %bb.1424 425 bb.1:426 implicit $exec, implicit $vcc = V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit $exec427 $vgpr3 = V_MOV_B32_dpp $vgpr3, $vgpr0, 0, 15, 15, 0, implicit $exec428 S_ENDPGM 0429...430