Changeset View
Changeset View
Standalone View
Standalone View
llvm/lib/Target/AMDGPU/VOP2Instructions.td
Show First 20 Lines • Show All 418 Lines • ▼ Show 20 Lines | let Ins64 = getIns64<Src0RC64, Src1RC64, getRegisterOperandForVT<Src2VT>.ret, 3, | ||||
0, HasModifiers, HasModifiers, HasOMod, | 0, HasModifiers, HasModifiers, HasOMod, | ||||
Src0Mod, Src1Mod, Src2Mod>.ret; | Src0Mod, Src1Mod, Src2Mod>.ret; | ||||
let InsDPP = (ins Src0ModDPP:$src0_modifiers, Src0DPP:$src0, | let InsDPP = (ins Src0ModDPP:$src0_modifiers, Src0DPP:$src0, | ||||
Src1ModDPP:$src1_modifiers, Src1DPP:$src1, | Src1ModDPP:$src1_modifiers, Src1DPP:$src1, | ||||
getVregSrcForVT<Src2VT>.ret:$src2, // stub argument | getVregSrcForVT<Src2VT>.ret:$src2, // stub argument | ||||
dpp_ctrl:$dpp_ctrl, row_mask:$row_mask, | dpp_ctrl:$dpp_ctrl, row_mask:$row_mask, | ||||
bank_mask:$bank_mask, bound_ctrl:$bound_ctrl); | bank_mask:$bank_mask, bound_ctrl:$bound_ctrl); | ||||
let InsDPP16 = !con(InsDPP, (ins FI:$fi)); | let InsDPP16 = !con(InsDPP, (ins FI:$fi)); | ||||
let InsVOP3Base = getIns64<Src0VOP3DPP, Src1RC64, RegisterOperand<VGPR_32>, 3, | let InsVOP3Base = getIns64<Src0VOP3DPP, Src1VOP3DPP, RegisterOperand<VGPR_32>, 3, | ||||
0, HasModifiers, HasModifiers, HasOMod, | 0, HasModifiers, HasModifiers, HasOMod, | ||||
Src0Mod, Src1Mod, Src2Mod>.ret; | Src0ModVOP3DPP, Src1ModVOP3DPP, Src2Mod>.ret; | ||||
Joe_Nash: I think it can be the following, which is more generic.
```
let InsVOP3Base =… | |||||
Thanks! It works and looks more logical. dp: Thanks! It works and looks more logical. | |||||
// We need a dummy src2 tied to dst to track the use of that register for s_delay_alu | // We need a dummy src2 tied to dst to track the use of that register for s_delay_alu | ||||
let InsVOPDX = (ins Src0RC32:$src0X, Src1RC32:$vsrc1X, VGPRSrc_32:$src2X); | let InsVOPDX = (ins Src0RC32:$src0X, Src1RC32:$vsrc1X, VGPRSrc_32:$src2X); | ||||
let InsVOPDXDeferred = | let InsVOPDXDeferred = | ||||
(ins !if(!eq(Src0VT.Size, 32), VSrc_f32_Deferred, VSrc_f16_Deferred):$src0X, | (ins !if(!eq(Src0VT.Size, 32), VSrc_f32_Deferred, VSrc_f16_Deferred):$src0X, | ||||
VGPR_32:$vsrc1X, VGPRSrc_32:$src2X); | VGPR_32:$vsrc1X, VGPRSrc_32:$src2X); | ||||
let InsVOPDY = (ins Src0RC32:$src0Y, Src1RC32:$vsrc1Y, VGPRSrc_32:$src2Y); | let InsVOPDY = (ins Src0RC32:$src0Y, Src1RC32:$vsrc1Y, VGPRSrc_32:$src2Y); | ||||
let InsVOPDYDeferred = | let InsVOPDYDeferred = | ||||
(ins !if(!eq(Src1VT.Size, 32), VSrc_f32_Deferred, VSrc_f16_Deferred):$src0Y, | (ins !if(!eq(Src1VT.Size, 32), VSrc_f32_Deferred, VSrc_f16_Deferred):$src0Y, | ||||
▲ Show 20 Lines • Show All 1,893 Lines • Show Last 20 Lines |
I think it can be the following, which is more generic.