@@ -1308,7 +1308,7 @@ bool HWConformity::evenlySplitInst( INST_LIST_ITER iter, G4_BB* bb, bool checkOv
1308
1308
extraMov = checkSrcDstOverlap (iter, bb, false );
1309
1309
}
1310
1310
1311
- bool use_arc_reg = false ;
1311
+ bool useARF = false ;
1312
1312
for (int i = 0 ; i < numSrc; i++)
1313
1313
{
1314
1314
srcs[i] = inst->getSrc (i);
@@ -1343,13 +1343,14 @@ bool HWConformity::evenlySplitInst( INST_LIST_ITER iter, G4_BB* bb, bool checkOv
1343
1343
}
1344
1344
1345
1345
G4_DstRegRegion *accDstRegion = NULL ;
1346
- if ( inst->getImplAccDst () )
1346
+ if ( inst->getImplAccDst ())
1347
1347
{
1348
1348
accDstRegion = inst->getImplAccDst ();
1349
1349
}
1350
- if ( accSrcRegion || accDstRegion || newPred || newCond )
1350
+
1351
+ if (accSrcRegion || accDstRegion || newPred || newCond)
1351
1352
{
1352
- use_arc_reg = true ;
1353
+ useARF = true ;
1353
1354
}
1354
1355
1355
1356
for ( int i = 0 ; i < instExSize; i += currExSize )
@@ -1425,11 +1426,12 @@ bool HWConformity::evenlySplitInst( INST_LIST_ITER iter, G4_BB* bb, bool checkOv
1425
1426
}
1426
1427
1427
1428
// set mask
1428
- if (!inst->isWriteEnableInst () || use_arc_reg)
1429
+ bool needsMaskOffset = useARF || (bb->isInSimdFlow () && !inst->isWriteEnableInst ());
1430
+ if (needsMaskOffset)
1429
1431
{
1430
1432
int newMaskOffset = origMaskOffset + (i == 0 ? 0 : currExSize);
1431
- bool nibOk = G4_Type_Table[inst-> getDst ()-> getType ()]. byteSize == 8 ||
1432
- G4_Type_Table[ inst->getExecType ()]. byteSize == 8 ;
1433
+ bool nibOk = builder. hasNibCtrl () &&
1434
+ ( getTypeSize ( inst->getDst ()-> getType ()) == 8 || getTypeSize (inst-> getExecType ()) == 8 ) ;
1433
1435
G4_InstOption newMask = G4_INST::offsetToMask (currExSize, newMaskOffset, nibOk);
1434
1436
if (newMask == InstOpt_NoOpt)
1435
1437
{
0 commit comments