diff --git a/llvm/test/CodeGen/AMDGPU/hazards-gfx950.mir b/llvm/test/CodeGen/AMDGPU/hazards-gfx950.mir index 6a25e346c8944..e2ee117bdd5c2 100644 --- a/llvm/test/CodeGen/AMDGPU/hazards-gfx950.mir +++ b/llvm/test/CodeGen/AMDGPU/hazards-gfx950.mir @@ -1,121 +1,140 @@ +# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py # RUN: llc -mtriple=amdgcn -mcpu=gfx950 -verify-machineinstrs -run-pass=post-RA-hazard-rec %s -o - | FileCheck -check-prefix=GCN %s --- -# GCN-LABEL: name: vcmpx_vopc_write_exec_permlane16_swap_vop1 -# GCN: V_CMPX_EQ_I32_e32 -# GCN-NEXT: S_NOP 3 -# GCN-NEXT: V_PERMLANE name: vcmpx_vopc_write_exec_permlane16_swap_vop1 body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vopc_write_exec_permlane16_swap_vop1 + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec + ; GCN-NEXT: S_NOP 3 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_vop3_write_exec_permlane16_swap_vop1 -# GCN: V_CMPX_EQ_I32_e64 -# GCN-NEXT: S_NOP 3 -# GCN-NEXT: V_PERMLANE name: vcmpx_vop3_write_exec_permlane16_swap_vop1 body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vop3_write_exec_permlane16_swap_vop1 + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $exec = V_CMPX_EQ_I32_e64 $vgpr0, $vgpr1, implicit $exec + ; GCN-NEXT: S_NOP 3 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $exec = V_CMPX_EQ_I32_e64 $vgpr0, $vgpr1, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_vopc_write_exec_permlane16_swap_vop3 -# GCN: V_CMPX_EQ_I32_e32 -# GCN-NEXT: S_NOP 3 -# GCN-NEXT: V_PERMLANE name: vcmpx_vopc_write_exec_permlane16_swap_vop3 body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vopc_write_exec_permlane16_swap_vop3 + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec + ; GCN-NEXT: S_NOP 3 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_vop3_write_exec_permlane16_swap_vop3 -# GCN: V_CMPX_EQ_I32_e64 -# GCN-NEXT: S_NOP 3 -# GCN-NEXT: V_PERMLANE name: vcmpx_vop3_write_exec_permlane16_swap_vop3 body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vop3_write_exec_permlane16_swap_vop3 + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $exec = V_CMPX_EQ_I32_e64 $vgpr0, $vgpr1, implicit $exec + ; GCN-NEXT: S_NOP 3 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec $exec = V_CMPX_EQ_I32_e64 $vgpr0, $vgpr1, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_vopc_write_exec_permlane32_swap_vop1 -# GCN: V_CMPX_EQ_I32_e32 -# GCN-NEXT: S_NOP 3 -# GCN-NEXT: V_PERMLANE name: vcmpx_vopc_write_exec_permlane32_swap_vop1 body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vopc_write_exec_permlane32_swap_vop1 + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec + ; GCN-NEXT: S_NOP 3 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_vop3_write_exec_permlane32_swap_vop1 -# GCN: V_CMPX_EQ_I32_e64 -# GCN-NEXT: S_NOP 3 -# GCN-NEXT: V_PERMLANE name: vcmpx_vop3_write_exec_permlane32_swap_vop1 body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vop3_write_exec_permlane32_swap_vop1 + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $exec = V_CMPX_EQ_I32_e64 $vgpr0, $vgpr1, implicit $exec + ; GCN-NEXT: S_NOP 3 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $exec = V_CMPX_EQ_I32_e64 $vgpr0, $vgpr1, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_vopc_write_exec_permlane32_swap_vop3 -# GCN: V_CMPX_EQ_I32_e32 -# GCN-NEXT: S_NOP 3 -# GCN-NEXT: V_PERMLANE name: vcmpx_vopc_write_exec_permlane32_swap_vop3 body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vopc_write_exec_permlane32_swap_vop3 + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec + ; GCN-NEXT: S_NOP 3 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_vop3_write_exec_permlane32_swap_vop3 -# GCN: V_CMPX_EQ_I32_e64 -# GCN-NEXT: S_NOP 3 -# GCN-NEXT: V_PERMLANE name: vcmpx_vop3_write_exec_permlane32_swap_vop3 body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vop3_write_exec_permlane32_swap_vop3 + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $exec = V_CMPX_EQ_I32_e64 $vgpr0, $vgpr1, implicit $exec + ; GCN-NEXT: S_NOP 3 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec $exec = V_CMPX_EQ_I32_e64 $vgpr0, $vgpr1, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_vopc_write_exec_permlane16_swap_vop1__nowait -# GCN: V_CMPX_EQ_I32_e32 -# GCN-NEXT: V_MOV_B32 -# GCN-NEXT: V_MOV_B32 -# GCN-NEXT: V_MOV_B32 -# GCN-NEXT: V_MOV_B32 -# GCN-NEXT: V_PERMLANE name: vcmpx_vopc_write_exec_permlane16_swap_vop1__nowait body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vopc_write_exec_permlane16_swap_vop1__nowait + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec + ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: $vgpr4 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: $vgpr5 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec $vgpr2 = V_MOV_B32_e32 0, implicit $exec $vgpr3 = V_MOV_B32_e32 0, implicit $exec @@ -125,17 +144,19 @@ body: | ... --- -# GCN-LABEL: name: vcmpx_vopc_write_exec_permlane16_swap_vop1__wait1 -# GCN: V_CMPX_EQ_I32_e32 -# GCN-NEXT: V_MOV_B32 -# GCN-NEXT: V_MOV_B32 -# GCN-NEXT: V_MOV_B32 -# GCN-NEXT: S_NOP 0 -# GCN-NEXT: V_PERMLANE name: vcmpx_vopc_write_exec_permlane16_swap_vop1__wait1 body: | bb.0: liveins: $vgpr0, $vgpr1 + ; GCN-LABEL: name: vcmpx_vopc_write_exec_permlane16_swap_vop1__wait1 + ; GCN: liveins: $vgpr0, $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec + ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: $vgpr3 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: $vgpr4 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec V_CMPX_EQ_I32_e32 $vgpr0, $vgpr1, implicit-def $exec, implicit-def $vcc, implicit $exec $vgpr2 = V_MOV_B32_e32 0, implicit $exec $vgpr3 = V_MOV_B32_e32 0, implicit $exec @@ -144,112 +165,128 @@ body: | ... --- -# GCN-LABEL: name: valu_write_vdst_read_permlane16_swap_0 -# GCN: V_MOV_B32 -# GCN-NEXT: S_NOP 1 -# GCN-NEXT: V_PERMLANE name: valu_write_vdst_read_permlane16_swap_0 body: | bb.0: liveins: $vgpr1 + ; GCN-LABEL: name: valu_write_vdst_read_permlane16_swap_0 + ; GCN: liveins: $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: S_NOP 1 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec $vgpr0 = V_MOV_B32_e32 0, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec ... --- -# GCN-LABEL: name: valu_write_vdst_read_permlane16_swap_1 -# GCN: V_MOV_B32 -# GCN-NEXT: S_NOP 1 -# GCN-NEXT: V_PERMLANE name: valu_write_vdst_read_permlane16_swap_1 body: | bb.0: liveins: $vgpr0 + ; GCN-LABEL: name: valu_write_vdst_read_permlane16_swap_1 + ; GCN: liveins: $vgpr0 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: S_NOP 1 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec $vgpr1 = V_MOV_B32_e32 0, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec ... --- -# GCN-LABEL: name: valu_write_vdst_read_permlane32_swap_0 -# GCN: V_MOV_B32 -# GCN-NEXT: S_NOP 1 -# GCN-NEXT: V_PERMLANE name: valu_write_vdst_read_permlane32_swap_0 body: | bb.0: liveins: $vgpr1 + ; GCN-LABEL: name: valu_write_vdst_read_permlane32_swap_0 + ; GCN: liveins: $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: S_NOP 1 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec $vgpr0 = V_MOV_B32_e32 0, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec ... --- -# GCN-LABEL: name: valu_write_vdst_read_permlane32_swap_1 -# GCN: V_MOV_B32 -# GCN-NEXT: S_NOP 1 -# GCN-NEXT: V_PERMLANE name: valu_write_vdst_read_permlane32_swap_1 body: | bb.0: liveins: $vgpr0 + ; GCN-LABEL: name: valu_write_vdst_read_permlane32_swap_1 + ; GCN: liveins: $vgpr0 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: S_NOP 1 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec $vgpr1 = V_MOV_B32_e32 0, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec ... --- # No hazard, write of other register -# GCN-LABEL: name: valu_write_vdst_read_permlane16_swap_0_otherreg -# GCN: V_MOV_B32 -# GCN-NEXT: V_PERMLANE name: valu_write_vdst_read_permlane16_swap_0_otherreg body: | bb.0: liveins: $vgpr1 + ; GCN-LABEL: name: valu_write_vdst_read_permlane16_swap_0_otherreg + ; GCN: liveins: $vgpr1 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $vgpr2 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec $vgpr2 = V_MOV_B32_e32 0, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE16_SWAP_B32_e64 killed $vgpr0, killed $vgpr1, -1, 1, implicit $exec ... --- # Both permlane hazards at once. -# GCN-LABEL: name: valu_writes_vdst__vcmpx_write_exec__permlane32_swap -# GCN: V_MOV_B32 -# GCN: V_CMPX_EQ_I32 -# GCN-NEXT: S_NOP 3 -# GCN-NEXT: V_PERMLANE name: valu_writes_vdst__vcmpx_write_exec__permlane32_swap body: | bb.0: liveins: $vgpr0, $vgpr2, $vgpr3 + ; GCN-LABEL: name: valu_writes_vdst__vcmpx_write_exec__permlane32_swap + ; GCN: liveins: $vgpr0, $vgpr2, $vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: $exec = V_CMPX_EQ_I32_e64 $vgpr2, $vgpr3, implicit $exec + ; GCN-NEXT: S_NOP 3 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $vgpr1 = V_MOV_B32_e32 0, implicit $exec $exec = V_CMPX_EQ_I32_e64 $vgpr2, $vgpr3, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_write_exec__valu_writes_vdst___permlane32_swap -# GCN: V_CMPX_EQ_I32 -# GCN: V_MOV_B32 -# GCN-NEXT: S_NOP 2 -# GCN-NEXT: V_PERMLANE name: vcmpx_write_exec__valu_writes_vdst___permlane32_swap body: | bb.0: liveins: $vgpr0, $vgpr2, $vgpr3 + ; GCN-LABEL: name: vcmpx_write_exec__valu_writes_vdst___permlane32_swap + ; GCN: liveins: $vgpr0, $vgpr2, $vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $exec = V_CMPX_EQ_I32_e64 $vgpr2, $vgpr3, implicit $exec + ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: S_NOP 2 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $exec = V_CMPX_EQ_I32_e64 $vgpr2, $vgpr3, implicit $exec $vgpr1 = V_MOV_B32_e32 0, implicit $exec renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec ... --- -# GCN-LABEL: name: vcmpx_write_exec__valu_writes_vdstx2___permlane32_swap -# GCN: V_CMPX_EQ_I32 -# GCN: V_MOV_B32 -# GCN: V_MOV_B32 -# GCN-NEXT: S_NOP 1 -# GCN-NEXT: V_PERMLANE name: vcmpx_write_exec__valu_writes_vdstx2___permlane32_swap body: | bb.0: liveins: $vgpr0, $vgpr2, $vgpr3 + ; GCN-LABEL: name: vcmpx_write_exec__valu_writes_vdstx2___permlane32_swap + ; GCN: liveins: $vgpr0, $vgpr2, $vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: $exec = V_CMPX_EQ_I32_e64 $vgpr2, $vgpr3, implicit $exec + ; GCN-NEXT: $vgpr1 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: $vgpr0 = V_MOV_B32_e32 0, implicit $exec + ; GCN-NEXT: S_NOP 1 + ; GCN-NEXT: renamable $vgpr0, renamable $vgpr1 = V_PERMLANE32_SWAP_B32_e32 killed $vgpr0, killed $vgpr1, implicit $exec $exec = V_CMPX_EQ_I32_e64 $vgpr2, $vgpr3, implicit $exec $vgpr1 = V_MOV_B32_e32 0, implicit $exec $vgpr0 = V_MOV_B32_e32 0, implicit $exec @@ -258,13 +295,18 @@ body: | --- -# GCN-LABEL: name: test_cvt_scalef32_sr_fp8_bf16_hazard -# GCN: V_CVT_SCALEF32_SR_FP8_BF16_e64 -# GCN: GLOBAL_STORE_DWORD name: test_cvt_scalef32_sr_fp8_bf16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_cvt_scalef32_sr_fp8_bf16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: renamable $vgpr5 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: renamable $vgpr5 = V_CVT_SCALEF32_SR_FP8_BF16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr5, 0, implicit $mode, implicit $exec + ; GCN-NEXT: GLOBAL_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr5, 0, 0, implicit $exec + ; GCN-NEXT: S_ENDPGM 0 renamable $vgpr5 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 renamable $vgpr5 = V_CVT_SCALEF32_SR_FP8_BF16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr5, 0, implicit $mode, implicit $exec @@ -273,13 +315,18 @@ body: | ... --- -# GCN-LABEL: name: test_cvt_scalef32_sr_fp8_f16_hazard -# GCN: V_CVT_SCALEF32_SR_FP8_F16_e64 -# GCN: GLOBAL_STORE_DWORD name: test_cvt_scalef32_sr_fp8_f16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_cvt_scalef32_sr_fp8_f16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: renamable $vgpr5 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: renamable $vgpr5 = V_CVT_SCALEF32_SR_FP8_F16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr5, 0, implicit $mode, implicit $exec + ; GCN-NEXT: GLOBAL_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr5, 0, 0, implicit $exec + ; GCN-NEXT: S_ENDPGM 0 renamable $vgpr5 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 renamable $vgpr5 = V_CVT_SCALEF32_SR_FP8_F16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr5, 0, implicit $mode, implicit $exec @@ -288,14 +335,20 @@ body: | ... --- -# GCN-LABEL: name: test_cvt_scalef32_sr_fp8_f32_hazard -# GCN: V_CVT_SCALEF32_SR_FP8_F32_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_cvt_scalef32_sr_fp8_f32_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_cvt_scalef32_sr_fp8_f32_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: renamable $vgpr5 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: renamable $vgpr5 = V_CVT_SCALEF32_SR_FP8_F32_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr5, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr2 = V_ADD_U32_e32 4, killed $vgpr5, implicit $exec + ; GCN-NEXT: GLOBAL_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, implicit $exec + ; GCN-NEXT: S_ENDPGM 0 renamable $vgpr5 = GLOBAL_LOAD_DWORD renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 renamable $vgpr5 = V_CVT_SCALEF32_SR_FP8_F32_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr5, 0, implicit $mode, implicit $exec @@ -305,14 +358,20 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_pk_fp8_f32_hazard -# GCN: V_CVT_SCALEF32_PK_FP8_F32_e64 -# GCN: S_NOP 0 -# GCN: V_PK_ADD_U16 name: test_cvt_scalef32_pk_fp8_f32_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-LABEL: name: test_cvt_scalef32_pk_fp8_f32_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr1 = V_AND_B32_e32 2147483647, killed $vgpr1, implicit $exec + ; GCN-NEXT: renamable $vgpr2 = V_XOR_B32_e32 -2147483648, killed $vgpr2, implicit $exec + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_PK_FP8_F32_e64 8, killed $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_PK_ADD_U16 8, killed $vgpr0, 8, $vgpr0, 0, 0, 0, 0, 0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr1 = V_AND_B32_e32 2147483647, killed $vgpr1, implicit $exec renamable $vgpr2 = V_XOR_B32_e32 -2147483648, killed $vgpr2, implicit $exec @@ -322,14 +381,18 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_pk_fp8_f16_hazard -# GCN: V_CVT_SCALEF32_PK_FP8_F16_e64 -# GCN: S_NOP 0 -# GCN: V_PK_ADD_U16 name: test_cvt_scalef32_pk_fp8_f16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-LABEL: name: test_cvt_scalef32_pk_fp8_f16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_PK_FP8_F16_e64 8, killed $vgpr1, 0, killed $vgpr2, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_PK_ADD_U16 8, killed $vgpr0, 8, $vgpr0, 0, 0, 0, 0, 0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = V_CVT_SCALEF32_PK_FP8_F16_e64 8, killed $vgpr1, 0, killed $vgpr2, killed $vgpr0, 0, implicit $mode, implicit $exec renamable $vgpr0 = V_PK_ADD_U16 8, killed $vgpr0, 8, $vgpr0, 0, 0, 0, 0, 0, implicit $exec @@ -337,14 +400,20 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_pk_fp8_bf16_hazard -# GCN: V_CVT_SCALEF32_SR_BF8_BF16_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_cvt_scalef32_pk_fp8_bf16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_cvt_scalef32_pk_fp8_bf16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_SR_BF8_BF16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr0, $vgpr0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 @@ -354,14 +423,20 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_sr_bf8_f16_hazard -# GCN: V_CVT_SCALEF32_SR_BF8_F16_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_cvt_scalef32_sr_bf8_f16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_cvt_scalef32_sr_bf8_f16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_SR_BF8_F16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr0, $vgpr0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 @@ -371,14 +446,20 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_sr_bf8_f32_hazard -# GCN: V_CVT_SCALEF32_SR_BF8_F32_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_cvt_scalef32_sr_bf8_f32_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_cvt_scalef32_sr_bf8_f32_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_SR_BF8_F32_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr0, $vgpr0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 @@ -388,14 +469,20 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_pk_bf8_f32_hazard -# GCN: V_CVT_SCALEF32_PK_BF8_F32_e64 -# GCN: S_NOP 0 -# GCN: V_PK_ADD_U16 name: test_cvt_scalef32_pk_bf8_f32_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-LABEL: name: test_cvt_scalef32_pk_bf8_f32_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr1 = V_AND_B32_e32 2147483647, killed $vgpr1, implicit $exec + ; GCN-NEXT: renamable $vgpr2 = V_XOR_B32_e32 -2147483648, killed $vgpr2, implicit $exec + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_PK_BF8_F32_e64 8, killed $vgpr1, 0, killed $vgpr2, 0, killed $vgpr3, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_PK_ADD_U16 8, killed $vgpr0, 8, $vgpr0, 0, 0, 0, 0, 0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr1 = V_AND_B32_e32 2147483647, killed $vgpr1, implicit $exec renamable $vgpr2 = V_XOR_B32_e32 -2147483648, killed $vgpr2, implicit $exec @@ -405,14 +492,18 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_pk_bf8_f16_hazard -# GCN: V_CVT_SCALEF32_PK_BF8_F16_e64 -# GCN: S_NOP 0 -# GCN: V_PK_ADD_U16 name: test_cvt_scalef32_pk_bf8_f16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-LABEL: name: test_cvt_scalef32_pk_bf8_f16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_PK_BF8_F16_e64 8, killed $vgpr1, 0, killed $vgpr2, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_PK_ADD_U16 8, killed $vgpr0, 8, $vgpr0, 0, 0, 0, 0, 0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = V_CVT_SCALEF32_PK_BF8_F16_e64 8, killed $vgpr1, 0, killed $vgpr2, killed $vgpr0, 0, implicit $mode, implicit $exec renamable $vgpr0 = V_PK_ADD_U16 8, killed $vgpr0, 8, $vgpr0, 0, 0, 0, 0, 0, implicit $exec @@ -420,14 +511,18 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_pk_bf8_bf16_hazard -# GCN: V_CVT_SCALEF32_PK_BF8_BF16_e64 -# GCN: S_NOP 0 -# GCN: V_PK_ADD_U16 name: test_cvt_scalef32_pk_bf8_bf16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-LABEL: name: test_cvt_scalef32_pk_bf8_bf16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_PK_BF8_BF16_e64 8, killed $vgpr1, 0, killed $vgpr2, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_PK_ADD_U16 8, killed $vgpr0, 8, $vgpr0, 0, 0, 0, 0, 0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = V_CVT_SCALEF32_PK_BF8_BF16_e64 8, killed $vgpr1, 0, killed $vgpr2, killed $vgpr0, 0, implicit $mode, implicit $exec renamable $vgpr0 = V_PK_ADD_U16 8, killed $vgpr0, 8, $vgpr0, 0, 0, 0, 0, 0, implicit $exec @@ -435,14 +530,20 @@ body: | ... --- -# GCN-LABEL: test_cvt_scale_fp4_f32_hazard -# GCN: V_CVT_SCALEF32_PK_FP4_F32_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_cvt_scale_fp4_f32_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-LABEL: name: test_cvt_scale_fp4_f32_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr1 = V_AND_B32_e32 2147483647, killed $vgpr1, implicit $exec + ; GCN-NEXT: renamable $vgpr2 = V_XOR_B32_e32 -2147483648, killed $vgpr2, implicit $exec + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_PK_FP4_F32_e64 8, killed $vgpr1, 0, killed $vgpr2, 4, killed $vgpr3, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr0, $vgpr0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr1 = V_AND_B32_e32 2147483647, killed $vgpr1, implicit $exec renamable $vgpr2 = V_XOR_B32_e32 -2147483648, killed $vgpr2, implicit $exec @@ -452,14 +553,20 @@ body: | ... --- -# GCN-LABEL: test_scalef32_sr_pk_fp4_f16_hazard -# GCN: V_CVT_SCALEF32_SR_PK_FP4_F16_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_scalef32_sr_pk_fp4_f16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_scalef32_sr_pk_fp4_f16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: early-clobber renamable $vgpr1 = V_CVT_SCALEF32_SR_PK_FP4_F16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr1, $vgpr1, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 @@ -469,14 +576,20 @@ body: | ... --- -# GCN-LABEL: test_scalef32_sr_pk_fp4_bf16_hazard -# GCN: V_CVT_SCALEF32_SR_PK_FP4_BF16_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_scalef32_sr_pk_fp4_bf16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_scalef32_sr_pk_fp4_bf16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: early-clobber renamable $vgpr1 = V_CVT_SCALEF32_SR_PK_FP4_BF16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr1, $vgpr1, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 @@ -486,14 +599,20 @@ body: | ... --- -# GCN-LABEL: test_scalef32_sr_pk_fp4_f32_hazard -# GCN: V_CVT_SCALEF32_SR_PK_FP4_F32_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_scalef32_sr_pk_fp4_f32_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5 + ; GCN-LABEL: name: test_scalef32_sr_pk_fp4_f32_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: early-clobber renamable $vgpr1 = V_CVT_SCALEF32_SR_PK_FP4_F32_e64 8, killed $vgpr2_vgpr3, 0, killed $vgpr4, 4, killed $vgpr5, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr1, $vgpr1, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 @@ -503,14 +622,18 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_fp4_f16_hazard -# GCN: V_CVT_SCALEF32_PK_FP4_F16_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_cvt_scalef32_fp4_f16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-LABEL: name: test_cvt_scalef32_fp4_f16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, killed $vgpr0, 0, killed $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr2, $vgpr2, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, killed $vgpr0, 0, killed $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr2, $vgpr2, implicit $exec @@ -518,14 +641,18 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_fp4_bf16_hazard -# GCN: V_CVT_SCALEF32_PK_FP4_BF16_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_cvt_scalef32_fp4_bf16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-LABEL: name: test_cvt_scalef32_fp4_bf16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_BF16_e64 8, killed $vgpr0, 0, killed $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr2, $vgpr2, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_BF16_e64 8, killed $vgpr0, 0, killed $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr2, $vgpr2, implicit $exec @@ -533,14 +660,21 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_hazard_skipping_over_meta_instr -# GCN: V_CVT_SCALEF32_SR_BF8_F16_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_cvt_scalef32_hazard_skipping_over_meta_instr body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_cvt_scalef32_hazard_skipping_over_meta_instr + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_SR_BF8_F16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: $vgpr4 = KILL + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr0, $vgpr0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 @@ -551,15 +685,18 @@ body: | ... --- -# GCN-LABEL: test_cvt_f16_to_fp4_to_f16_hazard -# GCN: V_CVT_SCALEF32_PK_FP4_F16_e64 -# GCN: S_NOP 0 -# GCN: V_CVT_SCALEF32_PK_F16_FP4_e64 -# GCN: S_SETPC_B64_return name: test_cvt_f16_to_fp4_to_f16_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-LABEL: name: test_cvt_f16_to_fp4_to_f16_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, killed $vgpr0, 0, $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_PK_F16_FP4_e64 4, killed $vgpr2, 0, killed $vgpr1, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, killed $vgpr0, 0, $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec renamable $vgpr0 = V_CVT_SCALEF32_PK_F16_FP4_e64 4, killed $vgpr2, 0, killed $vgpr1, 0, implicit $mode, implicit $exec @@ -567,14 +704,21 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_hazard_pseudo -# GCN: V_CVT_SCALEF32_SR_BF8_F16_e64 -# GCN: S_NOP 0 -# GCN: V_ADD_U32_e32 name: test_cvt_scalef32_hazard_pseudo body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-LABEL: name: test_cvt_scalef32_hazard_pseudo + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec + ; GCN-NEXT: S_WAITCNT 3952 + ; GCN-NEXT: renamable $vgpr0 = V_CVT_SCALEF32_SR_BF8_F16_e64 8, killed $vgpr2, 0, killed $vgpr3, 4, killed $vgpr4, killed $vgpr0, 0, implicit $mode, implicit $exec + ; GCN-NEXT: WAVE_BARRIER + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: renamable $vgpr0 = V_ADD_U32_e32 killed $vgpr0, $vgpr0, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr0 = GLOBAL_LOAD_DWORD killed renamable $vgpr0_vgpr1, 0, 0, implicit $exec S_WAITCNT 3952 @@ -585,13 +729,22 @@ body: | ... --- -# GCN-LABEL: test_call_consuming_cvt_scalef32_hazard -# GCN: V_CVT_SCALEF32_PK_FP4_F16_e64 -# GCN: SI_CALL name: test_call_consuming_cvt_scalef32_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-LABEL: name: test_call_consuming_cvt_scalef32_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: BUNDLE implicit-def $sgpr0_sgpr1, implicit-def $sgpr0, implicit-def $sgpr0_lo16, implicit-def $sgpr0_hi16, implicit-def $sgpr1, implicit-def $sgpr1_lo16, implicit-def $sgpr1_hi16, implicit-def $scc { + ; GCN-NEXT: $sgpr0_sgpr1 = S_GETPC_B64 + ; GCN-NEXT: $sgpr0 = S_ADD_U32 internal $sgpr0, target-flags(amdgpu-gotprel32-lo) @test_cvt_scalef32_hazard_pseudo + 4, implicit-def $scc + ; GCN-NEXT: $sgpr1 = S_ADDC_U32 internal $sgpr1, target-flags(amdgpu-gotprel32-hi) @test_cvt_scalef32_hazard_pseudo + 12, implicit-def $scc, implicit internal $scc + ; GCN-NEXT: } + ; GCN-NEXT: renamable $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed renamable $sgpr0_sgpr1, 0, 0 + ; GCN-NEXT: renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, killed $vgpr0, 0, killed $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec + ; GCN-NEXT: dead $sgpr30_sgpr31 = SI_CALL killed renamable $sgpr0_sgpr1, @test_cvt_scalef32_hazard_pseudo, csr_amdgpu_gfx90ainsts, implicit undef $sgpr4_sgpr5, implicit undef $sgpr6_sgpr7, implicit killed $sgpr8_sgpr9, implicit undef $sgpr10_sgpr11, implicit undef $sgpr12, implicit undef $sgpr13, implicit undef $sgpr14, implicit-def $sgpr15, implicit undef $vgpr31, implicit killed $vgpr2, implicit-def $vgpr2 + ; GCN-NEXT: SI_RETURN_TO_EPILOG killed $vgpr0 BUNDLE implicit-def $sgpr0_sgpr1, implicit-def $sgpr0, implicit-def $sgpr0_lo16, implicit-def $sgpr0_hi16, implicit-def $sgpr1, implicit-def $sgpr1_lo16, implicit-def $sgpr1_hi16, implicit-def $scc { $sgpr0_sgpr1 = S_GETPC_B64 $sgpr0 = S_ADD_U32 internal $sgpr0, target-flags(amdgpu-gotprel32-lo) @test_cvt_scalef32_hazard_pseudo + 4, implicit-def $scc @@ -604,14 +757,18 @@ body: | ... --- -# GCN-LABEL: test_cvt_scalef32_inlineasm_hazard -# GCN: V_CVT_SCALEF32_PK_FP4_F16_e64 -# GCN: S_NOP 0 -# GCN: INLINEASM name: test_cvt_scalef32_inlineasm_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-LABEL: name: test_cvt_scalef32_inlineasm_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, killed $vgpr0, 0, killed $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, killed renamable $vgpr2 + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31 S_WAITCNT 0 renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, killed $vgpr0, 0, killed $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec INLINEASM &"; use $0", 1 /* sideeffect attdialect */, 2228233 /* reguse:VGPR_32 */, killed renamable $vgpr2 @@ -619,16 +776,20 @@ body: | ... --- -# GCN-LABEL: test_cvt_scale_cvt_scale_hazard -# GCN: V_CVT_SCALEF32_PK_FP4_F16_e64 -# GCN: S_NOP 0 -# GCN: V_CVT_SCALEF32_SR_PK_FP4_F16_e64 -# GCN: S_NOP 0 -# GCN: S_SETPC_B64_return name: test_cvt_scale_cvt_scale_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-LABEL: name: test_cvt_scale_cvt_scale_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, $vgpr0, 0, $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: early-clobber renamable $vgpr4 = V_CVT_SCALEF32_SR_PK_FP4_F16_e64 8, killed $vgpr0, 0, killed $vgpr3, 4, killed $vgpr1, killed $vgpr2, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: $vgpr0 = V_MOV_B32_e32 killed $vgpr4, implicit $exec, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, $vgpr0, 0, $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec early-clobber renamable $vgpr4 = V_CVT_SCALEF32_SR_PK_FP4_F16_e64 8, killed $vgpr0, 0, killed $vgpr3, 4, killed $vgpr1, killed $vgpr2, 0, implicit $mode, implicit $exec @@ -637,15 +798,18 @@ body: | ... --- -# GCN-LABEL: test_cvt_scale_cvt_scale_waw_hazard -# GCN: V_CVT_SCALEF32_PK_FP4_F16_e64 -# GCN: S_NOP 0 -# GCN: V_CVT_SCALEF32_SR_PK_FP4_F16_e64 -# GCN: S_SETPC_B64_return name: test_cvt_scale_cvt_scale_waw_hazard body: | bb.0: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-LABEL: name: test_cvt_scale_cvt_scale_waw_hazard + ; GCN: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3 + ; GCN-NEXT: {{ $}} + ; GCN-NEXT: S_WAITCNT 0 + ; GCN-NEXT: renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, $vgpr0, 0, $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_NOP 0 + ; GCN-NEXT: early-clobber renamable $vgpr2 = V_CVT_SCALEF32_SR_PK_FP4_F16_e64 8, killed $vgpr0, 0, killed $vgpr3, 4, killed $vgpr1, killed $vgpr1, 0, implicit $mode, implicit $exec + ; GCN-NEXT: S_SETPC_B64_return undef $sgpr30_sgpr31, implicit killed $vgpr0 S_WAITCNT 0 renamable $vgpr2 = V_CVT_SCALEF32_PK_FP4_F16_e64 8, $vgpr0, 0, $vgpr1, 4, killed $vgpr2, 0, implicit $mode, implicit $exec early-clobber renamable $vgpr2 = V_CVT_SCALEF32_SR_PK_FP4_F16_e64 8, killed $vgpr0, 0, killed $vgpr3, 4, killed $vgpr1, killed $vgpr1, 0, implicit $mode, implicit $exec