Skip to content

Commit 12ea5e3

Browse files
weiyu-chensys_zuul
authored andcommitted
Disable mad to mac optimization if the sequence uses byte type on platforms that don't support it.
Change-Id: Id60cebbaecfdd2086d9e0c0fb3bce116694b6bb8
1 parent bd27da7 commit 12ea5e3

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

visa/Gen4_IR.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1863,6 +1863,11 @@ G4_INST::MovType G4_INST::canPropagate() const
18631863
G4_Type dstType = dst->getType();
18641864
G4_Type srcType = src->getType();
18651865

1866+
if (!builder.hasByteALU()
1867+
&& (getTypeSize(dstType) == 1 || getTypeSize(srcType) == 1))
1868+
{
1869+
return SuperMov;
1870+
}
18661871

18671872
G4_SrcModifier srcMod = Mod_src_undef;
18681873
if (src->isSrcRegRegion()) {

visa/HWCaps.inc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,5 +632,10 @@
632632
return !noFP64();
633633
}
634634

635+
bool hasByteALU() const
636+
{
637+
return true;
638+
}
639+
635640

636641
// end HW capabilities

visa/Optimizer.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1784,6 +1784,10 @@ static bool canHoist(FlowGraph &fg, G4_BB *bb, INST_LIST_RITER revIter)
17841784
return false;
17851785
}
17861786

1787+
if (!fg.builder->hasByteALU() && (getTypeSize(Dst->getType()) == 1))
1788+
{
1789+
return false;
1790+
}
17871791
}
17881792

17891793
// Now check each definition of src(0)
@@ -10018,6 +10022,14 @@ bool MadSequenceInfo::checkMadSequence()
1001810022
return false;
1001910023
}
1002010024

10025+
if (!builder.hasByteALU())
10026+
{
10027+
if (IS_BTYPE(src0->getType()) || IS_BTYPE(src1->getType()))
10028+
{
10029+
return false;
10030+
}
10031+
}
10032+
1002110033
// If there is a modifier for src2, or src2 is accessed somewhere
1002210034
// indirectly then we will not generate a MAC.
1002310035
if (!src2->isSrcRegRegion())
@@ -10176,6 +10188,18 @@ void MadSequenceInfo::populateSrc2Def()
1017610188
return setNotSafe();
1017710189
}
1017810190

10191+
if (!builder.hasByteALU())
10192+
{
10193+
// do not allow acc if src2Dest inst has byte source
10194+
for (int i = 0; i < src2Def->getNumSrc(); ++i)
10195+
{
10196+
if (IS_BTYPE(src2Def->getSrc(i)->getType()))
10197+
{
10198+
return setNotSafe();
10199+
}
10200+
}
10201+
}
10202+
1017910203
// Check if there is any ACC dependency.
1018010204
if (!checkACCDependency(src2Def, firstMad))
1018110205
return setNotSafe();
@@ -10236,9 +10260,8 @@ void MadSequenceInfo::populateUserChain(G4_INST *defInst, int level)
1023610260
return setNotSafe();
1023710261

1023810262
G4_INST *useInst = defInst->use_back().first;
10239-
G4_Operand *useDst = useInst->getDst();
10263+
auto useDst = useInst->getDst();
1024010264

10241-
// Should support a null dst?
1024210265
if (useDst == nullptr)
1024310266
return setNotSafe();
1024410267

0 commit comments

Comments
 (0)