Skip to content

Commit 05ebeac

Browse files
committed
Refactor the Deserializer to use a helper struct
To faciltate a non-compilation thread invoking the deserializer, which can happen outside the context of a compilation, the APIs in the Deserializer need to be updated to no longer require a TR::Compilation object directly. Signed-off-by: Irwin D'Souza <dsouzai.gh@gmail.com>
1 parent 0dcff38 commit 05ebeac

File tree

5 files changed

+195
-172
lines changed

5 files changed

+195
-172
lines changed

runtime/compiler/control/JITClientCompilationThread.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3031,13 +3031,14 @@ handleServerMessage(JITServer::ClientStream *client, TR_J9VM *fe, JITServer::Mes
30313031
if (auto deserializer = compInfo->getJITServerAOTDeserializer())
30323032
{
30333033
bool wasReset = false;
3034-
deserializer->cacheRecords((const uint8_t *)recordsStr.data(), recordsStr.size(), comp,
3034+
auto helper = DeserializerHelper(comp->j9VMThread(), comp->fej9(), comp->trMemory(), comp);
3035+
deserializer->cacheRecords((const uint8_t *)recordsStr.data(), recordsStr.size(), &helper,
30353036
/*ignoreFailures=*/true, wasReset);
30363037
if (!wasReset)
30373038
{
30383039
for (uintptr_t id : classIds)
30393040
{
3040-
J9Class *ramClass = deserializer->getRAMClass(id, comp, wasReset);
3041+
J9Class *ramClass = deserializer->getRAMClass(id, &helper, wasReset);
30413042
if (wasReset)
30423043
{
30433044
ramClasses.clear();
@@ -3446,7 +3447,8 @@ remoteCompile(J9VMThread *vmThread, TR::Compilation *compiler, TR_ResolvedMethod
34463447
// 2. Accesses the JITServer AOT deserializer in any way.
34473448
// That moment is currently right here, when we get the new known IDs that are cached in the deserializer.
34483449
compInfoPT->getJ9VM()->clearDeserializerWasReset();
3449-
std::vector<uintptr_t> newKnownIds = deserializer ? deserializer->getNewKnownIds(compiler) : std::vector<uintptr_t>();
3450+
auto helper = DeserializerHelper(compiler->j9VMThread(), compiler->fej9(), compiler->trMemory(), compiler);
3451+
std::vector<uintptr_t> newKnownIds = deserializer ? deserializer->getNewKnownIds(&helper) : std::vector<uintptr_t>();
34503452

34513453
// TODO: make this a synchronized region to avoid bad_alloc exceptions
34523454
compInfo->getSequencingMonitor()->enter();
@@ -3564,7 +3566,8 @@ remoteCompile(J9VMThread *vmThread, TR::Compilation *compiler, TR_ResolvedMethod
35643566

35653567
auto method = SerializedAOTMethod::get(methodStr);
35663568
bool usesSVM = false;
3567-
if (deserializer->deserialize(method, records, compiler, usesSVM))
3569+
auto helper = DeserializerHelper(compiler->j9VMThread(), compiler->fej9(), compiler->trMemory(), compiler);
3570+
if (deserializer->deserialize(method, records, &helper, usesSVM))
35683571
{
35693572
compiler->setDeserializedAOTMethodStore(true);
35703573
compiler->setDeserializedAOTMethod(true);
@@ -3598,7 +3601,8 @@ remoteCompile(J9VMThread *vmThread, TR::Compilation *compiler, TR_ResolvedMethod
35983601

35993602
auto method = SerializedAOTMethod::get(methodStr);
36003603
bool usesSVM = false;
3601-
if (deserializer->deserialize(method, records, compiler, usesSVM))
3604+
auto helper = DeserializerHelper(compiler->j9VMThread(), compiler->fej9(), compiler->trMemory(), compiler);
3605+
if (deserializer->deserialize(method, records, &helper, usesSVM))
36023606
{
36033607
compiler->setDeserializedAOTMethod(true);
36043608
compiler->setDeserializedAOTMethodUsingSVM(usesSVM);

runtime/compiler/env/J9SharedCache.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1428,7 +1428,8 @@ TR_J9SharedCache::lookupClassFromChainAndLoader(uintptr_t *chainData, void *clas
14281428
if (!clazz && comp->isDeserializedAOTMethod())
14291429
{
14301430
auto deserializer = TR::CompilationInfo::get()->getJITServerAOTDeserializer();
1431-
clazz = deserializer->getGeneratedClass((J9ClassLoader *)classLoader, romClassOffset, comp);
1431+
auto helper = DeserializerHelper(comp->j9VMThread(), comp->fej9(), comp->trMemory(), comp);
1432+
clazz = deserializer->getGeneratedClass((J9ClassLoader *)classLoader, romClassOffset, &helper);
14321433
}
14331434
#endif /* defined(J9VM_OPT_JITSERVER) */
14341435

@@ -1870,7 +1871,8 @@ TR_J9DeserializerSharedCache::romClassFromOffsetInSharedCache(uintptr_t offset)
18701871
{
18711872
TR::Compilation *comp = _compInfoPT->getCompilation();
18721873
bool wasReset = false;
1873-
auto romClass = _deserializer->romClassFromOffsetInSharedCache(offset, comp, wasReset);
1874+
auto helper = DeserializerHelper(comp->j9VMThread(), comp->fej9(), comp->trMemory(), comp);
1875+
auto romClass = _deserializer->romClassFromOffsetInSharedCache(offset, &helper, wasReset);
18741876
if (wasReset)
18751877
comp->failCompilation<J9::AOTDeserializerReset>(
18761878
"Deserializer reset during relocation of method %s", comp->signature());
@@ -1886,7 +1888,8 @@ TR_J9DeserializerSharedCache::pointerFromOffsetInSharedCache(uintptr_t offset)
18861888
{
18871889
TR::Compilation *comp = _compInfoPT->getCompilation();
18881890
bool wasReset = false;
1889-
auto ptr = _deserializer->pointerFromOffsetInSharedCache(offset, comp, wasReset);
1891+
auto helper = DeserializerHelper(comp->j9VMThread(), comp->fej9(), comp->trMemory(), comp);
1892+
auto ptr = _deserializer->pointerFromOffsetInSharedCache(offset, &helper, wasReset);
18901893
if (wasReset)
18911894
comp->failCompilation<J9::AOTDeserializerReset>(
18921895
"Deserializer reset during relocation of method %s", comp->signature());
@@ -1916,7 +1919,8 @@ TR_J9DeserializerSharedCache::classMatchesCachedVersion(J9Class *clazz, UDATA *c
19161919
// is equal to the one we are trying to validate.
19171920
TR::Compilation *comp = _compInfoPT->getCompilation();
19181921
bool wasReset = false;
1919-
auto ramClass = _deserializer->classFromOffset(chainData[1], comp, wasReset);
1922+
auto helper = DeserializerHelper(comp->j9VMThread(), comp->fej9(), comp->trMemory(), comp);
1923+
auto ramClass = _deserializer->classFromOffset(chainData[1], &helper, wasReset);
19201924
if (wasReset)
19211925
comp->failCompilation<J9::AOTDeserializerReset>(
19221926
"Deserializer reset during relocation of method %s", comp->signature());
@@ -1935,7 +1939,8 @@ TR_J9DeserializerSharedCache::lookupClassFromChainAndLoader(uintptr_t *chainData
19351939
// We do not need to perform that checking here, because during deserialization we will have already resolved the first class in the chain to
19361940
// a J9Class and verified that it matches. Thus we can simply return that cached first J9Class.
19371941
bool wasReset = false;
1938-
auto clazz = _deserializer->classFromOffset(chainData[1], comp, wasReset);
1942+
auto helper = DeserializerHelper(comp->j9VMThread(), comp->fej9(), comp->trMemory(), comp);
1943+
auto clazz = _deserializer->classFromOffset(chainData[1], &helper, wasReset);
19391944
if (wasReset)
19401945
comp->failCompilation<J9::AOTDeserializerReset>(
19411946
"Deserializer reset during relocation of method %s", comp->signature());
@@ -1951,7 +1956,8 @@ TR_J9DeserializerSharedCache::romMethodFromOffsetInSharedCache(uintptr_t offset)
19511956
{
19521957
TR::Compilation *comp = _compInfoPT->getCompilation();
19531958
bool wasReset = false;
1954-
auto romMethod = _deserializer->romMethodFromOffsetInSharedCache(offset, comp, wasReset);
1959+
auto helper = DeserializerHelper(comp->j9VMThread(), comp->fej9(), comp->trMemory(), comp);
1960+
auto romMethod = _deserializer->romMethodFromOffsetInSharedCache(offset, &helper, wasReset);
19551961
if (wasReset)
19561962
comp->failCompilation<J9::AOTDeserializerReset>(
19571963
"Deserializer reset during relocation of method %s", comp->signature());

0 commit comments

Comments
 (0)