Skip to content

Commit 4444ee2

Browse files
sys-d3djenkinspaigeale
authored andcommitted
Backout of 225bd22 due to Functional Regression
Change-Id: I6b4ae8a39a0657ba2abbaa9210e336466489173b
1 parent ca39f47 commit 4444ee2

File tree

2 files changed

+39
-16
lines changed

2 files changed

+39
-16
lines changed

visa/GraphColor.cpp

Lines changed: 38 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8696,7 +8696,7 @@ void VarSplit::insertMovesToTemp(IR_Builder& builder, G4_Declare* oldDcl, G4_Ope
86968696
return;
86978697
}
86988698

8699-
void VarSplit::insertMovesFromTemp(G4_Kernel& kernel, G4_Declare* oldDcl, int index, G4_SrcRegRegion *srcOpnd, int pos, G4_BB* bb, INST_LIST_ITER instIter, std::vector<G4_Declare*> &splitDclList)
8699+
void VarSplit::insertMovesFromTemp(G4_Kernel& kernel, G4_Declare* oldDcl, int index, G4_Operand *srcOpnd, int pos, G4_BB* bb, INST_LIST_ITER instIter, std::vector<G4_Declare*> &splitDclList)
87008700
{
87018701
G4_INST *inst = (*instIter);
87028702

@@ -8705,9 +8705,16 @@ void VarSplit::insertMovesFromTemp(G4_Kernel& kernel, G4_Declare* oldDcl, int in
87058705
int splitSize = kernel.getSimdSize() == 8 ? 1 : 2;
87068706
if (sizeInGRF != splitSize)
87078707
{
8708-
8709-
int numElt = getTypeSize(srcOpnd->getType()) > 4 ? 4 : (4 / getTypeSize(srcOpnd->getType()));
8710-
G4_Declare* newDcl = kernel.fg.builder->createTempVar(numElt * splitSize, srcOpnd->getType(), Either, Any);
8708+
unsigned short dclWidth = 0;
8709+
unsigned short dclHeight = 0;
8710+
int dclTotalSize = 0;
8711+
G4_SrcRegRegion* oldSrc = srcOpnd->asSrcRegRegion();
8712+
getHeightWidth(oldSrc->getType(), (srcOpnd->getRightBound() - srcOpnd->getLeftBound() + 1) / oldSrc->getElemSize(), dclWidth, dclHeight, dclTotalSize);
8713+
char* newDclName = kernel.fg.builder->getNameString(kernel.fg.builder->mem, 16, "copy_%d_%s", index, oldDcl->getName());
8714+
G4_Declare * newDcl = kernel.fg.builder->createDeclareNoLookup(newDclName, G4_GRF, dclWidth, dclHeight, oldSrc->getType());
8715+
newDcl->setAlign(oldDcl->getAlign());
8716+
newDcl->setSubRegAlign(oldDcl->getSubRegAlign());
8717+
unsigned newLeftBound = 0;
87118718

87128719
for (size_t i = 0; i < splitDclList.size(); i++)
87138720
{
@@ -8718,16 +8725,32 @@ void VarSplit::insertMovesFromTemp(G4_Kernel& kernel, G4_Declare* oldDcl, int in
87188725
if (!(srcOpnd->getRightBound() < leftBound || rightBound < srcOpnd->getLeftBound()))
87198726
{
87208727

8721-
newDcl->setAliasDeclare(subDcl, 0);
8722-
G4_SrcRegRegion* newSrc = kernel.fg.builder->Create_Src_Opnd_From_Dcl(newDcl, srcOpnd->getRegion());
8723-
newSrc->setRegOff(srcOpnd->getRegOff() % splitSize);
8724-
newSrc->setSubRegOff(srcOpnd->getSubRegOff());
8725-
newSrc->setModifier(srcOpnd->getModifier());
8726-
inst->setSrc(newSrc, pos);
8727-
break;
8728-
}
8729-
}
8730-
8728+
G4_DstRegRegion* dst = kernel.fg.builder->createDstRegRegion(Direct,
8729+
newDcl->getRegVar(),
8730+
newLeftBound / G4_GRF_REG_NBYTES,
8731+
0,
8732+
1,
8733+
oldSrc->getType());
8734+
newLeftBound += subDcl->getByteSize();
8735+
G4_SrcRegRegion* src = kernel.fg.builder->createSrcRegRegion(
8736+
Mod_src_undef,
8737+
Direct,
8738+
subDcl->getRegVar(),
8739+
0,
8740+
0,
8741+
kernel.fg.builder->getRegionStride1(),
8742+
oldSrc->getType());
8743+
G4_INST* movInst = kernel.fg.builder->createInternalInst(nullptr, G4_mov, nullptr, false,
8744+
(unsigned char)subDcl->getTotalElems(), dst, src, nullptr, InstOpt_WriteEnable,
8745+
inst->getLineNo(), inst->getCISAOff(), inst->getSrcFilename());
8746+
bb->insert(instIter, movInst);
8747+
}
8748+
}
8749+
G4_SrcRegRegion* newSrc = kernel.fg.builder->Create_Src_Opnd_From_Dcl(newDcl, oldSrc->getRegion());
8750+
newSrc->setRegOff(0);
8751+
newSrc->setSubRegOff(oldSrc->getSubRegOff());
8752+
newSrc->setModifier(oldSrc->getModifier());
8753+
inst->setSrc(newSrc, pos);
87318754
}
87328755
else
87338756
{
@@ -8953,7 +8976,7 @@ void VarSplit::globalSplit(IR_Builder& builder, G4_Kernel &kernel)
89538976

89548977
if (opnd->isSrcRegRegion())
89558978
{
8956-
insertMovesFromTemp(kernel, topDcl, srcIndex, opnd->asSrcRegRegion(), pos, bb, instIter, splitDclList);
8979+
insertMovesFromTemp(kernel, topDcl, srcIndex, opnd, pos, bb, instIter, splitDclList);
89578980
}
89588981

89598982
srcIndex++;

visa/GraphColor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1248,7 +1248,7 @@ namespace vISA
12481248
static void getHeightWidth(G4_Type type, unsigned int numberElements, unsigned short &dclWidth, unsigned short &dclHeight, int &totalByteSize);
12491249
void createSubDcls(G4_Kernel& kernel, G4_Declare* oldDcl, std::vector<G4_Declare*> &splitDclList);
12501250
void insertMovesToTemp(IR_Builder& builder, G4_Declare* oldDcl, G4_Operand *dstOpnd, G4_BB* bb, INST_LIST_ITER instIter, std::vector<G4_Declare*> &splitDclList);
1251-
void insertMovesFromTemp(G4_Kernel& kernel, G4_Declare* oldDcl, int index, G4_SrcRegRegion *srcOpnd, int pos, G4_BB* bb, INST_LIST_ITER instIter, std::vector<G4_Declare*> &splitDclList);
1251+
void insertMovesFromTemp(G4_Kernel& kernel, G4_Declare* oldDcl, int index, G4_Operand *srcOpnd, int pos, G4_BB* bb, INST_LIST_ITER instIter, std::vector<G4_Declare*> &splitDclList);
12521252

12531253
public:
12541254
bool didLocalSplit = false;

0 commit comments

Comments
 (0)