diff options
author | Andy Ayers <andya@microsoft.com> | 2017-10-05 11:31:58 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-05 11:31:58 -0700 |
commit | b085bfacb5eed105e3e55681f75c5413d91c1f86 (patch) | |
tree | 632213098eebafc8a28d56d8bf1e4aace2206289 /src/jit/gtstructs.h | |
parent | 6c18b66b6f4cc904065f8abaa442fd112493a36c (diff) | |
download | coreclr-b085bfacb5eed105e3e55681f75c5413d91c1f86.tar.gz coreclr-b085bfacb5eed105e3e55681f75c5413d91c1f86.tar.bz2 coreclr-b085bfacb5eed105e3e55681f75c5413d91c1f86.zip |
JIT: More type equality opts (#14317)
* JIT: Wrap some runtime lookups in new node type
Work based on the plan outlined in #14305.
Introduce a new unary node type GT_RUNTIMELOOKUP that wraps existing
runtime lookup trees created in `impLookupToTree` and holds onto the
handle that inspired the lookup.
Note there are other importer paths that create lookups directly that
we might also want to wrap, though wrapping is not a requirement for
correctness.
Keep this node type around through morph, then unwrap and just use
the wrapped node after that.
* JIT: More enhancements to type equality testing
The jit is now able to optimize some type equality checks in shared
method instances where one or both of the types require runtime lookup,
for instance comparing `T` to a value type, or comparing two different
value types `V1<T>` and `V2<T>`.
Add two new jit interface methods, one for testing for type equality and
the other for type casting.
These return Must/MustNot/Maybe results depending on whether or not
the equality or cast can be resolved at jit time.
Implement the equality check. Use this to enhance the type equality opts
in the jit for both direct comparison and the checking done by unbox.any.
Diffstat (limited to 'src/jit/gtstructs.h')
-rw-r--r-- | src/jit/gtstructs.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/src/jit/gtstructs.h b/src/jit/gtstructs.h index 853ccebe9f..02143b49e2 100644 --- a/src/jit/gtstructs.h +++ b/src/jit/gtstructs.h @@ -105,6 +105,7 @@ GTSTRUCT_1(PhysReg , GT_PHYSREG) GTSTRUCT_1(SIMD , GT_SIMD) #endif // FEATURE_SIMD GTSTRUCT_1(AllocObj , GT_ALLOCOBJ) +GTSTRUCT_1(RuntimeLookup, GT_RUNTIMELOOKUP) GTSTRUCT_2(CC , GT_JCC, GT_SETCC) #if !defined(LEGACY_BACKEND) && defined(_TARGET_ARM_) #ifdef ARM_SOFTFP |