AndyAyersMS JIT: stateful local ref counts and weights (#19068)
Introduce a notion of state for local var ref counts and weighted ref counts.
Accesses and current state must agree.

State is invalid initially, enabled for an early period around bits of morph,
invalid again for a time, and then enabled normally once lvaMarkRefs is called.

Accesses normally specify RCS_NORMAL as the desired state, but in the accesses
of selected ref counts in morph, specify RCS_EARLY.

Revise how we decide if normal ref counting is active by changing
`lvaLocalVarRefCounted` into a method.

Update `gtIsLikelyRegVar` to not access ref counts when they're not in a valid
state.

Change weight APIs over to use `weight_t`.
Latest commit 45f1ec9 Jul 22, 2018
Permalink
..
Failed to load latest commit information.
armelnonjit Unix/x64 ABI cleanup Apr 17, 2018
crossgen Remove more JIT LEGACY_BACKEND tendrils May 23, 2018
dll Remove more JIT LEGACY_BACKEND tendrils May 23, 2018
jitstd Pass CompAllocator by value (#15025) Jun 30, 2018
linuxnonjit Unix/x64 ABI cleanup Apr 17, 2018
protojit remove FEATURE_AVX_SUPPORT flag Oct 3, 2017
protononjit Unix/x64 ABI cleanup Apr 17, 2018
standalone Make RyuJIT/arm32 the default arm32 JIT Dec 13, 2017
.clang-format Reformat jit sources with clang-tidy and format Aug 11, 2016
.gitmirror Initial commit to populate CoreCLR repo Jan 30, 2015
CMakeLists.txt Create RefPositions without TreeNodeInfo (#16517) May 23, 2018
ClrJit.PAL.exports Enable HFA support for passing arguments on ARM64 May 26, 2016
ClrJit.exports Expose a hosting interface for the JIT. Feb 23, 2016
DIRS.proj Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
ICorJitInfo_API_names.h Add SPMI for getTypeForPrimitiveNumericClass Dec 12, 2017
ICorJitInfo_API_wrapper.hpp Add SPMI for getTypeForPrimitiveNumericClass Dec 12, 2017
Native.rc Update license headers Jan 27, 2016
_typeinfo.h Corrected a few typos in the documentation and comments (#18706) Jun 29, 2018
alloc.cpp Add pooling for JIT scratch memory (#18924) Jul 17, 2018
alloc.h Add pooling for JIT scratch memory (#18924) Jul 17, 2018
arraystack.h Pass CompAllocator by value (#15025) Jun 30, 2018
assertionprop.cpp JIT: stateful local ref counts and weights (#19068) Jul 22, 2018
bitset.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
bitset.h Pass CompAllocator by value (#15025) Jun 30, 2018
bitsetasshortlong.h Improve SSA dominator computation memory usage (#14965) Nov 15, 2017
bitsetasuint64.h Delete OldStyleClearD. (#14874) Nov 7, 2017
bitsetasuint64inclass.h Delete OldStyleClearD. (#14874) Nov 7, 2017
bitsetops.h Fix lsra memory consumption (#11233) Apr 28, 2017
bitvec.h Delete bitset iterators defines (#12642) Jul 11, 2017
block.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
block.h Improve SSA topological sort (#15200) May 24, 2018
blockset.h Delete bitset iterators defines (#12642) Jul 11, 2017
codegen.h Allocate space for siLatestTrackedScopes on demand Jun 30, 2018
codegenarm.cpp Fix ARM cast codegen (#18063) Jun 7, 2018
codegenarm64.cpp [Arm64] JIT generate LSE Atomics Jun 7, 2018
codegenarmarch.cpp Arm64: Fix handling of IP0 & IP1 Jul 18, 2018
codegencommon.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
codegeninterface.h Cleanup and remove unused parameters from genCreateAddrMode (#18258) Jun 2, 2018
codegenlinear.cpp Move temp info from Compiler to RegSet Jun 30, 2018
codegenlinear.h Implementing the AndNot, ExtractLowestSetBit, GetMaskUpToLowestSetBit… Jul 9, 2018
codegenxarch.cpp Move temp info from Compiler to RegSet Jun 30, 2018
compiler.cpp JIT: stateful local ref counts and weights (#19068) Jul 22, 2018
compiler.h JIT: stateful local ref counts and weights (#19068) Jul 22, 2018
compiler.hpp JIT: stateful local ref counts and weights (#19068) Jul 22, 2018
compilerbitsettraits.h Remove references to IAllocator that are now useless Oct 19, 2017
compilerbitsettraits.hpp Pass CompAllocator by value (#15025) Jun 30, 2018
compmemkind.h Track actual SSA memory usage Nov 9, 2017
compphases.h Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
conventions.txt Port of all JIT changes for .NET Framework 4.6.1 changes Dec 12, 2015
copyprop.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
cpp.hint Initial commit to populate CoreCLR repo Jan 30, 2015
dataflow.h Use C++ ranged 'for' for AllSuccessorIter use Apr 20, 2017
decomposelongs.cpp Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
decomposelongs.h Cleanup of Lowering & LsraInfo Oct 11, 2017
delayload.cpp Reformat the JIT sources. Aug 12, 2016
disasm.cpp Fix some build breaks seen with the older VS we use to build with on … Jul 1, 2018
disasm.h Fix build break Nov 6, 2017
earlyprop.cpp Corrected a few typos in the documentation and comments (#18706) Jun 29, 2018
ee_il_dll.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
ee_il_dll.hpp get rid of TYP_CHAR Dec 13, 2017
eeinterface.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
emit.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
emit.h Remove dead/unreachable code from ARM32 and ARM64 emitters (#18878) Jul 13, 2018
emitarm.cpp Remove dead/unreachable code from ARM32 and ARM64 emitters (#18878) Jul 13, 2018
emitarm.h Remove dead/unreachable code from ARM32 and ARM64 emitters (#18878) Jul 13, 2018
emitarm64.cpp Move temp info from Compiler to RegSet Jun 30, 2018
emitarm64.h Remove dead/unreachable code from ARM32 and ARM64 emitters (#18878) Jul 13, 2018
emitdef.h Reformat the JIT sources. Aug 12, 2016
emitfmts.h Reformat the JIT sources. Aug 12, 2016
emitfmtsarm.h Massage code for clang-format Jul 29, 2016
emitfmtsarm64.h [Arm64] Add basic ARMv8.1 Atomics May 17, 2018
emitfmtsxarch.h Fixing encodeXmmRegAsIval to ensure the result meets the "fits in imm… Jul 10, 2018
emitinl.h Remove dead/unreachable code from ARM32 and ARM64 emitters (#18878) Jul 13, 2018
emitjmps.h Massage code for clang-format Jul 29, 2016
emitpub.h Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
emitxarch.cpp Merge pull request #19040 from CarolEidt/DiffFix Jul 20, 2018
emitxarch.h Adding containment support for more x86 hardware intrinsics (#18297) Jun 7, 2018
error.cpp Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
error.h Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
flowgraph.cpp JIT: stateful local ref counts and weights (#19068) Jul 22, 2018
gcdecode.cpp Update license headers Jan 27, 2016
gcencode.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
gcinfo.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
gentree.cpp JIT: stateful local ref counts and weights (#19068) Jul 22, 2018
gentree.h Merge pull request #18891 from CarolEidt/Fix18153 Jul 17, 2018
gschecks.cpp Implement JitDefaultFill Feb 27, 2018
gtlist.h [Windows|Arm64|Vararg] Add FEATURE_ARG_SPLIT (#18346) Jun 14, 2018
gtstructs.h [Windows|Arm64|Vararg] Add FEATURE_ARG_SPLIT (#18346) Jun 14, 2018
hashbv.cpp Cleanup hashBvGlobalData Jun 30, 2018
hashbv.h Cleanup hashBvGlobalData Jun 30, 2018
host.h Add pooling for JIT scratch memory (#18924) Jul 17, 2018
hostallocator.cpp Add pooling for JIT scratch memory (#18924) Jul 17, 2018
hostallocator.h Pass CompAllocator by value (#15025) Jun 30, 2018
hwintrinsic.cpp Move SIMD/Intrinsic handles out of Compiler Jun 30, 2018
hwintrinsic.h Moving the xarch HWIntrtinsicInfo type into its own header file. Jun 2, 2018
hwintrinsicArm64.cpp Applying the formatting patch. Jun 2, 2018
hwintrinsicArm64.h Moving the simdSizeOfHWIntrinsic and numArgsOfHWIntrinsic methods to … Jun 2, 2018
hwintrinsiccodegenxarch.cpp Implementing the Avx2 AlignRight, Blend, and ConvertTo* hwintrinsics. Jul 16, 2018
hwintrinsiclistArm64.h ARM64 SHA256 Crypto intrinsics implementation Feb 28, 2018
hwintrinsiclistxarch.h Implementing the Avx2 AlignRight, Blend, and ConvertTo* hwintrinsics. Jul 16, 2018
hwintrinsicxarch.cpp Updating InstructionSet_BMI1/2 to be controlled by the COMPlus_Enable… Jul 9, 2018
hwintrinsicxarch.h Applying the formatting patch. Jun 2, 2018
importer.cpp JIT: optimize some cases of unused structs (#18819) Jul 13, 2018
inline.cpp JIT: fix issue with inline observations (#15713) Jan 6, 2018
inline.def PInvoke calli support for CoreRT (#18534) Jun 19, 2018
inline.h Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
inlinepolicy.cpp Typo (#18122) May 25, 2018
inlinepolicy.h Corrected a few typos in the documentation and comments (#18706) Jun 29, 2018
instr.cpp JIT: Eliminate RegTracker (#18179) (#18230) Jun 2, 2018
instr.h ARM64 SHA256 Crypto intrinsics implementation Feb 28, 2018
instrs.h Reformat the JIT sources. Aug 12, 2016
instrsarm.h ARM32: Fix ubfx instruction encoding. May 19, 2017
instrsarm64.h [Arm64] Add basic ARMv8.1 Atomics May 17, 2018
instrsxarch.h Implementing the Avx2 AlignRight, Blend, and ConvertTo* hwintrinsics. Jul 16, 2018
jit.h Remove unused Compiler members Jun 30, 2018
jit.settings.targets fix desktop (#18092) May 23, 2018
jitconfig.cpp fix jit format after better-wildcards PR (#18008) May 15, 2018
jitconfig.h Code review feedback May 14, 2018
jitconfigvalues.h JIT: implement assembly name dissassembly filtering (#18306) Jun 6, 2018
jitee.h ARM64 SHA256 Crypto intrinsics implementation Feb 28, 2018
jiteh.cpp Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
jiteh.h JIT: Finally Optimizations Jan 11, 2017
jitexpandarray.h Pass CompAllocator by value (#15025) Jun 30, 2018
jitgcinfo.h Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
jithashtable.h Pass CompAllocator by value (#15025) Jun 30, 2018
jitpch.cpp Update license headers Jan 27, 2016
jitpch.h Remove JIT-EE version ifdefs (#10273) Mar 18, 2017
jitstd.h Reformat the JIT sources. Aug 12, 2016
jittelemetry.cpp Update the telemetry logging to use MEASURES instead of TELEMENTRY Jul 10, 2017
jittelemetry.h Reformat the JIT sources. Aug 12, 2016
lclvars.cpp JIT: stateful local ref counts and weights (#19068) Jul 22, 2018
lir.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
lir.h Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
liveness.cpp JIT: handle implicit local var references via local var attribute bit ( Jul 20, 2018
loopcloning.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
loopcloning.h Pass CompAllocator by value (#15025) Jun 30, 2018
loopcloningopts.h Reformat the JIT sources. Aug 12, 2016
lower.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
lower.h Remove relocations for vtable chunks (#17147) Jun 29, 2018
lowerarmarch.cpp Merge pull request #18130 from sdmaclea/PR-ARM64-JIT-Use-LSE-Atomics Jun 27, 2018
lowerxarch.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
lsra.cpp Merge pull request #18999 from CarolEidt/Fix16359 Jul 19, 2018
lsra.h Kill RCX when used by shift Jul 17, 2018
lsra_reftypes.h Massage code for clang-format Jul 29, 2016
lsraarm.cpp delete unused variables from jit (#18121) May 25, 2018
lsraarm64.cpp Build uses for atomic ops Jul 3, 2018
lsraarmarch.cpp Ensure BuildUse uses the correct reg number Jul 16, 2018
lsrabuild.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
lsraxarch.cpp Kill RCX when used by shift Jul 17, 2018
morph.cpp JIT: stateful local ref counts and weights (#19068) Jul 22, 2018
namedintrinsiclist.h Moving the xarch HWIntrtinsicInfo type into its own header file. Jun 2, 2018
objectalloc.cpp Delete GenTreePtr. (#16027) Feb 1, 2018
objectalloc.h Delete GenTreePtr. (#16027) Feb 1, 2018
opcode.h Reformat the JIT sources. Aug 12, 2016
optcse.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
optimizer.cpp JIT: stateful local ref counts and weights (#19068) Jul 22, 2018
phase.h Reformat the JIT sources. Aug 12, 2016
rangecheck.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
rangecheck.h Pass CompAllocator by value (#15025) Jun 30, 2018
rationalize.cpp Cross-bitness in instance fields placement and CORINFO structs (#18366) Jun 25, 2018
rationalize.h Format code and address PR feedback. Jun 26, 2017
regalloc.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
regalloc.h Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
register.h Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
register_arg_convention.cpp Reformat the JIT sources. Aug 12, 2016
register_arg_convention.h Remove useless variable Sep 27, 2017
registerarm.h Massage code for clang-format Jul 29, 2016
registerarm64.h Massage code for clang-format Jul 29, 2016
reglist.h Update license headers Jan 27, 2016
regset.cpp Move temp info from Compiler to RegSet Jun 30, 2018
regset.h Move temp info from Compiler to RegSet Jun 30, 2018
scopeinfo.cpp JIT: force all local var ref counts to be accessed via API (#18979) Jul 18, 2018
sideeffects.cpp Include the processor atomic operations in the OperIsStore category Jul 12, 2018
sideeffects.h x86: adjust stack level at throw blocks Oct 12, 2016
simd.cpp Merge pull request #18504 from mikedn/comp-small Jul 3, 2018
simd.h Change VEX-encoding selection to avoid AVX-SSE transition penalties Nov 14, 2017
simdcodegenxarch.cpp Corrected a few typos in the documentation and comments (#18706) Jun 29, 2018
simdintrinsiclist.h Disable the ConvertToUInt intrinsics by removing them from simdintrin… Jan 25, 2018
sm.cpp JIT: remove match accounting from inliner state machine Jan 13, 2017
sm.h JIT: remove match accounting from inliner state machine Jan 13, 2017
smallhash.h Pass CompAllocator by value (#15025) Jun 30, 2018
smcommon.cpp Reformat the JIT sources. Aug 12, 2016
smcommon.h Reformat the JIT sources. Aug 12, 2016
smdata.cpp Use macro _countof instead of explicit sizeof(arr) / sizeof(arr[0]) o… Dec 12, 2017
smopcode.def Update license headers Jan 27, 2016
smopcodemap.def Update license headers Jan 27, 2016
smopenum.h Reformat the JIT sources. Aug 12, 2016
smweights.cpp Use macro _countof instead of explicit sizeof(arr) / sizeof(arr[0]) o… Dec 12, 2017
ssabuilder.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
ssabuilder.h Merge pull request #15348 from mikedn/ssa-indir May 19, 2018
ssaconfig.h Use logf() instead of JitDump() (#13265) Aug 8, 2017
ssarenamestate.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
ssarenamestate.h Pass CompAllocator by value (#15025) Jun 30, 2018
stacklevelsetter.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
stacklevelsetter.h [RyuJit] Stack level setter (#15597) Feb 14, 2018
target.h Arm64: Fix handling of IP0 & IP1 Jul 18, 2018
targetamd64.cpp Reformat the JIT sources. Aug 12, 2016
targetarm.cpp Reformat the JIT sources. Aug 12, 2016
targetarm64.cpp Reformat the JIT sources. Aug 12, 2016
targetx86.cpp Reformat the JIT sources. Aug 12, 2016
tinyarray.h Reformat jit code on OSX Sep 21, 2016
titypes.h Reformat the JIT sources. Aug 12, 2016
treelifeupdater.cpp Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
treelifeupdater.h add treeLifeUpdater (#18021) May 23, 2018
typeinfo.cpp Reformat the JIT sources. Aug 12, 2016
typelist.h Remove unused TYP_ARRAY/PTR/FUNC (#15529) Dec 20, 2017
unwind.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
unwind.h Fix #9457 Mar 14, 2017
unwindamd64.cpp delete unused variables from jit (#18121) May 25, 2018
unwindarm.cpp [armel tizen] Fixed CoreRT issue #4626 unwinding support (#15913) Jan 19, 2018
unwindarm64.cpp [RyuJIT/ARM32] Support for CFI unwind info (#14447) Oct 19, 2017
unwindx86.cpp [RyuJIT/ARM32] Support for CFI unwind info (#14447) Oct 19, 2017
utils.cpp Pass CompAllocator by value (#15025) Jun 30, 2018
utils.h Pass CompAllocator by value (#15025) Jun 30, 2018
valuenum.cpp JIT: fix value numbering to handle GT_NULLCHECK more generally (#18942) Jul 17, 2018
valuenum.h Pass CompAllocator by value (#15025) Jun 30, 2018
valuenumfuncs.h Adding valuenum support for acosh, asinh, atanh, and cbrt Dec 13, 2017
valuenumtype.h Introduce `MemoryKind` abstraction Feb 8, 2017
varset.h Remove JIT LEGACY_BACKEND code (#18064) May 22, 2018
vartype.h get rid of TYP_CHAR Dec 13, 2017
x86_instrs.h Reformat the JIT sources. Aug 12, 2016