-
Notifications
You must be signed in to change notification settings - Fork 396
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
AArch64: Implement aladdEvaluator() #4118
Conversation
1cb7de3
to
fad8eca
Compare
Ready for review. |
trgReg->setPinningArrayPointer(firstChild->getRegister()->getPinningArrayPointer()); | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this will accomplish the same thing for the code under the isInternalPointer()
guard but with fewer calls and indirections. Correct me if I'm wrong though. This wouldn't work, for example, if the pinning array pointer symbol could ever be NULL, but I don't think that's possible.
if (node->isInternalPointer())
{
TR::AutomaticSymbol *pinningArrayPointerSymbol = NULL;
if (node->getPinningArrayPointer())
{
pinningArrayPointerSymbol = node->getPinningArrayPointer();
}
else
{
TR::Node *firstChild = node->getFirstChild();
if ((firstChild->getOpCodeValue() == TR::aload) &&
firstChild->getSymbolReference()->getSymbol()->isAuto() &&
firstChild->getSymbolReference()->getSymbol()->isPinningArrayPointer())
{
TR::Symbol *firstChildSymbol = firstChild->getSymbolReference()->getSymbol();
pinningArrayPointerSymbol = firstChildSymbol->isInternalPointer() ?
firstChildSymbol->castToInternalPointerAutoSymbol()->getPinningArrayPointer() :
firstChildSymbol->castToAutoSymbol();
}
else if (firstChild->getRegister() &&
firstChild->getRegister()->containsInternalPointer())
{
pinningArrayPointerSymbol = firstChild->getRegister()->getPinningArrayPointer();
}
}
if (pinningArrayPointerSymbol)
{
trgReg->setContainsInternalPointer();
trgReg->setPinningArrayPointer(pinningArrayPointerSymbol);
}
}
@@ -612,3 +613,46 @@ OMR::ARM64::TreeEvaluator::lxorEvaluator(TR::Node *node, TR::CodeGenerator *cg) | |||
// boolean xor of 2 integers | |||
return genericBinaryEvaluator(node, TR::InstOpCode::eorx, TR::InstOpCode::eorimmx, true, cg); | |||
} | |||
|
|||
// Also handles TR::aluadd |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove comment. TR::aluadd
has been deprecated.
This commit implements aladdEvaluator() for AArch64. Signed-off-by: KONNO Kazuhiro <konno@jp.ibm.com>
Updated |
@genie-omr build aarch64 |
Code changes seem fine. I don't fully understand all the implications of compressed references on this evaluator (and if any support is missing) but I think what you have is a good start. |
This commit implements aladdEvaluator() for AArch64.
Signed-off-by: KONNO Kazuhiro konno@jp.ibm.com