Skip to content

Commit 43eb602

Browse files
committed
Improve TP for Span_get_Item
1 parent 909880b commit 43eb602

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

src/coreclr/jit/importer.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4177,13 +4177,16 @@ GenTree* Compiler::impIntrinsic(GenTree* newobjThis,
41774177
GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, index, length, SCK_RNGCHK_FAIL);
41784178

41794179
// Element access
4180-
GenTree* indexIntPtr = impImplicitIorI4Cast(indexClone, TYP_I_IMPL);
4181-
GenTree* sizeofNode = gtNewIconNode(elemSize);
4182-
GenTree* mulNode = gtNewOperNode(GT_MUL, TYP_I_IMPL, indexIntPtr, sizeofNode);
4183-
CORINFO_FIELD_HANDLE ptrHnd = info.compCompHnd->getFieldInClass(clsHnd, 0);
4184-
const unsigned ptrOffset = info.compCompHnd->getFieldOffset(ptrHnd);
4185-
GenTree* data = gtNewFieldRef(TYP_BYREF, ptrHnd, ptrToSpanClone, ptrOffset);
4186-
GenTree* result = gtNewOperNode(GT_ADD, TYP_BYREF, data, mulNode);
4180+
index = impImplicitIorI4Cast(indexClone, TYP_I_IMPL);
4181+
if (elemSize != 1)
4182+
{
4183+
GenTree* sizeofNode = gtNewIconNode(elemSize);
4184+
index = gtNewOperNode(GT_MUL, TYP_I_IMPL, index, sizeofNode);
4185+
}
4186+
CORINFO_FIELD_HANDLE ptrHnd = info.compCompHnd->getFieldInClass(clsHnd, 0);
4187+
const unsigned ptrOffset = info.compCompHnd->getFieldOffset(ptrHnd);
4188+
GenTree* data = gtNewFieldRef(TYP_BYREF, ptrHnd, ptrToSpanClone, ptrOffset);
4189+
GenTree* result = gtNewOperNode(GT_ADD, TYP_BYREF, data, index);
41874190

41884191
// Prepare result
41894192
var_types resultType = JITtype2varType(sig->retType);

0 commit comments

Comments
 (0)