From 5b929a96a18850ba97e79b37faba753ffa2ccb85 Mon Sep 17 00:00:00 2001 From: Abdulrahman Alattas Date: Mon, 30 Sep 2024 12:16:58 -0400 Subject: [PATCH] Use baseObj in CardMarking for OffHeap on X When running with Balanced GC and OffHeap enabled, if the destOwningObject is a dataAddrPointer load, use the baseObj as the owningObjectReg. Signed-off-by: Abdulrahman Alattas --- runtime/compiler/x/codegen/J9TreeEvaluator.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/runtime/compiler/x/codegen/J9TreeEvaluator.cpp b/runtime/compiler/x/codegen/J9TreeEvaluator.cpp index d693313f514..e5a25749d35 100644 --- a/runtime/compiler/x/codegen/J9TreeEvaluator.cpp +++ b/runtime/compiler/x/codegen/J9TreeEvaluator.cpp @@ -10599,7 +10599,13 @@ void J9::X86::TreeEvaluator::VMwrtbarWithoutStoreEvaluator( TR::Register *owningObjectReg; TR::Register *tempReg = NULL; - owningObjectReg = cg->evaluate(destOwningObject); +#if defined(J9VM_GC_ENABLE_SPARSE_HEAP_ALLOCATION) + bool stopUsingCopyBaseReg; + if (gcMode == gc_modron_wrtbar_cardmark_incremental && TR::Compiler->om.isOffHeapAllocationEnabled() && destOwningObject->isDataAddrPointer()) + owningObjectReg = cg->evaluate(destOwningObject->getFirstChild()); + else +#endif /* defined(J9VM_GC_ENABLE_SPARSE_HEAP_ALLOCATION) */ + owningObjectReg = cg->evaluate(destOwningObject); if (doInternalControlFlow) {