diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.td b/llvm/lib/Target/AMDGPU/SIInstrInfo.td --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.td +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.td @@ -2100,6 +2100,7 @@ field bit HasDst = !ne(DstVT.Value, untyped.Value); field bit HasDst32 = HasDst; field bit EmitDst = HasDst; // force dst encoding, see v_movreld_b32 special case + field bit EmitDstSel = EmitDst; field int NumSrcArgs = getNumSrcArgs.ret; field bit HasSrc0 = !ne(Src0VT.Value, untyped.Value); field bit HasSrc1 = !ne(Src1VT.Value, untyped.Value); diff --git a/llvm/lib/Target/AMDGPU/VOPCInstructions.td b/llvm/lib/Target/AMDGPU/VOPCInstructions.td --- a/llvm/lib/Target/AMDGPU/VOPCInstructions.td +++ b/llvm/lib/Target/AMDGPU/VOPCInstructions.td @@ -27,10 +27,6 @@ let Inst{16-9} = !if(P.HasSrc1, src1{7-0}, 0); let Inst{24-17} = op; let Inst{31-25} = 0x3e; // encoding - - // VOPC disallows dst_sel and dst_unused as they have no effect on destination - let Inst{42-40} = 0; - let Inst{44-43} = 0; } class VOPC_SDWA9e op, VOPProfile P> : VOP_SDWA9Be

{ @@ -56,6 +52,8 @@ let Asm32 = "$src0, $src1"; // The destination for 32-bit encoding is implicit. let HasDst32 = 0; + // VOPC disallows dst_sel and dst_unused as they have no effect on destination + let EmitDstSel = 0; let Outs64 = (outs VOPDstS64orS32:$sdst); list Schedule = sched; } diff --git a/llvm/lib/Target/AMDGPU/VOPInstructions.td b/llvm/lib/Target/AMDGPU/VOPInstructions.td --- a/llvm/lib/Target/AMDGPU/VOPInstructions.td +++ b/llvm/lib/Target/AMDGPU/VOPInstructions.td @@ -417,8 +417,8 @@ bits<1> clamp; let Inst{39-32} = !if(P.HasSrc0, src0{7-0}, 0); - let Inst{42-40} = !if(P.EmitDst, dst_sel{2-0}, 0); - let Inst{44-43} = !if(P.EmitDst, dst_unused{1-0}, 0); + let Inst{42-40} = !if(P.EmitDstSel, dst_sel{2-0}, 0); + let Inst{44-43} = !if(P.EmitDstSel, dst_unused{1-0}, 0); let Inst{45} = !if(P.HasSDWAClamp, clamp{0}, 0); let Inst{50-48} = !if(P.HasSrc0, src0_sel{2-0}, 0); let Inst{51} = !if(P.HasSrc0IntMods, src0_modifiers{0}, 0); @@ -468,8 +468,8 @@ bits<1> clamp; bits<2> omod; - let Inst{42-40} = !if(P.EmitDst, dst_sel{2-0}, 0); - let Inst{44-43} = !if(P.EmitDst, dst_unused{1-0}, 0); + let Inst{42-40} = !if(P.EmitDstSel, dst_sel{2-0}, 0); + let Inst{44-43} = !if(P.EmitDstSel, dst_unused{1-0}, 0); let Inst{45} = !if(P.HasSDWAClamp, clamp{0}, 0); let Inst{47-46} = !if(P.HasSDWAOMod, omod{1-0}, 0); }