diff options
author | Carol Eidt <carol.eidt@microsoft.com> | 2016-06-07 13:26:18 -0700 |
---|---|---|
committer | Carol Eidt <carol.eidt@microsoft.com> | 2016-06-07 13:26:18 -0700 |
commit | af8079a67c2c83e5760402f6e87a232514a6061b (patch) | |
tree | f564c18e0c9c94746c3371bddbf2d12fbbf5b7a3 /Documentation | |
parent | 99ae542eafab693351819de623e0618ad6e5ae94 (diff) | |
download | coreclr-af8079a67c2c83e5760402f6e87a232514a6061b.tar.gz coreclr-af8079a67c2c83e5760402f6e87a232514a6061b.tar.bz2 coreclr-af8079a67c2c83e5760402f6e87a232514a6061b.zip |
Update first-class-structs.md
Add a link to Issue #5556, and correct some formatting issues.
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/design-docs/first-class-structs.md | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/Documentation/design-docs/first-class-structs.md b/Documentation/design-docs/first-class-structs.md index 33a0950cbb..3bf842f2fd 100644 --- a/Documentation/design-docs/first-class-structs.md +++ b/Documentation/design-docs/first-class-structs.md @@ -64,6 +64,10 @@ static foo getfoo() { return new foo(); } (factor x8 slower than non-generic few calls loop). * I am still investigating this issue. +* \#5556 RuyJIT: structs in parameters and enregistering + * This also requires further investigation, but requires us to "Add support in prolog to extract fields, and + remove the restriction of not promoting incoming reg structs that have more than one field" - see [Dependent Work Items](https://github.com/dotnet/coreclr/blob/master/Documentation/design-docs/first-class-structs.md#dependent-work-items) + Normalizing Struct Types ------------------------ We would like to facilitate full enregistration of structs with the following properties: @@ -199,14 +203,14 @@ All struct args imported as GT_OBJ, transformed as follows during morph: * P_FULL promoted locals: * Remain as a GT_LCL_VAR nodes, with the appropriate fixed-size struct type. * Note that these may or may not be passed in registers. -P_INDEP promoted locals: -These are the ones where the fields don’t match the reg types -GT_STRUCT (or something) for aggregating multiple fields into a single register -Op1 is a lclVar for the first promoted field -Op2 is the lclVar for the next field, OR another GT_STRUCT -Bit offset for the second child -All other cases (non-locals, OR P_DEP or non-promoted locals): -GT_LIST of GT_IND for each half +* P_INDEP promoted locals: + * These are the ones where the fields don’t match the reg types + GT_STRUCT (or something) for aggregating multiple fields into a single register + * Op1 is a lclVar for the first promoted field + * Op2 is the lclVar for the next field, OR another GT_STRUCT + * Bit offset for the second child +* All other cases (non-locals, OR P_DEP or non-promoted locals): + * GT_LIST of GT_IND for each half ### Struct Return |