diff options
author | Andy Ayers <andya@microsoft.com> | 2017-04-17 13:04:23 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-17 13:04:23 -0700 |
commit | c06fb332e7bb77a55bda724a56b33d6094a0a042 (patch) | |
tree | cf393ffb3e1e0c1a022bf344be41241e9e2272ef /src/vm/method.cpp | |
parent | 81c550179aef561fd6578109ff65185d1daafe8b (diff) | |
download | coreclr-c06fb332e7bb77a55bda724a56b33d6094a0a042.tar.gz coreclr-c06fb332e7bb77a55bda724a56b33d6094a0a042.tar.bz2 coreclr-c06fb332e7bb77a55bda724a56b33d6094a0a042.zip |
Jit intrinsics for Span<T>.get_Item and ReadOnlySpan<T>.get_Item. (#10910)
Implement these two methods as optional-expand jit intrinsics.
Uses `GT_ARR_BOUNDS_CHECK` for the bounds check so in some cases
downstream code is able to eliminate redundant checks. Fully general
support (on par with arrays in most cases) is still work in progress.
Update one bit of code in the optimizer that assumed it knew the
tree types that appeared in a `GT_ARR_BOUNDS_CHECK`.
Add benchmark tests for Span and ReadOnlySpan indexers.
Tests ability of jit to reason about indexer properties with respect
to loop bounds and related indexer uses. Some cases inspired by span
indexer usage in Kestrel.
Closes #10785.
Also addresses lack of indexer inlining noted in #10031. Span indexers
should now always be inlined, even when invoked from shared methods.
Diffstat (limited to 'src/vm/method.cpp')
-rw-r--r-- | src/vm/method.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/vm/method.cpp b/src/vm/method.cpp index a72b07b404..77a6a0d37f 100644 --- a/src/vm/method.cpp +++ b/src/vm/method.cpp @@ -2404,7 +2404,7 @@ BOOL MethodDesc::IsFCallOrIntrinsic() if (IsFCall() || IsArray()) return TRUE; - // Intrinsic methods on ByReference<T> or Span<T> + // Intrinsic methods on ByReference<T>, Span<T>, or ReadOnlySpan<T> MethodTable * pMT = GetMethodTable(); if (pMT->IsByRefLike() && pMT->GetModule()->IsSystem()) return TRUE; |