diff options
author | Brian Sullivan <briansul@microsoft.com> | 2019-01-03 19:11:34 -0800 |
---|---|---|
committer | Brian Sullivan <briansul@microsoft.com> | 2019-01-09 15:57:45 -0800 |
commit | 8c12e27d308a35132f8608c0e6f988ce9617c59a (patch) | |
tree | 95e4f9b6f76838f35be8942005f99b76d65a4861 /src/jit/flowgraph.cpp | |
parent | 5c480a4a83339564d4631762c100a5e12ed87357 (diff) | |
download | coreclr-8c12e27d308a35132f8608c0e6f988ce9617c59a.tar.gz coreclr-8c12e27d308a35132f8608c0e6f988ce9617c59a.tar.bz2 coreclr-8c12e27d308a35132f8608c0e6f988ce9617c59a.zip |
When performing devirtualization we can not do both an unboxing optimization and a tail call optimization
Explicit tail calls are now checked for and blocked from performing an unboxing operation in impDevirtualizeCall
If late devirtualization calls impDevirtualizeCall with an IMPLICIT_TAILCALL we will clear this flag if we
decide to perform the unboxing operation.
Diffstat (limited to 'src/jit/flowgraph.cpp')
-rw-r--r-- | src/jit/flowgraph.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/jit/flowgraph.cpp b/src/jit/flowgraph.cpp index 4e2fc40bba..feaceb3dcb 100644 --- a/src/jit/flowgraph.cpp +++ b/src/jit/flowgraph.cpp @@ -22510,7 +22510,8 @@ Compiler::fgWalkResult Compiler::fgLateDevirtualization(GenTree** pTree, fgWalkD unsigned methodFlags = 0; CORINFO_CONTEXT_HANDLE context = nullptr; const bool isLateDevirtualization = true; - comp->impDevirtualizeCall(call, &method, &methodFlags, &context, nullptr, isLateDevirtualization); + bool explicitTailCall = (call->gtCall.gtCallMoreFlags & GTF_CALL_M_EXPLICIT_TAILCALL) != 0; + comp->impDevirtualizeCall(call, &method, &methodFlags, &context, nullptr, isLateDevirtualization, explicitTailCall); } } else if (tree->OperGet() == GT_ASG) |