diff options
author | Joseph Tremoulet <jotrem@microsoft.com> | 2016-07-29 13:54:37 -0400 |
---|---|---|
committer | Joseph Tremoulet <jotrem@microsoft.com> | 2016-08-04 20:29:03 -0400 |
commit | 6fe08a80542d496e657eaed4902bd33ebce4c6f8 (patch) | |
tree | 9058f99c7502b156ada3724083b1e7733faf0ee5 /src/jit/inline.def | |
parent | 3931929b53f1fb01d9d137a04906c3047e61d4ba (diff) | |
download | coreclr-6fe08a80542d496e657eaed4902bd33ebce4c6f8.tar.gz coreclr-6fe08a80542d496e657eaed4902bd33ebce4c6f8.tar.bz2 coreclr-6fe08a80542d496e657eaed4902bd33ebce4c6f8.zip |
Allow inlining when inlinee has `starg`
The inliner's restriction that methods that make use of the `starg` opcode
cannot be inlined is somewhat artificial. The comments indicate that the
reason for this excluion is because the inliner forward-substitutes
argument expressions in place of parameter references, but the codepaths
required to force evaluating an argument expression at the callsite and
reference that result in place of parameter references is already in place
to handle `ldarga` and complex argument expressions.
This change
- adds an `argHasStargOp` flag to the `inlArgInfo` type, similar
to the existing `argHasLdargaOp` flag
- removes the `CALLEE_STORES_TO_ARGUMENT` inline observation and instead
sets the new flag for `starg` cases
- updates `impInlineFetchArg` to force evaluation to a temp for arguments
that are marked `argHasStargOp`
- updates `starg` processing in the importer to store to the
corresponding temp when importing for an inlinee
Resolves #6014.
Diffstat (limited to 'src/jit/inline.def')
-rw-r--r-- | src/jit/inline.def | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/src/jit/inline.def b/src/jit/inline.def index f2d90ea15a..69b617d4c3 100644 --- a/src/jit/inline.def +++ b/src/jit/inline.def @@ -93,7 +93,6 @@ INLINE_OBSERVATION(NUMBER_OF_ARGUMENTS, int, "number of arguments", INLINE_OBSERVATION(NUMBER_OF_BASIC_BLOCKS, int, "number of basic blocks", INFORMATION, CALLEE) INLINE_OBSERVATION(NUMBER_OF_LOCALS, int, "number of locals", INFORMATION, CALLEE) INLINE_OBSERVATION(RANDOM_ACCEPT, bool, "random accept", INFORMATION, CALLEE) -INLINE_OBSERVATION(STORES_TO_ARGUMENT, bool, "stores to argument", INFORMATION, CALLEE) INLINE_OBSERVATION(UNSUPPORTED_OPCODE, bool, "unsupported opcode", INFORMATION, CALLEE) // ------ Caller Corectness ------- |