From 8c12e27d308a35132f8608c0e6f988ce9617c59a Mon Sep 17 00:00:00 2001 From: Brian Sullivan Date: Thu, 3 Jan 2019 19:11:34 -0800 Subject: 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. --- src/jit/flowgraph.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/jit/flowgraph.cpp') 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) -- cgit v1.2.3