@@ -6474,10 +6474,10 @@ bool Optimizer::foldPseudoAndOr(G4_BB* bb, INST_LIST_ITER& ii)
6474
6474
if (start > 0 )
6475
6475
{
6476
6476
// just change immediate offset
6477
- uint16_t subRegOff = src->getSubRegOff () + start ;
6478
- G4_SrcRegRegion* newSrc = createSrcRegRegion ( src->getModifier (), src->getRegAccess (), src-> getBase (),
6479
- src->getRegOff (), subRegOff, src->getRegion (), src->getType (), src->getAccRegSel ());
6480
- newSrc-> setImmAddrOff ( src->getAddrImm ());
6477
+ assert ((start % src->getRegion ()-> width == 0 ) && " illegal starting offset and width combination " ) ;
6478
+ uint16_t subRegOff = src->getSubRegOff () + start / src->getRegion ()-> width ;
6479
+ auto newSrc = createIndirectSrc ( src->getModifier (), src->getBase (), src->getRegOff (), subRegOff, src->getRegion (),
6480
+ src-> getType (), src->getAddrImm ());
6481
6481
return newSrc;
6482
6482
}
6483
6483
else
@@ -6492,10 +6492,8 @@ bool Optimizer::foldPseudoAndOr(G4_BB* bb, INST_LIST_ITER& ii)
6492
6492
short numRows = start / wd;
6493
6493
short numCols = start % wd;
6494
6494
short newOff = (numRows * vs + numCols * hs) * G4_Type_Table[src->getType ()].byteSize ;
6495
-
6496
- G4_SrcRegRegion* newSrc = createSrcRegRegion (src->getModifier (), src->getRegAccess (), src->getBase (),
6497
- src->getRegOff (), src->getSubRegOff (), rd, src->getType (), src->getAccRegSel ());
6498
- newSrc->setImmAddrOff (src->getAddrImm () + newOff);
6495
+ auto newSrc = createIndirectSrc (src->getModifier (), src->getBase (), src->getRegOff (), src->getSubRegOff (), rd,
6496
+ src->getType (), src->getAddrImm () + newOff);
6499
6497
return newSrc;
6500
6498
6501
6499
}
0 commit comments