Skip to content

Commit 592b97d

Browse files
authored
Merge pull request eclipse-openj9#21322 from rmnattas/oh-gvp
Use index for boundary check and offset for dest in str.inflate OffHeap
2 parents be0196b + 17e5f7e commit 592b97d

File tree

1 file changed

+4
-48
lines changed

1 file changed

+4
-48
lines changed

runtime/compiler/optimizer/J9RecognizedCallTransformer.cpp

+4-48
Original file line numberDiff line numberDiff line change
@@ -314,19 +314,6 @@ void J9::RecognizedCallTransformer::process_java_lang_StringLatin1_inflate_BIBII
314314
TR::Node *dstOff = node->getChild(3);
315315
TR::Node *length = node->getChild(4);
316316

317-
TR::Node *hdrSize = createHdrSizeNode(comp(), node);
318-
319-
TR::Node *strideNode;
320-
if (is64BitTarget)
321-
{
322-
strideNode = TR::Node::create(node, TR::lconst);
323-
strideNode->setLongInt(2);
324-
}
325-
else
326-
{
327-
strideNode = TR::Node::create(node, TR::iconst, 0, 2);
328-
}
329-
330317
TR::Node *arrayTranslateNode = TR::Node::create(node, TR::arraytranslate, 6);
331318
arrayTranslateNode->setSourceIsByteArrayTranslate(true);
332319
arrayTranslateNode->setTargetIsByteArrayTranslate(false);
@@ -335,42 +322,11 @@ void J9::RecognizedCallTransformer::process_java_lang_StringLatin1_inflate_BIBII
335322
arrayTranslateNode->setTableBackedByRawStorage(true);
336323
arrayTranslateNode->setSymbolReference(comp()->getSymRefTab()->findOrCreateArrayTranslateSymbol());
337324

338-
TR::Node *srcAddr, *dstAddr;
325+
TR::Node *tmpNode = TR::TransformUtil::generateConvertArrayElementIndexToOffsetTrees(comp(), srcOff, NULL, 1, false);
326+
TR::Node *srcAddr = TR::TransformUtil::generateArrayElementAddressTrees(comp(), srcObj, tmpNode);
327+
tmpNode = TR::TransformUtil::generateConvertArrayElementIndexToOffsetTrees(comp(), dstOff, NULL, 2, false);
328+
TR::Node *dstAddr = TR::TransformUtil::generateArrayElementAddressTrees(comp(), dstObj, tmpNode);
339329

340-
#if defined(OMR_GC_SPARSE_HEAP_ALLOCATION)
341-
if (TR::Compiler->om.isOffHeapAllocationEnabled())
342-
{
343-
dstOff = TR::TransformUtil::generateConvertArrayElementIndexToOffsetTrees(comp(), dstOff, strideNode, 0, false);
344-
srcAddr = TR::TransformUtil::generateArrayElementAddressTrees(comp(), srcObj, srcOff);
345-
dstAddr = TR::TransformUtil::generateArrayElementAddressTrees(comp(), dstObj, dstOff);
346-
}
347-
else
348-
#endif /* OMR_GC_SPARSE_HEAP_ALLOCATION */
349-
{
350-
TR::Node *tmpNode;
351-
if (is64BitTarget)
352-
{
353-
tmpNode = TR::Node::create(node, TR::i2l, 1, srcOff);
354-
tmpNode = TR::Node::create(node, TR::ladd, 2, tmpNode, hdrSize);
355-
}
356-
else
357-
{
358-
tmpNode = TR::Node::create(node, TR::iadd, 2, srcOff, hdrSize);
359-
}
360-
srcAddr = TR::Node::create(node, is64BitTarget ? TR::aladd : TR::aiadd, 2, srcObj, tmpNode);
361-
362-
if (is64BitTarget)
363-
{
364-
tmpNode = TR::Node::create(node, TR::i2l, 1, dstOff);
365-
tmpNode = TR::Node::create(node, TR::lmul, 2, tmpNode, strideNode);
366-
}
367-
else
368-
{
369-
tmpNode = TR::Node::create(node, TR::imul, 2, dstOff, strideNode);
370-
}
371-
tmpNode = TR::Node::create(node, is64BitTarget ? TR::ladd : TR::iadd, 2, tmpNode, hdrSize);
372-
dstAddr = TR::Node::create(node, is64BitTarget ? TR::aladd : TR::aiadd, 2, dstObj, tmpNode);
373-
}
374330
TR::Node *termCharNode = TR::Node::create(node, TR::iconst, 0, 0xffff); // mask for ISO 8859-1 decoder
375331
TR::Node *tableNode = TR::Node::create(node, TR::iconst, 0, 0); // dummy table node
376332
TR::Node *stoppingNode = TR::Node::create(node, TR::iconst, 0, -1); // dummy stop index node

0 commit comments

Comments
 (0)