summaryrefslogtreecommitdiff
path: root/src/jit/flowgraph.cpp
diff options
context:
space:
mode:
authorBrian Sullivan <briansul@microsoft.com>2019-01-03 19:11:34 -0800
committerBrian Sullivan <briansul@microsoft.com>2019-01-09 15:57:45 -0800
commit8c12e27d308a35132f8608c0e6f988ce9617c59a (patch)
tree95e4f9b6f76838f35be8942005f99b76d65a4861 /src/jit/flowgraph.cpp
parent5c480a4a83339564d4631762c100a5e12ed87357 (diff)
downloadcoreclr-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.cpp3
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)