Skip to content

Commit

Permalink
Update vector load/store evaluators to use LoadStoreHandler
Browse files Browse the repository at this point in the history
Signed-off-by: Ben Thomas <ben@benthomas.ca>
  • Loading branch information
aviansie-ben committed Feb 11, 2021
1 parent 4e41f4c commit f3996d5
Showing 1 changed file with 3 additions and 35 deletions.
38 changes: 3 additions & 35 deletions compiler/p/codegen/OMRTreeEvaluator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -929,25 +929,10 @@ TR::Register *OMR::Power::TreeEvaluator::vloadEvaluator(TR::Node *node, TR::Code
}

TR::Register *dstReg = cg->allocateRegister(kind);
node->setRegister(dstReg);

TR::MemoryReference *srcMemRef = TR::MemoryReference::createWithRootLoadOrStore(cg, node, 16);
if (srcMemRef->hasDelayedOffset())
{
TR::Register *tmpReg = cg->allocateRegister();
generateTrg1MemInstruction(cg, TR::InstOpCode::addi2, node, tmpReg, srcMemRef);

TR::MemoryReference *tmpMemRef = TR::MemoryReference::createWithIndexReg(cg, NULL, tmpReg, 16);
generateTrg1MemInstruction(cg, opcode, node, dstReg, tmpMemRef);
tmpMemRef->decNodeReferenceCounts(cg);
}
else
{
srcMemRef->forceIndexedForm(node, cg);
generateTrg1MemInstruction(cg, opcode, node, dstReg, srcMemRef);
}
TR::LoadStoreHandler::generateLoadNodeSequence(cg, dstReg, node, opcode, 16, true);

srcMemRef->decNodeReferenceCounts(cg);
node->setRegister(dstReg);
return dstReg;
}

Expand All @@ -971,26 +956,9 @@ TR::Register *OMR::Power::TreeEvaluator::vstoreEvaluator(TR::Node *node, TR::Cod
TR::Node *valueChild = node->getOpCode().isStoreDirect() ? node->getFirstChild() : node->getSecondChild();
TR::Register *valueReg = cg->evaluate(valueChild);

TR::MemoryReference *srcMemRef = TR::MemoryReference::createWithRootLoadOrStore(cg, node, 16);
TR::LoadStoreHandler::generateStoreNodeSequence(cg, valueReg, node, opcode, 16, true);

if (srcMemRef->hasDelayedOffset())
{
TR::Register *tmpReg = cg->allocateRegister();
generateTrg1MemInstruction(cg, TR::InstOpCode::addi2, node, tmpReg, srcMemRef);
TR::MemoryReference *tmpMemRef = TR::MemoryReference::createWithIndexReg(cg, NULL, tmpReg, 16);

generateMemSrc1Instruction(cg, opcode, node, tmpMemRef, valueReg);
tmpMemRef->decNodeReferenceCounts(cg);
}
else
{
srcMemRef->forceIndexedForm(node, cg);
generateMemSrc1Instruction(cg, opcode, node, srcMemRef, valueReg);
}

srcMemRef->decNodeReferenceCounts(cg);
cg->decReferenceCount(valueChild);

return NULL;
}

Expand Down

0 comments on commit f3996d5

Please sign in to comment.