Skip to content

Commit c9c4f7a

Browse files
pratikashargfxbot
authored andcommitted
Fix a bug in remove redundant mov pass. Existing code was not
considering type when interpreting sub reg Change-Id: Ia164de6c4dbec1bcd2025335b05f87d12822498e
1 parent 273611f commit c9c4f7a

File tree

1 file changed

+4
-17
lines changed

1 file changed

+4
-17
lines changed

visa/FlowGraph.cpp

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2278,9 +2278,7 @@ void FlowGraph::removeRedundMov()
22782278
while (curr_iter != bb->end())
22792279
{
22802280
G4_INST* inst = (*curr_iter);
2281-
if (inst->opcode() == G4_mov &&
2282-
inst->getCondMod() == NULL &&
2283-
inst->getSaturate() == false)
2281+
if (inst->isRawMov())
22842282
{
22852283
G4_Operand *src = inst->getSrc(0);
22862284
G4_DstRegRegion *dst = inst->getDst();
@@ -2291,21 +2289,10 @@ void FlowGraph::removeRedundMov()
22912289
if (!dst->isIndirect() &&
22922290
!srcRgn->isIndirect() &&
22932291
dst->isGreg() &&
2294-
src->isGreg() &&
2295-
srcRgn->getModifier() == Mod_src_undef &&
2296-
dst->getType() == src->getType())
2292+
src->isGreg())
22972293
{
2298-
G4_RegVar* dstBase = (G4_RegVar*)dst->getBase();
2299-
G4_RegVar* srcBase = (G4_RegVar*)srcRgn->getBase();
2300-
2301-
int dstSubReg, dstReg, srcSubReg, srcReg;
2302-
2303-
dstSubReg = dst->getSubRegOff() + dstBase->getPhyRegOff();
2304-
srcSubReg = srcRgn->getSubRegOff() + srcBase->getPhyRegOff();
2305-
dstReg = dst->getRegOff() + dstBase->getPhyReg()->asGreg()->getRegNum();
2306-
srcReg = srcRgn->getRegOff() + srcBase->getPhyReg()->asGreg()->getRegNum();
2307-
2308-
if (dstReg == srcReg && dstSubReg == srcSubReg)
2294+
if (dst->getLinearizedStart() == srcRgn->getLinearizedStart() &&
2295+
dst->getLinearizedEnd() == srcRgn->getLinearizedEnd())
23092296
{
23102297
uint16_t stride = 0;
23112298
RegionDesc *rd = srcRgn->getRegion();

0 commit comments

Comments
 (0)