<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/131298>131298</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
AMDGPU: Using an undefined physical register in testcase using compare over kill
</td>
</tr>
<tr>
<th>Labels</th>
<td>
backend:AMDGPU,
crash-on-valid
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
arsenm
</td>
</tr>
</table>
<pre>
This testcase, derived from llvm/test/CodeGen/AMDGPU/skip-if-dead.ll fails the verifier:
```
; RUN: llc -mtriple=amdgcn -mcpu=tahiti -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,WAVE64,SI %s
define amdgpu_ps void @phi_use_def_before_kill(float inreg %x, i32 inreg %y) #0 {
bb:
%tmp = fadd float %x, 1.000000e+00
%tmp1 = fcmp olt float 0.000000e+00, %tmp
%tmp2 = select i1 %tmp1, float -1.000000e+00, float 0.000000e+00
%cmp.tmp2 = fcmp olt float %tmp2, 0.000000e+00
%uniform.cond = icmp eq i32 %y, 0
call void @llvm.amdgcn.kill(i1 %cmp.tmp2)
br i1 %uniform.cond, label %phibb, label %bb8
phibb: ; preds = %bb8, %bb
%tmp5 = phi float [ %tmp2, %bb ], [ 4.000000e+00, %bb8 ]
%tmp6 = fcmp oeq float %tmp5, 0.000000e+00
br i1 %tmp6, label %bb10, label %end
bb8: ; preds = %bb
store volatile i32 8, ptr addrspace(1) poison, align 4
br label %phibb
bb10: ; preds = %phibb
store volatile i32 9, ptr addrspace(1) poison, align 4
br label %end
end: ; preds = %bb10, %phibb
ret void
}
declare void @llvm.amdgcn.exp.f32(i32 immarg, i32 immarg, float, float, float, float, i1 immarg, i1 immarg) #1
declare void @llvm.amdgcn.kill(i1) #2
declare void @llvm.amdgcn.s.setreg(i32 immarg, i32) #3
declare float @llvm.amdgcn.image.sample.l.2darray.f32.f32.v8i32.v4i32(i32 immarg, float, float, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #4
declare <4 x float> @llvm.amdgcn.image.sample.c.1d.v4f32.f32.v8i32.v4i32(i32 immarg, float, float, <8 x i32>, <4 x i32>, i1 immarg, i32 immarg, i32 immarg) #5
attributes #0 = { nounwind }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(inaccessiblemem: write) }
attributes #2 = { nocallback nofree nounwind }
attributes #3 = { nocallback nofree nosync nounwind willreturn }
attributes #4 = { nocallback nofree nosync nounwind willreturn memory(read) }
attributes #5 = { convergent nocallback nofree nosync nounwind willreturn memory(read) }
```
```
# After Instruction Selection
# Machine code for function phi_use_def_before_kill: IsSSA, TracksLiveness
Function Live Ins: $sgpr0 in %2, $sgpr1 in %3
bb.0.bb:
successors: %bb.5(0x80000000); %bb.5(100.00%)
liveins: $sgpr0, $sgpr1
%3:sgpr_32 = COPY $sgpr1
%2:sgpr_32 = COPY $sgpr0
%5:sgpr_32 = S_MOV_B32 1065353216
%7:vgpr_32 = COPY killed %5:sgpr_32
%6:vgpr_32 = nofpexcept V_ADD_F32_e64 0, %2:sgpr_32, 0, %7:vgpr_32, 0, 0, implicit $mode, implicit $exec
%8:sgpr_32 = S_MOV_B32 0
%9:sreg_64_xexec = nofpexcept V_CMP_GT_F32_e64 0, %6:vgpr_32, 0, %8:sgpr_32, 0, implicit $mode, implicit $exec
%10:sgpr_32 = S_MOV_B32 -1082130432
%12:vgpr_32 = COPY %8:sgpr_32
%13:vgpr_32 = COPY killed %10:sgpr_32
%11:vgpr_32 = V_CNDMASK_B32_e64 0, %12:vgpr_32, 0, %13:vgpr_32, killed %9:sreg_64_xexec, implicit $exec
%0:sgpr_32 = IMPLICIT_DEF
%14:sreg_32 = S_MOV_B32 0
S_CMP_LG_U32 %3:sgpr_32, killed %14:sreg_32, implicit-def $scc
SI_KILL_F32_COND_IMM_TERMINATOR %6:vgpr_32, 0, 2, implicit-def dead $vcc, implicit $exec
bb.5.bb:
; predecessors: %bb.0
successors: %bb.2(0x50000000), %bb.1(0x30000000); %bb.2(62.50%), %bb.1(37.50%)
S_CBRANCH_SCC1 %bb.2, implicit $scc
S_BRANCH %bb.1
bb.1.phibb:
; predecessors: %bb.2, %bb.5
successors: %bb.3(0x50000000), %bb.4(0x30000000); %bb.3(62.50%), %bb.4(37.50%)
%36:vgpr_32 = PHI %11:vgpr_32, %bb.5, %37:vgpr_32, %bb.2
%24:sgpr_32 = S_MOV_B32 0
%26:sgpr_32 = COPY killed %24:sgpr_32
%25:sreg_64 = nofpexcept V_CMP_EQ_F32_e64 0, %36:vgpr_32, 0, %26:sgpr_32, 0, implicit $mode, implicit $exec
%27:sreg_64 = S_AND_B64 $exec, killed %25:sreg_64, implicit-def dead $scc
$vcc = COPY %27:sreg_64
S_CBRANCH_VCCNZ %bb.3, implicit $vcc
S_BRANCH %bb.4
bb.2.bb8:
; predecessors: %bb.5
successors: %bb.1(0x80000000); %bb.1(100.00%)
%16:sreg_64 = IMPLICIT_DEF
%17:sreg_32 = COPY %16.sub1:sreg_64
%18:sreg_64 = IMPLICIT_DEF
%19:sreg_32 = COPY %18.sub0:sreg_64
%20:sreg_32 = S_MOV_B32 61440
%21:sreg_32 = S_MOV_B32 -1
%22:sgpr_128 = REG_SEQUENCE killed %19:sreg_32, %subreg.sub0, killed %17:sreg_32, %subreg.sub1, killed %21:sreg_32, %subreg.sub2, killed %20:sreg_32, %subreg.sub3
%23:vgpr_32 = V_MOV_B32_e32 8, implicit $exec
BUFFER_STORE_DWORD_OFFSET killed %23:vgpr_32, killed %22:sgpr_128, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) poison`, addrspace 1)
%15:sgpr_32 = S_MOV_B32 1082130432
%37:vgpr_32 = V_MOV_B32_e32 1082130432, implicit $exec
S_BRANCH %bb.1
bb.3.bb10:
; predecessors: %bb.1
successors: %bb.4(0x80000000); %bb.4(100.00%)
%28:sreg_64 = IMPLICIT_DEF
%29:sreg_32 = COPY %28.sub1:sreg_64
%30:sreg_64 = IMPLICIT_DEF
%31:sreg_32 = COPY %30.sub0:sreg_64
%32:sreg_32 = S_MOV_B32 61440
%33:sreg_32 = S_MOV_B32 -1
%34:sgpr_128 = REG_SEQUENCE killed %31:sreg_32, %subreg.sub0, killed %29:sreg_32, %subreg.sub1, killed %33:sreg_32, %subreg.sub2, killed %32:sreg_32, %subreg.sub3
%35:vgpr_32 = V_MOV_B32_e32 9, implicit $exec
BUFFER_STORE_DWORD_OFFSET killed %35:vgpr_32, killed %34:sgpr_128, 0, 0, 0, 0, implicit $exec :: (volatile store (s32) into `ptr addrspace(1) poison`, addrspace 1)
bb.4.end:
; predecessors: %bb.1, %bb.3
S_ENDPGM 0
# End machine code for function phi_use_def_before_kill.
*** Bad machine code: Using an undefined physical register ***
- function: phi_use_def_before_kill
- basic block: %bb.5 bb (0x14608b290)
- instruction: S_CBRANCH_SCC1 %bb.2, implicit $scc
- operand 1: implicit $scc
LLVM ERROR: Found 1 machine code errors.
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMWVtz4rgS_jXKiwqXJdlcHngAA1lqQ5KFJFvnvLhkW4BOfFvJMMm_PyX5gm1skp2dh51iZkDu_rr7U3erEVRKfogZmwJ7DuzFHT1lx0RMqZAsju68JPicvhy5hBmTmU8lA9iBARP8zAK4F0kEw_AcAbxSzwFeOUnA7lkM8Gq2Wdw_vwK8ku88HfD9IGA0MMIQ7ikPJcyODJ6Z4HvOBCAzYOrX0Cxe5gyQOdy-PgIyg2How0GUCZ6GDJAFjYKDH8NB5KcnQBYZPfKMw4FG-xxE1D_ymPFYZkJCQBwIsC0hGDlwxUPmHJn_Dge--m-QCrbnH0wCsrh3HgF2_py9LYcWwM5urdVytwK25zGDym56clMJzwkPILDM9Mjdk2RuwPaux_aJYO47D0OAx_swoRnksWAHBfShaOMEX1Y-AZ5AgIkJwWgOzJnn5SxA9TCLUgjIAu5pEMAcqgRBhqn_MIDnpllTQLmGH6UwCbNCy2xKY6cQrulhrSdZyPwMclSiKdkcY4CuQDrBC0g_So0KtuVOYVFBXCsDbJ9ivk9EZPhJHGh9rvTZX5q6nDQH5pZ8GobVPqgcNPK0MIoNyCMpnQF4orU8UYRYt6RAQ-qxUD1Ij9zzGiueN87TIH9EZlClZipYILWPhUjOrefVqLX18_TIy_DteZ0CLQ6BvdAf7Dm0unbL88Za5gI7rFHL_mpQa3dTe4lbqbeiQ2ZjgcVBHq4KqjtYDSmzRDB4TkKa8ZDpHdIkpJmANAiETKnPAB4jlehpwmUSq8c05IcYWqVXLd4Lw8jstFzKdBqf_APjVczqTXfMqNyPixOCZToDlepoUbYKP6TatevMZB-psSdYJafqBFFExaHqC9UnvZ1fvOGorn75oDsK-sKNqkAKefyFvDQkywQ7dPldQJAaRJGOTQwe0QMzJI3SkBmhgQMqBP1UbOi_Z4VsnC3ewc53-ADEGcMP7RBZFgtWY6HJWC_9OhqrFk0BlFsiy5tx-QYKjLP1c0H92hDsPBtplgnunTImi6NGZfNoDuPkFP_gqsfqvG2KoZqY6rIe9d9hnOwFYzBO5GfsX_R_8DAULDuJGEYsSsSnijSmvs-k5F7IIhapevoheMa0ax328E17NxwlP-doF5T1D2MWjAZ98dkVtp_EZyYOLM5-iZn2wHS9ggmc7TMm4FpNQyc_40kMd_qo50lcSGzygQn6ScDgPhFwf4pzyb7xhszgWu52M5V6L4L67_KBn1nMpJqXVqW2WlOGdUPFljykwoQ8Vj20OP70GirWSNn8DdO4DEPypHMpEQWM7XmGDfDY_Bjnh5ypjnYyrz1CpjoAAbbLQz_kZzUO1v2o2y9PVgLITC24RUY6T8__uRLCN4TKKcZuyezczdObOycYInNoE5tgNCzxRoDMzm08RTILWlAF-LClECf7lH34LM3gmztbLNwVwS4bWrA8r2oe59NTvlwzXC3rf3iUhtznaqKwoiRg7TX2wfzS-3FvpCUXEyUh2MEdWu6HUr122tk8u_cvV34POxxsmvwpl_Vo0e3zAJljjIhpVWQj3LU9LS9KYHJ7K-uGS3jUUnlzncfFZrb7XfnTYKPuSZ2OulW1dLF3xfwtVtqkrDfPD2tn_eIulqsqQKtE7N5tuNNb-XDvvubTOmluVY2KGlLdq0HA9rqY_Nyx3dr9ff3woFPDeXpcuOvNxn1Zbjfrx9nL07YvS64x1VdPBXz2-1jIO49ddZ5yAmRX3cfs7UtY9yW71pfKCd5A-hHpallKa4gNu-xYDR0yujzQTiqS59vZo_Obu3McdMFoRlUx6ObCFWQZKTLKbzM3g718TzHs3rhJf9xWf9ykL26rM26dUO3m9_zbul1HdYfzt2TU9bSqW2x92cTwsKvrX_K5DlHB2pf66-55yz-ueh7paXp1B36q6-FRy5udO3tcuHP1qZBsVGjd-95qKpMsL6xGf6zbK3tDkbZvjvP430sONH0-55CttLWqtMVG_q30ZtL2ZyrqnxzQ9eRQNb5hi7x2d1Qyo1ZzLJlAQ0OePNSiQz0YfwN10oc6VqjmNSo2e5v0EFlWldGoV2xwmXWq0QHhsZbaLu_d3fKP1-Wjs6z380mznwNsy5Mn2CF3stn7RzdkUSsL0Q3Z1plSD_xKllQhtQ_ptzJul5UXGJ01NH9drZZbd_fytF26iz-ftgv3abXaLV_qLvSexQ0mm-NW9-BVTEqzPHXH1UVHfu8B8Fjm3715nCUQDM1b9x5DjV49haici9Vu3JpVW8MQac-qTe5q8n0k9p5GxCjufG7WNeqta6u_rq3-usZfVaAW6itBPO4pbGJ-A5a0C7CEJWZPZRP8dWVrOfKN0ibWN0ub3CrBVmnjW22gVdp1L78q7Xrk_aVN7JvpOenLyu9Udh275Zv176vsvKYsI7_M_KKkqoGIlJWxc5ePi-f7DSwvFTCByziA0d-9JzBK_eIF57SJovx4lTw-QBrDU5z_zBLA9PgpuU9DKNiBy4wJWEEAczao7Cr1visKJedRyX3ohYn_XhsOoOdB3S6QNTTHHp6YOWsDyC-XJEr-70zaA5ikTNA4gKpeIOwQeXh428Dldvu0VRKr5KSEm6QyIRIhjdZFzl0wJcGETOgdm6KRhSbWCGFyd5wObSsgZGiaE0InKLDQxLNsb4KsCRtNJgzd8Sk2sW0SZCETYZMYQ5962B5ObOpRxJgPLJNFlIeGvtNMxOGOS3liU0QQnozv9P241L8MYuxR_z3PqPKXPcUFwNgXVB4HSTw405AHatle3Impghx4p4MElhlymcmLkYxnIZsWMN_NAR5Xv0HCk1bwkyilgsHkzIQuybuTCKfHLEtVhgO8Anh14Nnx5Bl-EgG8Kn6q1J6lIvkf8zOAVzpkCfCqiPo8xf8PAAD__-fZRvI">