Skip to content

Commit 22eaa4d

Browse files
authored
Merge pull request #19699 from jdmpapin/aggressive-sfff
Make static final field folding more aggressive
2 parents 293f2b7 + 070557c commit 22eaa4d

16 files changed

+367
-19
lines changed

runtime/compiler/control/J9Options.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3552,6 +3552,7 @@ J9::Options::packOptions(const TR::Options *origOptions)
35523552
addRegexStringSize(origOptions->_memUsage, totalSize);
35533553
addRegexStringSize(origOptions->_classesWithFolableFinalFields, totalSize);
35543554
addRegexStringSize(origOptions->_disabledIdiomPatterns, totalSize);
3555+
addRegexStringSize(origOptions->_dontFoldStaticFinalFields, totalSize);
35553556

35563557
std::string optionsStr(totalSize, '\0');
35573558
TR::Options * options = (TR::Options *)optionsStr.data();
@@ -3593,6 +3594,7 @@ J9::Options::packOptions(const TR::Options *origOptions)
35933594
appendRegex(options->_memUsage, curPos);
35943595
appendRegex(options->_classesWithFolableFinalFields, curPos);
35953596
appendRegex(options->_disabledIdiomPatterns, curPos);
3597+
appendRegex(options->_dontFoldStaticFinalFields, curPos);
35963598
options->_osVersionString = NULL;
35973599
options->_logListForOtherCompThreads = NULL;
35983600
options->_objectFileName = NULL;
@@ -3661,6 +3663,7 @@ J9::Options::unpackOptions(char *clientOptions, size_t clientOptionsSize, TR::Co
36613663
unpackRegex(options->_memUsage);
36623664
unpackRegex(options->_classesWithFolableFinalFields);
36633665
unpackRegex(options->_disabledIdiomPatterns);
3666+
unpackRegex(options->_dontFoldStaticFinalFields);
36643667

36653668
return options;
36663669
}

runtime/compiler/control/JITClientCompilationThread.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2124,6 +2124,14 @@ handleServerMessage(JITServer::ClientStream *client, TR_J9VM *fe, JITServer::Mes
21242124
client->write(response, TR::Compiler->cls.getDefaultValueSlotAddress(comp, clazz));
21252125
}
21262126
break;
2127+
case MessageType::ClassEnv_setClassHasIllegalStaticFinalFieldModification:
2128+
{
2129+
auto recv = client->getRecvData<TR_OpaqueClassBlock *>();
2130+
auto clazz = std::get<0>(recv);
2131+
TR::Compiler->cls.setClassHasIllegalStaticFinalFieldModification(clazz, comp);
2132+
client->write(response, JITServer::Void());
2133+
}
2134+
break;
21272135
case MessageType::ClassEnv_enumerateFields:
21282136
{
21292137
auto recv = client->getRecvData<TR_OpaqueClassBlock *>();

runtime/compiler/env/J9ClassEnv.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
*******************************************************************************/
2222

2323
#include "compile/Compilation.hpp"
24+
#include "AtomicSupport.hpp"
2425
#if defined(J9VM_OPT_JITSERVER)
2526
#include "control/CompilationRuntime.hpp"
2627
#include "control/CompilationThread.hpp"
@@ -394,6 +395,38 @@ J9::ClassEnv::classHasIllegalStaticFinalFieldModification(TR_OpaqueClassBlock *
394395
return J9_ARE_ANY_BITS_SET(j9clazz->classFlags, J9ClassHasIllegalFinalFieldModifications);
395396
}
396397

398+
void
399+
J9::ClassEnv::setClassHasIllegalStaticFinalFieldModification(
400+
TR_OpaqueClassBlock *clazz, TR::Compilation *comp)
401+
{
402+
J9Class *j9c = TR::Compiler->cls.convertClassOffsetToClassPtr(clazz);
403+
404+
#if defined(J9VM_OPT_JITSERVER)
405+
if (comp->isOutOfProcessCompilation())
406+
{
407+
// Set the flag on the actual class in the client.
408+
auto stream = comp->getStream();
409+
stream->write(
410+
JITServer::MessageType::ClassEnv_setClassHasIllegalStaticFinalFieldModification,
411+
clazz);
412+
413+
stream->read<JITServer::Void>();
414+
415+
// Update the cache
416+
ClientSessionData *clientSessionData = TR::compInfoPT->getClientData();
417+
OMR::CriticalSection romMapCS(clientSessionData->getROMMapMonitor());
418+
auto it = clientSessionData->getROMClassMap().find(j9c);
419+
if (it != clientSessionData->getROMClassMap().end())
420+
it->second._classFlags |= J9ClassHasIllegalFinalFieldModifications;
421+
422+
return;
423+
}
424+
#endif
425+
426+
VM_AtomicSupport::bitOrU32(
427+
&j9c->classFlags, J9ClassHasIllegalFinalFieldModifications);
428+
}
429+
397430
bool
398431
J9::ClassEnv::hasFinalFieldsInClass(TR::Compilation *comp, TR_OpaqueClassBlock *clazz)
399432
{

runtime/compiler/env/J9ClassEnv.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ class OMR_EXTENSIBLE ClassEnv : public OMR::ClassEnvConnector
8787
bool isStringClass(TR_OpaqueClassBlock *clazz);
8888

8989
bool classHasIllegalStaticFinalFieldModification(TR_OpaqueClassBlock * clazzPointer);
90+
void setClassHasIllegalStaticFinalFieldModification(
91+
TR_OpaqueClassBlock *clazz, TR::Compilation *comp);
9092
bool isAbstractClass(TR::Compilation *comp, TR_OpaqueClassBlock *clazzPointer);
9193
bool isInterfaceClass(TR::Compilation *comp, TR_OpaqueClassBlock *clazzPointer);
9294
bool isConcreteClass(TR::Compilation *comp, TR_OpaqueClassBlock * clazzPointer);

runtime/compiler/env/JITServerPersistentCHTable.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,12 @@ void TR_JITClientPersistentClassInfo::clearShouldNotBeNewlyExtended()
620620
TR_PersistentClassInfo::clearShouldNotBeNewlyExtended();
621621
}
622622

623+
void TR_JITClientPersistentClassInfo::setAlreadyScannedForFinalPutstatic()
624+
{
625+
TR_JITClientPersistentClassInfo::_chTable->markDirty(getClassId());
626+
TR_PersistentClassInfo::setAlreadyScannedForFinalPutstatic();
627+
}
628+
623629
void TR_JITClientPersistentClassInfo::setHasRecognizedAnnotations(bool v)
624630
{
625631
TR_JITClientPersistentClassInfo::_chTable->markDirty(getClassId());

runtime/compiler/env/JITServerPersistentCHTable.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ class TR_JITClientPersistentClassInfo : public TR_PersistentClassInfo
212212
virtual void setShouldNotBeNewlyExtended(int32_t ID) override;
213213
virtual void resetShouldNotBeNewlyExtended(int32_t ID) override;
214214
virtual void clearShouldNotBeNewlyExtended() override;
215+
virtual void setAlreadyScannedForFinalPutstatic() override;
215216
virtual void setHasRecognizedAnnotations(bool v = true) override;
216217
virtual void setAlreadyCheckedForAnnotations(bool v = true) override;
217218
virtual void setCannotTrustStaticFinal(bool v = true) override;

runtime/compiler/ilgen/Walker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5441,7 +5441,7 @@ TR_J9ByteCodeIlGenerator::loadStatic(int32_t cpIndex)
54415441

54425442
TR::SymbolReference * symRef = symRefTab()->findOrCreateStaticSymbol(_methodSymbol, cpIndex, false);
54435443
if (comp()->getOption(TR_TraceILGen))
5444-
traceMsg(comp(), "load static symref %d created with knownObjectIndex %d", symRef->getReferenceNumber(), symRef->getKnownObjectIndex());
5444+
traceMsg(comp(), "load static symref %d created with knownObjectIndex %d\n", symRef->getReferenceNumber(), symRef->getKnownObjectIndex());
54455445
TR::StaticSymbol * symbol = symRef->getSymbol()->castToStaticSymbol();
54465446
TR_ASSERT(symbol, "Didn't geta static symbol.");
54475447

runtime/compiler/net/CommunicationStream.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class CommunicationStream
128128
// likely to lose an increment when merging/rebasing/etc.
129129
//
130130
static const uint8_t MAJOR_NUMBER = 1;
131-
static const uint16_t MINOR_NUMBER = 62; // ID: TNff0n0QdLOhsH6CmQlT/
131+
static const uint16_t MINOR_NUMBER = 64; // ID: EbRgDu72oycJkc90HtnO
132132
static const uint8_t PATCH_NUMBER = 0;
133133
static uint32_t CONFIGURATION_FLAGS;
134134

runtime/compiler/net/MessageTypes.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ const char *messageNames[] =
212212
"ClassEnv_enumerateFields",
213213
"ClassEnv_flattenedArrayElementSize",
214214
"ClassEnv_getDefaultValueSlotAddress",
215+
"ClassEnv_setClassHasIllegalStaticFinalFieldModification",
215216
"SharedCache_getClassChainOffsetIdentifyingLoader",
216217
"SharedCache_rememberClass",
217218
"SharedCache_addHint",

runtime/compiler/net/MessageTypes.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ enum MessageType : uint16_t
225225
ClassEnv_enumerateFields,
226226
ClassEnv_flattenedArrayElementSize,
227227
ClassEnv_getDefaultValueSlotAddress,
228+
ClassEnv_setClassHasIllegalStaticFinalFieldModification,
228229

229230
// For TR_J9SharedCache
230231
SharedCache_getClassChainOffsetIdentifyingLoader,

0 commit comments

Comments
 (0)