Skip to content

Commit

Permalink
Define J9ClassEnv::primitiveArrayComponentType()
Browse files Browse the repository at this point in the history
This (along with a separate change to VP) will allow VP to refine unsafe
shadow to a primitive array shadow whenever it can determine that the
base object is an instance of a particular primitive array type.
  • Loading branch information
jdmpapin authored and midronij committed May 24, 2023
1 parent b211882 commit 997e90c
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
32 changes: 32 additions & 0 deletions runtime/compiler/env/J9ClassEnv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,38 @@ J9::ClassEnv::isPrimitiveArray(TR::Compilation *comp, TR_OpaqueClassBlock *clazz
return comp->fej9()->isPrimitiveArray(clazz);
}

TR::DataTypes
J9::ClassEnv::primitiveArrayComponentType(TR::Compilation *comp, TR_OpaqueClassBlock *clazz)
{
TR_ASSERT_FATAL(
self()->isPrimitiveArray(comp, clazz), "not a primitive array: %p", clazz);

static const int32_t firstNewArrayTypeCode = 4;
static const TR::DataTypes newArrayTypes[] =
{
TR::Int8, // boolean
TR::Int16, // char
TR::Float,
TR::Double,
TR::Int8,
TR::Int16,
TR::Int32,
TR::Int64,
};

TR_J9VMBase *fej9 = comp->fej9();
for (int32_t i = 0; i < sizeof(newArrayTypes) / sizeof(newArrayTypes[0]); i++)
{
TR_OpaqueClassBlock *primitiveArrayClass =
fej9->getClassFromNewArrayTypeNonNull(firstNewArrayTypeCode + i);

if (clazz == primitiveArrayClass)
return newArrayTypes[i];
}

return TR::NoType;
}

bool
J9::ClassEnv::isReferenceArray(TR::Compilation *comp, TR_OpaqueClassBlock *clazz)
{
Expand Down
2 changes: 2 additions & 0 deletions runtime/compiler/env/J9ClassEnv.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ namespace J9 { typedef J9::ClassEnv ClassEnvConnector; }
#include "env/jittypes.h"
#include "env/OMRClassEnv.hpp"
#include "infra/Annotations.hpp"
#include "il/DataTypes.hpp"
#include "j9.h"

namespace TR { class SymbolReference; }
Expand Down Expand Up @@ -158,6 +159,7 @@ class OMR_EXTENSIBLE ClassEnv : public OMR::ClassEnvConnector
bool isPrimitiveClass(TR::Compilation *comp, TR_OpaqueClassBlock *clazz);
bool isAnonymousClass(TR::Compilation *comp, TR_OpaqueClassBlock *clazz);
bool isPrimitiveArray(TR::Compilation *comp, TR_OpaqueClassBlock *);
TR::DataTypes primitiveArrayComponentType(TR::Compilation *comp, TR_OpaqueClassBlock *);
bool isReferenceArray(TR::Compilation *comp, TR_OpaqueClassBlock *);
bool isClassArray(TR::Compilation *comp, TR_OpaqueClassBlock *);
bool isClassFinal(TR::Compilation *comp, TR_OpaqueClassBlock *);
Expand Down

0 comments on commit 997e90c

Please sign in to comment.