Skip to content

Commit d1dff9b

Browse files
kychendevgfxbot
authored andcommitted
Added RA heuristic to enable fail-safe RA with limited
addr taken spill size. Change-Id: I101f42759c4a133d72ddaf7f2f7523d8037eb4de
1 parent ae60a4a commit d1dff9b

File tree

3 files changed

+17
-9
lines changed

3 files changed

+17
-9
lines changed

visa/FlowGraph.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,7 +1137,6 @@ class G4_Kernel
11371137
const char* name;
11381138
unsigned numRegTotal;
11391139
unsigned int simdSize;
1140-
bool hasAddrTaken;
11411140
Options *m_options;
11421141

11431142
RA_Type RAType;
@@ -1164,6 +1163,8 @@ class G4_Kernel
11641163
uint32_t bank_ok_num;
11651164
uint32_t bank_bad_num;
11661165

1166+
uint32_t maxAddrTakenSize;
1167+
11671168
unsigned int callerSaveLastGRF;
11681169

11691170
public:
@@ -1189,7 +1190,6 @@ class G4_Kernel
11891190
numRegTotal = UNDEFINED_VAL;
11901191
name = NULL;
11911192
simdSize = 0;
1192-
hasAddrTaken = false;
11931193
kernelDbgInfo = nullptr;
11941194
if (options->getOption(vISAOptions::vISA_ReRAPostSchedule) ||
11951195
options->getOption(vISAOptions::vISA_GetFreeGRFInfo))
@@ -1203,6 +1203,7 @@ class G4_Kernel
12031203

12041204
unsigned int totalGRFs = options->getuInt32Option(vISA_TotalGRFNum);
12051205
callerSaveLastGRF = ((totalGRFs - 8) / 2) - 1;
1206+
maxAddrTakenSize = 0;
12061207
}
12071208

12081209
~G4_Kernel();
@@ -1264,8 +1265,11 @@ class G4_Kernel
12641265
void calculateSimdSize();
12651266
unsigned int getSimdSize() { return simdSize; }
12661267

1267-
void setHasAddrTaken(bool val) { hasAddrTaken = val; }
1268-
bool getHasAddrTaken() { return hasAddrTaken; }
1268+
void setMaxAddrTakenSize(uint32_t val) {
1269+
if (val > maxAddrTakenSize)
1270+
maxAddrTakenSize = val;
1271+
}
1272+
uint32_t getMaxAddrTakenSize() { return maxAddrTakenSize; }
12691273

12701274
void setNumRegTotal(unsigned num) {numRegTotal = num;}
12711275
void setName(const char* n) {name = n;}

visa/GraphColor.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ using namespace std;
4747
using namespace vISA;
4848

4949
#define FAIL_SAFE_RA_LIMIT 3
50+
#define ADDR_TAKE_SIZE_LIMIT 256
5051

5152
#define MIN(x,y) (((x)<(y))? (x):(y))
5253
#define MAX(x,y) (((x)<(y))? (y):(x))
@@ -9689,7 +9690,7 @@ int GlobalRA::coloringRegAlloc()
96899690
}
96909691

96919692
bool allowAddrTaken = builder.getOption(vISA_FastSpill) ||
9692-
!kernel.getHasAddrTaken();
9693+
(kernel.getMaxAddrTakenSize() <= ADDR_TAKE_SIZE_LIMIT);
96939694
bool reserveSpillReg = false;
96949695
if (builder.getOption(vISA_FailSafeRA) &&
96959696
kernel.getOptions()->getTarget() == VISA_3D &&

visa/VISAKernelImpl.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1560,13 +1560,16 @@ int VISAKernelImpl::CreateVISAAddressOfOperandGeneric(VISA_VectorOpnd *&cisa_opn
15601560
}
15611561
#endif
15621562
// set up to the top level dcl to be addressed
1563-
src0Dcl->setAddressed();
1564-
m_kernel->setHasAddrTaken(true);
1565-
G4_Declare *parentDcl = src0Dcl->getAliasDeclare();
1566-
while( parentDcl ){
1563+
src0Dcl->setAddressed();
1564+
G4_Declare *parentDcl = src0Dcl->getAliasDeclare();
1565+
G4_Declare *topDcl = src0Dcl;
1566+
while( parentDcl )
1567+
{
15671568
parentDcl->setAddressed();
1569+
topDcl = parentDcl;
15681570
parentDcl = parentDcl->getAliasDeclare();
15691571
}
1572+
m_kernel->setMaxAddrTakenSize(topDcl->getByteSize());
15701573
cisa_opnd->g4opnd = m_builder->createAddrExp(
15711574
src0Dcl->getRegVar(),
15721575
offset,

0 commit comments

Comments
 (0)