Skip to content

Commit

Permalink
Add pinning array pointer support for dataAddr nodes
Browse files Browse the repository at this point in the history
Use node extentions to store pinning array pointer for non add nodes.

Signed-off-by: Shubham Verma <shubhamv.sv@gmail.com>
  • Loading branch information
VermaSh authored and rmnattas committed Jun 21, 2024
1 parent a0acc26 commit 4a10457
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 9 deletions.
32 changes: 25 additions & 7 deletions compiler/il/OMRNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ OMR::Node::Node(TR::Node *originatingByteCodeNode, TR::ILOpCodes op, uint16_t nu
+ self()->hasBranchDestinationNode()
+ self()->hasBlock()
+ self()->hasArrayStride()
+ self()->hasPinningArrayPointer()
+ (self()->hasPinningArrayPointer() && !self()->supportsPinningArrayPointerInNodeExtension())
+ self()->hasDataType() <= 1,
"_unionPropertyA union is not disjoint for this node %s (%p):\n"
" has({SymbolReference, ...}, ..., DataType) = ({%1d,%1d},%1d,%1d,%1d,%1d,%1d)\n",
Expand All @@ -225,7 +225,7 @@ OMR::Node::Node(TR::Node *originatingByteCodeNode, TR::ILOpCodes op, uint16_t nu
self()->hasBranchDestinationNode(),
self()->hasBlock(),
self()->hasArrayStride(),
self()->hasPinningArrayPointer(),
(self()->hasPinningArrayPointer() && !self()->supportsPinningArrayPointerInNodeExtension()),
self()->hasDataType());
}

Expand Down Expand Up @@ -5046,10 +5046,16 @@ OMR::Node::hasArrayStride()
return self()->getOpCode().isArrayLength();
}

bool
OMR::Node::supportsPinningArrayPointerInNodeExtension()
{
return self()->isDataAddrPointer();
}

bool
OMR::Node::hasPinningArrayPointer()
{
return self()->getOpCode().hasPinningArrayPointer();
return self()->getOpCode().hasPinningArrayPointer() || self()->supportsPinningArrayPointerInNodeExtension();
}

bool
Expand Down Expand Up @@ -5189,16 +5195,28 @@ OMR::Node::setArrayStride(int32_t s)
TR::AutomaticSymbol*
OMR::Node::getPinningArrayPointer()
{
TR_ASSERT(self()->hasPinningArrayPointer(), "attempting to access _pinningArrayPointer field for node %s %p that does not have it", self()->getOpCode().getName(), this);
return _unionPropertyA._pinningArrayPointer;
TR_ASSERT(self()->hasPinningArrayPointer() || _unionBase._extension.getNumElems() >= 6, "attempting to access _pinningArrayPointer field for node %s %p that does not support it", self()->getOpCode().getName(), this);

if (self()->getOpCode().hasPinningArrayPointer())
return _unionPropertyA._pinningArrayPointer;

return _unionBase._extension.getExtensionPtr()->getElem<TR::AutomaticSymbol *>(5);
}

TR::AutomaticSymbol*
OMR::Node::setPinningArrayPointer(TR::AutomaticSymbol *s)
{
s->setPinningArrayPointer();
TR_ASSERT(self()->hasPinningArrayPointer(), "attempting to access _pinningArrayPointer field for node %s %p that does not have it", self()->getOpCode().getName(), this);
return (_unionPropertyA._pinningArrayPointer = s);
TR_ASSERT(self()->hasPinningArrayPointer(), "attempting to access _pinningArrayPointer field for node %s %p that does not support it", self()->getOpCode().getName(), this);

if (self()->getOpCode().hasPinningArrayPointer())
return _unionPropertyA._pinningArrayPointer = s;

int extensionElemNum = _unionBase._extension.getNumElems();
if (extensionElemNum < 6)
self()->addExtensionElements(6 - extensionElemNum);

return _unionBase._extension.getExtensionPtr()->setElem<TR::AutomaticSymbol *>(5, s);
}

TR::DataType
Expand Down
5 changes: 3 additions & 2 deletions compiler/il/OMRNode.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1590,6 +1590,7 @@ class OMR_EXTENSIBLE Node
public:
// For opcode properties
bool hasPinningArrayPointer();
bool supportsPinningArrayPointerInNodeExtension();

// Protected inner classes and structs.
protected:
Expand Down Expand Up @@ -1651,8 +1652,8 @@ class OMR_EXTENSIBLE Node
TR::TreeTop *_branchDestinationNode; ///< hasBranchDestinationNode()
TR::Block *_block; ///< hasBlock()
int32_t _arrayStride; ///< hasArrayStride()
TR::AutomaticSymbol *_pinningArrayPointer; ///< hasPinningArrayPointer()
TR::DataTypes _dataType; ///< hasDataType() TODO: Change to TR::DataType once all target compilers support it
TR::AutomaticSymbol *_pinningArrayPointer; ///< hasPinningArrayPointer()
TR::DataTypes _dataType; ///< hasDataType() TODO: Change to TR::DataType once all target compilers support it

UnionPropertyA()
{
Expand Down

0 comments on commit 4a10457

Please sign in to comment.