diff options
author | Carol Eidt <carol.eidt@microsoft.com> | 2016-10-04 15:10:31 -0700 |
---|---|---|
committer | Carol Eidt <carol.eidt@microsoft.com> | 2016-12-06 17:14:20 -0800 |
commit | e94463ea1038ddf9962f1478d0dfd0ffb49b0625 (patch) | |
tree | 895a32926874516bdff52747a9ac887ba74c18ff /src/jit/lsra.h | |
parent | 2acb29c3e9aeeab5292d6481e8d3bf583ae110ab (diff) | |
download | coreclr-e94463ea1038ddf9962f1478d0dfd0ffb49b0625.tar.gz coreclr-e94463ea1038ddf9962f1478d0dfd0ffb49b0625.tar.bz2 coreclr-e94463ea1038ddf9962f1478d0dfd0ffb49b0625.zip |
Streamline LSRA resolution
Only do resolution when required, and only for variables that may need it.
Diffstat (limited to 'src/jit/lsra.h')
-rw-r--r-- | src/jit/lsra.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/jit/lsra.h b/src/jit/lsra.h index 193effab0d..3e5949ffaa 100644 --- a/src/jit/lsra.h +++ b/src/jit/lsra.h @@ -893,6 +893,8 @@ private: unassignPhysReg(getRegisterRecord(reg), nullptr); } + void setIntervalAsSpilled(Interval* interval); + void setIntervalAsSplit(Interval* interval); void spillInterval(Interval* interval, RefPosition* fromRefPosition, RefPosition* toRefPosition); void spillGCRefs(RefPosition* killRefPosition); @@ -1136,6 +1138,8 @@ private: unsigned int bbSeqCount; // The Location of the start of the current block. LsraLocation curBBStartLocation; + // True if the method contains any critical edges. + bool hasCriticalEdges; // Ordered list of RefPositions RefPositionList refPositions; @@ -1155,6 +1159,12 @@ private: // Current set of live tracked vars, used during building of RefPositions to determine whether // to preference to callee-save VARSET_TP currentLiveVars; + // Set of variables that may require resolution across an edge. + // This is first constructed during interval building, to contain all the lclVars that are live at BB edges. + // Then, any lclVar that is always in the same register is removed from the set. + VARSET_TP resolutionCandidateVars; + // This set contains all the lclVars that are ever spilled or split. + VARSET_TP splitOrSpilledVars; // Set of floating point variables to consider for callee-save registers. VARSET_TP fpCalleeSaveCandidateVars; #if FEATURE_PARTIAL_SIMD_CALLEE_SAVE |