From e94463ea1038ddf9962f1478d0dfd0ffb49b0625 Mon Sep 17 00:00:00 2001 From: Carol Eidt Date: Tue, 4 Oct 2016 15:10:31 -0700 Subject: Streamline LSRA resolution Only do resolution when required, and only for variables that may need it. --- src/jit/lsra.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/jit/lsra.h') 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 -- cgit v1.2.3