@@ -4177,13 +4177,16 @@ GenTree* Compiler::impIntrinsic(GenTree* newobjThis,
4177
4177
GenTreeBoundsChk(GT_ARR_BOUNDS_CHECK, TYP_VOID, index, length, SCK_RNGCHK_FAIL);
4178
4178
4179
4179
// 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);
4187
4190
4188
4191
// Prepare result
4189
4192
var_types resultType = JITtype2varType(sig->retType);
0 commit comments