diff options
author | Pat Gavlin <pgavlin@gmail.com> | 2016-08-19 10:44:46 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-08-19 10:44:46 -0700 |
commit | 738f93e7baf5aef7639cdd4567e9cb1746aed619 (patch) | |
tree | 425681f48e72df83235e2a77a6c84cb93bed3927 /src/jit/codegeninterface.h | |
parent | 00c85b302a078d5d13cfe9ff8cb453cd8296d6aa (diff) | |
download | coreclr-738f93e7baf5aef7639cdd4567e9cb1746aed619.tar.gz coreclr-738f93e7baf5aef7639cdd4567e9cb1746aed619.tar.bz2 coreclr-738f93e7baf5aef7639cdd4567e9cb1746aed619.zip |
Implement the proposed design for RyuJIT's LIR. (#6689)
These changes implement the design for RyuJIT's LIR described in https://github.com/dotnet/coreclr/blob/master/Documentation/design-docs/removing-embedded-statements.md.
The following passes required changes:
Rationalize, which has been almost completely rewritten
Long decomposition
Target-independent lowering
Target-dependent lowering
LSRA
Liveness
Flowgraph optimization
Codegen
For the most part, these changes are confined to the backend. Common code that needed to be updated included liveness, flowgraph optimization, and a few miscellaneous utilities.
The utilities used to analyze and manipulate LIR live (almost) entirely in src/jit/lir.{cpp,h}. The core concepts that are unique to LIR are LIR::Use and LIR::Range. The latter is a tuple that captures an SDSU def (i.e. an LIR node) and its corresponding use->def edge and user. The former serves to abstract a self-contained sequence of LIR nodes that make up e.g. the contents of a basic block.
Testing indicates that neither JIT throughput nor code quality are significantly impacted by these changes.
Diffstat (limited to 'src/jit/codegeninterface.h')
-rw-r--r-- | src/jit/codegeninterface.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/jit/codegeninterface.h b/src/jit/codegeninterface.h index f5eec89d33..e9abbe6b3c 100644 --- a/src/jit/codegeninterface.h +++ b/src/jit/codegeninterface.h @@ -144,8 +144,10 @@ protected: void genUpdateLife(GenTreePtr tree); void genUpdateLife(VARSET_VALARG_TP newLife); +#ifdef LEGACY_BACKEND regMaskTP genLiveMask(GenTreePtr tree); regMaskTP genLiveMask(VARSET_VALARG_TP liveSet); +#endif void genGetRegPairFromMask(regMaskTP regPairMask, regNumber* pLoReg, regNumber* pHiReg); |