Skip to content

Commit da8f4f1

Browse files
DianaChenigcbot
authored andcommitted
vISA: Do not generate mac instructions with HW restrictions
1 parent 1326485 commit da8f4f1

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

visa/AccSubstitution.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,18 @@ bool AccSubPass::replaceDstWithAcc(G4_INST* inst, int accNum)
682682
G4_SrcRegRegion* accSrc = builder.createSrcRegRegion(oldSrc->getModifier(), Direct,
683683
accReg, (short)accNum, 0, builder.getRegionStride1(), dst->getType());
684684
accSrc->setAccRegSel(oldSrc->getAccRegSel());
685-
if (useInst->opcode() == G4_mad && srcId == 0 && !builder.canMadHaveSrc0Acc())
685+
686+
bool canReplaceToMac = useInst->opcode() == G4_mad && srcId == 0 && !builder.canMadHaveSrc0Acc();
687+
if (canReplaceToMac && builder.noDFTypeMac()) {
688+
// dst and all src cannot be DF
689+
if ((useInst->getDst() && IS_DFTYPE(useInst->getDst()->getType())) ||
690+
(useInst->getSrc(0) && IS_DFTYPE(useInst->getSrc(0)->getType())) ||
691+
(useInst->getSrc(1) && IS_DFTYPE(useInst->getSrc(1)->getType())) ||
692+
(useInst->getSrc(2) && IS_DFTYPE(useInst->getSrc(2)->getType())))
693+
canReplaceToMac = false;
694+
}
695+
696+
if (canReplaceToMac)
686697
{
687698
// change mad to mac as src0 of 3-src does not support acc
688699
auto updateDefSrcPos = [](G4_INST* useInst, Gen4_Operand_Number origPos)

visa/HWCaps.inc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,11 @@ SPDX-License-Identifier: MIT
9696
return getOption(vISA_noSrc1Byte) || getPlatform() >= GENX_ICLLP;
9797
}
9898

99+
bool noDFTypeMac() const
100+
{
101+
return false;
102+
}
103+
99104
bool needsFenceCommitEnable() const
100105
{
101106
if (m_options->getTarget() == VISA_CM)

visa/Optimizer.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9517,6 +9517,12 @@ bool MadSequenceInfo::checkMadSequence()
95179517
if (!src0 || !src1 || !src2)
95189518
return false;
95199519

9520+
if (builder.noDFTypeMac()) {
9521+
if (IS_DFTYPE(src0->getType()) || IS_DFTYPE(src1->getType()) || IS_DFTYPE(src2->getType()) ||
9522+
IS_DFTYPE(inst->getDst()->getType()))
9523+
return false;
9524+
}
9525+
95209526
if (IS_FTYPE(src0->getType()) && IS_FTYPE(src1->getType()) &&
95219527
IS_FTYPE(src2->getType()))
95229528
{

0 commit comments

Comments
 (0)