From 85d2bbc2ddb28164ea15e0e152bc44afdbc04ab3 Mon Sep 17 00:00:00 2001 From: Egor Chesakov Date: Fri, 7 Aug 2020 17:28:41 -0700 Subject: [PATCH] When returning a SIMD value use v0 register as the candidate for source operand of GT_RETURN in case when it is a single-register local variable --- src/coreclr/src/jit/lsrabuild.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/coreclr/src/jit/lsrabuild.cpp b/src/coreclr/src/jit/lsrabuild.cpp index d902b3a..e2f8775 100644 --- a/src/coreclr/src/jit/lsrabuild.cpp +++ b/src/coreclr/src/jit/lsrabuild.cpp @@ -3443,10 +3443,15 @@ int LinearScan::BuildReturn(GenTree* tree) if (varTypeIsSIMD(tree) && !op1->IsMultiRegLclVar()) { useCandidates = allSIMDRegs(); + if (op1->OperGet() == GT_LCL_VAR) + { + assert(op1->TypeGet() != TYP_SIMD32); + useCandidates = RBM_DOUBLERET; + } BuildUse(op1, useCandidates); return 1; } -#endif // !TARGET_ARM64 +#endif // TARGET_ARM64 if (varTypeIsStruct(tree)) { -- 2.7.4