summaryrefslogtreecommitdiff
path: root/src/jit/lsra.h
diff options
context:
space:
mode:
authorCarol Eidt <carol.eidt@microsoft.com>2016-10-04 15:10:31 -0700
committerCarol Eidt <carol.eidt@microsoft.com>2016-12-06 17:14:20 -0800
commite94463ea1038ddf9962f1478d0dfd0ffb49b0625 (patch)
tree895a32926874516bdff52747a9ac887ba74c18ff /src/jit/lsra.h
parent2acb29c3e9aeeab5292d6481e8d3bf583ae110ab (diff)
downloadcoreclr-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.h10
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