You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
and it may be worth considering (in future) whether we can avoiding adding them
41
41
in the first place.
42
42
43
-
*\#1161 RyuJIT properly optimizes structs with a single field if the field type is int but not if it is double
43
+
*[\#1161 RyuJIT properly optimizes structs with a single field if the field type is int but not if it is double](https://github.com/dotnet/coreclr/issues/1161)
44
44
* This issue arises because we never promote a struct with a single double field, due to
45
45
the fact that such a struct may be passed or returned in a general purpose register.
46
46
This issue could be addressed independently, but should "fall out" of improved heuristics
47
47
for when to promote and enregister structs.
48
48
49
-
*\#1636 Add optimization to avoid copying a struct if passed by reference and there are no
50
-
writes to and no reads after passed to a callee.
49
+
*[\#1636 Add optimization to avoid copying a struct if passed by reference and there are no
50
+
writes to and no reads after passed to a callee](https://github.com/dotnet/coreclr/issues/1636).
51
51
* This issue is nearly the same as the above, except that in this case the desire is to
52
52
eliminate unneeded copies locally (i.e. not just due to inlining), in the case where
53
53
the struct may or may not be passed or returned directly.
54
54
* Unfortunately, there is not currently a scenario or test case for this issue.
55
55
56
-
*\#3144 Avoid marking tmp as DoNotEnregister in tmp=GT_CALL() where call returns a
57
-
enregisterable struct in two return registers
56
+
*[\#3144 Avoid marking tmp as DoNotEnregister in tmp=GT_CALL() where call returns a
57
+
enregisterable struct in two return registers](https://github.com/dotnet/coreclr/issues/3144)
58
58
* This issue could be addressed without First Class Structs. However,
59
59
it will be easier with struct assignments that are normalized as regular assignments, and
60
60
should be done along with the streamlining of the handling of ABI-specific struct passing
61
61
and return values.
62
62
63
-
*\#3539 RyuJIT: Poor code quality for tight generic loop with many inlineable calls
63
+
*[\#3539 RyuJIT: Poor code quality for tight generic loop with many inlineable calls](https://github.com/dotnet/coreclr/issues/3539)
64
64
(factor x8 slower than non-generic few calls loop).
65
65
* I am still investigating this issue.
66
66
67
-
*\#5556 RuyJIT: structs in parameters and enregistering
67
+
*[\#5556 RuyJIT: structs in parameters and enregistering](https://github.com/dotnet/coreclr/issues/5556)
68
68
* This also requires further investigation, but requires us to "Add support in prolog to extract fields, and
69
69
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)
70
70
@@ -641,6 +641,7 @@ be handled in a more general fashion in `fgMorphCopyBlock()`?
641
641
The latter seems desirable for its general applicability.
642
642
643
643
One way to handle this might be:
644
+
644
645
1. Whenever you have a case of mismatched structs (call args, call node, or return node),
645
646
create a promoted temp of the "fake struct type", e.g. for arm you would introduce three
646
647
new temps for the struct, and for each of its TYP_LONG promoted fields.
0 commit comments