summaryrefslogtreecommitdiff
path: root/src/jit/gtstructs.h
diff options
context:
space:
mode:
authorAndy Ayers <andya@microsoft.com>2017-10-05 11:31:58 -0700
committerGitHub <noreply@github.com>2017-10-05 11:31:58 -0700
commitb085bfacb5eed105e3e55681f75c5413d91c1f86 (patch)
tree632213098eebafc8a28d56d8bf1e4aace2206289 /src/jit/gtstructs.h
parent6c18b66b6f4cc904065f8abaa442fd112493a36c (diff)
downloadcoreclr-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.h1
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