Skip to content

Commit 8031543

Browse files
authored
Merge pull request eclipse-omr#7452 from a7ehuo/PR-valuetypes-null-restricted-array
Fix null restricted array related issues for value types
2 parents 18d8727 + 833607b commit 8031543

5 files changed

Lines changed: 83 additions & 52 deletions

File tree

compiler/env/FrontEnd.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,13 @@ TR_FrontEnd::getArrayClassFromComponentClass(TR_OpaqueClassBlock * componentClas
187187
return 0;
188188
}
189189

190+
TR_OpaqueClassBlock *
191+
TR_FrontEnd::getNullRestrictedArrayClassFromComponentClass(TR_OpaqueClassBlock * componentClass)
192+
{
193+
TR_UNIMPLEMENTED();
194+
return 0;
195+
}
196+
190197
TR_OpaqueClassBlock *
191198
TR_FrontEnd::getLeafComponentClassFromArrayClass(TR_OpaqueClassBlock *arrayClass)
192199
{

compiler/env/FrontEnd.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,16 @@ class TR_FrontEnd : private TR::Uncopyable
181181

182182
// VM+Shared
183183
virtual TR_OpaqueClassBlock * getArrayClassFromComponentClass(TR_OpaqueClassBlock * componentClass);
184+
/** \brief
185+
* Retrieves the nullRestrictedArrayClass from the array component class.
186+
*
187+
* \param componentClass
188+
* The array component class
189+
*
190+
* \return
191+
* A pointer to nullRestrictedArrayClass if it exists, otherwise NULL
192+
*/
193+
virtual TR_OpaqueClassBlock * getNullRestrictedArrayClassFromComponentClass(TR_OpaqueClassBlock * componentClass);
184194
virtual TR_OpaqueClassBlock * getClassFromNewArrayType(int32_t arrayType);
185195
virtual TR_OpaqueClassBlock * getClassFromSignature(const char * sig, int32_t length, TR_ResolvedMethod *method, bool callSiteVettedForAOT=false);
186196
virtual TR_OpaqueClassBlock * getClassFromSignature(const char * sig, int32_t length, TR_OpaqueMethodBlock *method, bool callSiteVettedForAOT=false);

compiler/optimizer/OMRValuePropagation.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1690,7 +1690,7 @@ TR_YesNoMaybe OMR::ValuePropagation::isCastClassObject(TR::VPClassType *type)
16901690
}
16911691

16921692

1693-
TR_YesNoMaybe OMR::ValuePropagation::isArrayCompTypePrimitiveValueType(TR::VPConstraint *arrayConstraint)
1693+
TR_YesNoMaybe OMR::ValuePropagation::isArrayNullRestricted(TR::VPConstraint *arrayConstraint)
16941694
{
16951695
return TR::Compiler->om.areFlattenableValueTypesEnabled() ? TR_maybe : TR_no;
16961696
}

compiler/optimizer/OMRValuePropagation.hpp

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -367,14 +367,14 @@ class ValuePropagation : public TR::Optimization
367367
TR_YesNoMaybe isCastClassObject(TR::VPClassType *type);
368368

369369
/**
370-
* Determine whether the component type of an array is, or might be, a primitive value
371-
* type.
370+
* Determine whether the array is, or might be, null-restricted
371+
*
372372
* \param arrayConstraint The \ref TR::VPConstraint type constraint for the array reference
373-
* \returns \c TR_yes if the array's component type is definitely a primitive value type;\n
374-
* \c TR_no if it is definitely not a primitive value type; or\n
373+
* \returns \c TR_yes if the array is definitely a null-restricted array;\n
374+
* \c TR_no if it is definitely not a null-restricted array; or\n
375375
* \c TR_maybe otherwise.
376376
*/
377-
virtual TR_YesNoMaybe isArrayCompTypePrimitiveValueType(TR::VPConstraint *arrayConstraint);
377+
virtual TR_YesNoMaybe isArrayNullRestricted(TR::VPConstraint *arrayConstraint);
378378

379379
/**
380380
* \brief
@@ -616,15 +616,16 @@ class ValuePropagation : public TR::Optimization
616616
{
617617
TR_ALLOC(TR_Memory::ValuePropagation)
618618

619-
TR_NeedRuntimeTestNullRestrictedArrayCopy(TR::Node *dstArrRef, TR::Node *srcArrRef,
619+
TR_NeedRuntimeTestNullRestrictedArrayCopy(TR::SymbolReference *dstArrRefSymRef, TR::SymbolReference *srcArrRefSymRef,
620620
TR::TreeTop *ptt, TR::TreeTop *ntt,
621621
TR::Block *originBlock, TR::Block *slowBlock,
622622
bool testDstArray)
623-
: _dstArrayRefNode(dstArrRef), _srcArrayRefNode(srcArrRef), _prevTT(ptt), _nextTT(ntt), _originBlock(originBlock), _slowBlock(slowBlock), _needRuntimeTestDstArray(testDstArray)
623+
: _dstArrRefSymRef(dstArrRefSymRef), _srcArrRefSymRef(srcArrRefSymRef), _prevTT(ptt), _nextTT(ntt),
624+
_originBlock(originBlock), _slowBlock(slowBlock), _needRuntimeTestDstArray(testDstArray)
624625
{}
625626

626-
TR::Node *_dstArrayRefNode;
627-
TR::Node *_srcArrayRefNode;
627+
TR::SymbolReference * _dstArrRefSymRef;
628+
TR::SymbolReference * _srcArrRefSymRef;
628629

629630
TR::TreeTop *_prevTT;
630631
TR::TreeTop *_nextTT;

0 commit comments

Comments
 (0)