Skip to content

Commit d6455cb

Browse files
authored
Optimization on LinearScan::buildPhysRegRecords (#83862)
* Optimization on LinearScan::buildPhysRegRecords by skipping non-AVX512 register if AVX512 not available. * code changes based on the reviews. * put the upper register group declaration in global fix the offset value when allocating upper registers, it should be the length of the lower register group.
1 parent 390c2d5 commit d6455cb

File tree

2 files changed

+21
-3
lines changed

2 files changed

+21
-3
lines changed

src/coreclr/jit/lsrabuild.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1876,6 +1876,10 @@ const unsigned lsraRegOrderSize = ArrLen(lsraRegOrder);
18761876
// TODO-XARCH-AVX512 we might want to move this to be configured with the rbm variables too
18771877
static const regNumber lsraRegOrderFlt[] = {REG_VAR_ORDER_FLT};
18781878
const unsigned lsraRegOrderFltSize = ArrLen(lsraRegOrderFlt);
1879+
#if defined(TARGET_AMD64)
1880+
static const regNumber lsraRegOrderFltUpper[] = {REG_VAR_ORDER_FLT_UPPER};
1881+
const unsigned lsraRegOrderUpperFltSize = ArrLen(lsraRegOrderFltUpper);
1882+
#endif // TARGET_AMD64
18791883

18801884
//------------------------------------------------------------------------
18811885
// buildPhysRegRecords: Make an interval for each physical register
@@ -1899,6 +1903,17 @@ void LinearScan::buildPhysRegRecords()
18991903
RegRecord* curr = &physRegs[reg];
19001904
curr->regOrder = (unsigned char)i;
19011905
}
1906+
#if defined(TARGET_AMD64)
1907+
if (compiler->canUseEvexEncoding())
1908+
{
1909+
for (unsigned int i = 0; i < lsraRegOrderUpperFltSize; i++)
1910+
{
1911+
regNumber reg = lsraRegOrderFltUpper[i];
1912+
RegRecord* curr = &physRegs[reg];
1913+
curr->regOrder = (unsigned char)(i + lsraRegOrderFltSize);
1914+
}
1915+
}
1916+
#endif // TARGET_AMD64
19021917
}
19031918

19041919
//------------------------------------------------------------------------

src/coreclr/jit/targetamd64.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -227,9 +227,12 @@
227227
#endif
228228

229229
#define REG_VAR_ORDER_FLT REG_XMM0,REG_XMM1,REG_XMM2,REG_XMM3,REG_XMM4,REG_XMM5,REG_XMM6,REG_XMM7, \
230-
REG_XMM8,REG_XMM9,REG_XMM10,REG_XMM11,REG_XMM12,REG_XMM13,REG_XMM14,REG_XMM15, \
231-
REG_XMM16,REG_XMM17,REG_XMM18,REG_XMM19,REG_XMM20,REG_XMM21,REG_XMM22,REG_XMM23, \
232-
REG_XMM24,REG_XMM25,REG_XMM26,REG_XMM27,REG_XMM28,REG_XMM29,REG_XMM30,REG_XMM31
230+
REG_XMM8,REG_XMM9,REG_XMM10,REG_XMM11,REG_XMM12,REG_XMM13,REG_XMM14,REG_XMM15
231+
#if defined(TARGET_AMD64)
232+
#define REG_VAR_ORDER_FLT_UPPER REG_XMM16,REG_XMM17,REG_XMM18,REG_XMM19,REG_XMM20,REG_XMM21,REG_XMM22,REG_XMM23, \
233+
REG_XMM24,REG_XMM25,REG_XMM26,REG_XMM27,REG_XMM28,REG_XMM29,REG_XMM30,REG_XMM31
234+
#endif // TARGET_AMD64
235+
233236

234237
#ifdef UNIX_AMD64_ABI
235238
#define CNT_CALLEE_SAVED (5 + REG_ETW_FRAMED_EBP_COUNT)

0 commit comments

Comments
 (0)