Skip to content

Commit 19a4510

Browse files
weiyu-chensys_zuul
authored andcommitted
Avoid hard-coding register size in a few legalization checks.
Change-Id: I2ee4604c25c03b39bf020d4a58cdb1119082be4f
1 parent 6aceae3 commit 19a4510

File tree

1 file changed

+19
-40
lines changed

1 file changed

+19
-40
lines changed

visa/HWConformity.cpp

Lines changed: 19 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5749,31 +5749,33 @@ void HWConformity::fixSendInst(G4_BB* bb)
57495749
dcl->getRegVar()->getPhyReg()->asGreg()->getRegNum() < 2));
57505750
};
57515751

5752-
if (needsTempSrc(inst, src0TopDcl))
5752+
auto fixSrc = [&](G4_INST* inst, bool isSrc0)
57535753
{
5754-
uint16_t rows = inst->getMsgDesc()->MessageLength();
5755-
G4_Type type = src0->getType();
5756-
G4_Declare* dcl = builder.createTempVar(rows * 8, type, GRFALIGN);
5754+
auto sendSrc = isSrc0 ? inst->getSrc(0)->asSrcRegRegion() : inst->getSrc(1)->asSrcRegRegion();
5755+
uint16_t rows = isSrc0 ? inst->getMsgDesc()->MessageLength() : inst->getMsgDesc()->extMessageLength();
5756+
G4_Type type = sendSrc->getType();
5757+
G4_Declare* dcl = builder.createTempVar(rows * builder.getNativeExecSize(), type, GRFALIGN);
57575758

5758-
MUST_BE_TRUE(G4_Type_Table[type].byteSize == 4, "Invalid src0 opnd type for send.");
5759+
MUST_BE_TRUE(G4_Type_Table[type].byteSize == 4, "Invalid src opnd type for send.");
57595760

57605761
const RegionDesc* region = builder.getRegionStride1();
5761-
G4_VarBase* base = src0->asSrcRegRegion()->getBase();
5762-
short baseOff = src0->asSrcRegRegion()->getRegOff();
5763-
short baseSubOff = src0->asSrcRegRegion()->getSubRegOff();
5762+
G4_VarBase* base = sendSrc->getBase();
5763+
short baseOff = sendSrc->getRegOff();
5764+
short baseSubOff = sendSrc->getSubRegOff();
57645765
for (uint16_t idx = 0; idx != rows; ++idx) {
57655766
G4_SrcRegRegion* src = builder.createSrcRegRegion(Mod_src_undef, Direct, base, baseOff + idx, baseSubOff + 0, region, type);
57665767
G4_DstRegRegion* dst = builder.createDst(dcl->getRegVar(), idx, 0, 1, type);
5767-
5768-
G4_INST* newInst = builder.createMov(8, dst, src, InstOpt_WriteEnable, false);
5769-
5768+
G4_INST* newInst = builder.createMov(builder.getNativeExecSize(), dst, src, InstOpt_WriteEnable, false);
57705769
bb->insert(i, newInst);
5771-
inst->transferDef(newInst, Opnd_src0, Opnd_src0);
5772-
newInst->addDefUse(inst, Opnd_src0);
57735770
}
57745771

57755772
G4_Operand* newSrc = builder.Create_Src_Opnd_From_Dcl(dcl, builder.getRegionStride1());
5776-
inst->setSrc(newSrc, 0);
5773+
inst->setSrc(newSrc, isSrc0 ? 0 : 1);
5774+
};
5775+
5776+
if (needsTempSrc(inst, src0TopDcl))
5777+
{
5778+
fixSrc(inst, true);
57775779
}
57785780

57795781
if (inst->isSplitSend() && !inst->getSrc(1)->isNullReg())
@@ -5788,30 +5790,7 @@ void HWConformity::fixSendInst(G4_BB* bb)
57885790

57895791
if (needsTempSrc(inst, src1TopDcl))
57905792
{
5791-
uint16_t rows = inst->getMsgDesc()->extMessageLength();
5792-
G4_Type type = src1->getType();
5793-
G4_Declare* dcl = builder.createTempVar(rows * 8, type, GRFALIGN);
5794-
5795-
MUST_BE_TRUE(G4_Type_Table[type].byteSize == 4, "Invalid src1 opnd type for send.");
5796-
5797-
const RegionDesc* region = builder.getRegionStride1();
5798-
G4_VarBase* base = src1->asSrcRegRegion()->getBase();
5799-
short baseOff = src1->asSrcRegRegion()->getRegOff();
5800-
short baseSubOff = src1->asSrcRegRegion()->getSubRegOff();
5801-
for (uint16_t idx = 0; idx != rows; ++idx)
5802-
{
5803-
G4_SrcRegRegion* src = builder.createSrcRegRegion(Mod_src_undef, Direct, base, baseOff + idx, baseSubOff + 0, region, type);
5804-
G4_DstRegRegion* dst = builder.createDst(dcl->getRegVar(), idx, 0, 1, type);
5805-
5806-
G4_INST* newInst = builder.createMov(8, dst, src, InstOpt_WriteEnable, false);
5807-
5808-
bb->insert(i, newInst);
5809-
inst->transferDef(newInst, Opnd_src1, Opnd_src1);
5810-
newInst->addDefUse(inst, Opnd_src1);
5811-
}
5812-
5813-
G4_Operand* newSrc = builder.Create_Src_Opnd_From_Dcl(dcl, region);
5814-
inst->setSrc(newSrc, 1);
5793+
fixSrc(inst, false);
58155794
}
58165795
}
58175796

@@ -6171,10 +6150,10 @@ bool HWConformity::fixAddcSubb(G4_BB* bb)
61716150
{
61726151
G4_INST* inst = *iter;
61736152
if ((inst->opcode() == G4_addc || inst->opcode() == G4_subb) &&
6174-
inst->getExecSize() != 8)
6153+
inst->getExecSize() != builder.getNativeExecSize())
61756154
{
61766155
// find the matching carry move
6177-
G4_INST* carryMov = NULL;
6156+
G4_INST* carryMov = nullptr;
61786157
auto movIter = iter;
61796158
for (++movIter; movIter != iterEnd; ++movIter)
61806159
{

0 commit comments

Comments
 (0)