From c1abf87fd0da17020eec13efb22bb4336b82eb19 Mon Sep 17 00:00:00 2001 From: Will Smith Date: Thu, 23 Feb 2023 14:21:59 -0800 Subject: [PATCH] [JIT] On importing a CEE_INITOBJ for a simd, construct a VecCon(0) (#81982) * On importing a CEE_INITOBJ for a simd, construct a VecCon(0) of that type * Formatting * Check layout to determine if type is a SIMD to avoid redundant impNormStructType call * Fix assert * Remove assert * Update src/coreclr/jit/importer.cpp Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com> * Update importer.cpp --------- Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com> --- src/coreclr/jit/importer.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/coreclr/jit/importer.cpp b/src/coreclr/jit/importer.cpp index 891484080994ba..a46e48a25c68b9 100644 --- a/src/coreclr/jit/importer.cpp +++ b/src/coreclr/jit/importer.cpp @@ -10605,7 +10605,7 @@ void Compiler::impImportBlockCode(BasicBlock* block) goto EVAL_APPEND; case CEE_INITOBJ: - + { assertImp(sz == sizeof(unsigned)); _impResolveToken(CORINFO_TOKENKIND_Class); @@ -10613,6 +10613,15 @@ void Compiler::impImportBlockCode(BasicBlock* block) JITDUMP(" %08X", resolvedToken.token); lclTyp = JITtype2varType(info.compCompHnd->asCorInfoType(resolvedToken.hClass)); + + ClassLayout* layout = nullptr; + + if (lclTyp == TYP_STRUCT) + { + layout = typGetObjLayout(resolvedToken.hClass); + lclTyp = layout->GetType(); + } + if (lclTyp != TYP_STRUCT) { op2 = gtNewZeroConNode(genActualType(lclTyp)); @@ -10620,10 +10629,11 @@ void Compiler::impImportBlockCode(BasicBlock* block) } op1 = impPopStack().val; - op1 = gtNewStructVal(typGetObjLayout(resolvedToken.hClass), op1); + op1 = gtNewStructVal(layout, op1); op2 = gtNewIconNode(0); op1 = gtNewBlkOpNode(op1, op2, (prefixFlags & PREFIX_VOLATILE) != 0); goto SPILL_APPEND; + } case CEE_INITBLK: