Skip to content

Commit b3d5a24

Browse files
committed
[GR-61797] Reads of JavaThread::_cont_entry should use word
PullRequest: graal/19964
2 parents b50044e + 4d98ead commit b3d5a24

File tree

5 files changed

+74
-78
lines changed

5 files changed

+74
-78
lines changed

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -300,17 +300,17 @@ public final int arrayOopDescLengthOffset() {
300300
* The _threadObj field is still present but refers to the carrier thread. The two fields have
301301
* the same value in non-virtual threads.
302302
*/
303-
public final int threadCurrentThreadObjectOffset = getFieldOffset("JavaThread::_vthread", Integer.class, "OopHandle");
303+
public final int javaThreadVthreadOffset = getFieldOffset("JavaThread::_vthread", Integer.class, "OopHandle");
304304
public final boolean doJVMTIVirtualThreadTransitions = getFlag("DoJVMTIVirtualThreadTransitions", Boolean.class);
305305

306-
public final int threadCarrierThreadObjectOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "OopHandle");
307-
public final int threadScopedValueCacheOffset = getFieldOffset("JavaThread::_scopedValueCache", Integer.class, "OopHandle");
306+
public final int javaThreadThreadObjOffset = getFieldOffset("JavaThread::_threadObj", Integer.class, "OopHandle");
307+
public final int javaThreadScopedValueCacheOffset = getFieldOffset("JavaThread::_scopedValueCache", Integer.class, "OopHandle");
308308

309309
public final int javaThreadMonitorOwnerIDOffset = getFieldOffset("JavaThread::_monitor_owner_id", Integer.class, "int64_t", -1, JDK > 21);
310310

311-
public final int threadIsInVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_VTMS_transition", Integer.class, "bool");
312-
public final int threadIsInTmpVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_tmp_VTMS_transition", Integer.class, "bool", -1, JDK == 21);
313-
public final int threadIsDisableSuspendOffset = getFieldOffset("JavaThread::_is_disable_suspend", Integer.class, "bool", -1, JDK >= 22);
311+
public final int javaThreadIsInVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_VTMS_transition", Integer.class, "bool");
312+
public final int javaThreadIsInTmpVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_tmp_VTMS_transition", Integer.class, "bool", -1, JDK == 21);
313+
public final int javaThreadIsDisableSuspendOffset = getFieldOffset("JavaThread::_is_disable_suspend", Integer.class, "bool", -1, JDK >= 22);
314314

315315
public final int javaLangThreadJFREpochOffset = getFieldValue("java_lang_Thread::_jfr_epoch_offset", Integer.class, "int");
316316
public final int javaLangThreadTIDOffset = getFieldValue("java_lang_Thread::_tid_offset", Integer.class, "int");
@@ -325,7 +325,6 @@ public final int arrayOopDescLengthOffset() {
325325
public final int jfrThreadLocalVthreadExcludedOffset = getFieldOffset("JfrThreadLocal::_vthread_excluded", Integer.class, "bool");
326326
public final int jfrThreadLocalVthreadOffset = getFieldOffset("JfrThreadLocal::_vthread", Integer.class, "bool");
327327

328-
public final int osThreadOffset = getFieldOffset("JavaThread::_osthread", Integer.class, "OSThread*");
329328
public final int threadObjectResultOffset = getFieldOffset("JavaThread::_vm_result", Integer.class, "oop");
330329
public final int jvmciCountersThreadOffset = getFieldOffset("JavaThread::_jvmci_counters", Integer.class, "jlong*");
331330

@@ -334,7 +333,6 @@ public final int arrayOopDescLengthOffset() {
334333

335334
public final int doingUnsafeAccessOffset = getFieldOffset("JavaThread::_doing_unsafe_access", Integer.class, "bool");
336335
public final int javaThreadReservedStackActivationOffset = getFieldOffset("JavaThread::_stack_overflow_state._reserved_stack_activation", Integer.class, "address"); // JDK-8253717
337-
public final int jniEnvironmentOffset = getFieldOffset("JavaThread::_jni_environment", Integer.class, "JNIEnv");
338336

339337
public boolean requiresReservedStackCheck(List<ResolvedJavaMethod> methods) {
340338
if (enableStackReservedZoneAddress != 0 && methods != null) {
@@ -405,8 +403,8 @@ public int threadLastJavaFpOffset() {
405403
public final int objectMonitorEntryList = getFieldOffset("ObjectMonitor::_EntryList", Integer.class, "ObjectWaiter*");
406404
public final int objectMonitorSucc = getFieldOffset("ObjectMonitor::_succ", Integer.class, JDK > 21 ? "int64_t" : "JavaThread*");
407405

408-
public final int contEntry = getFieldOffset("JavaThread::_cont_entry", Integer.class, "ContinuationEntry*", -1, JDK >= 24);
409-
public final int pinCount = getFieldOffset("ContinuationEntry::_pin_count", Integer.class, "uint32_t", -1, JDK >= 24);
406+
public final int contEntryOffset = getFieldOffset("JavaThread::_cont_entry", Integer.class, "ContinuationEntry*", -1, JDK >= 24);
407+
public final int pinCountOffset = getFieldOffset("ContinuationEntry::_pin_count", Integer.class, "uint32_t", -1, JDK >= 24);
410408

411409
public final int methodCompiledEntryOffset = getFieldOffset("Method::_from_compiled_entry", Integer.class, "address");
412410

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/aarch64/AArch64HotSpotCounterOp.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@
2424
*/
2525
package jdk.graal.compiler.hotspot.aarch64;
2626

27-
import static jdk.vm.ci.code.ValueUtil.asRegister;
2827
import static jdk.graal.compiler.lir.LIRValueUtil.asJavaConstant;
2928
import static jdk.graal.compiler.lir.LIRValueUtil.isJavaConstant;
29+
import static jdk.vm.ci.code.ValueUtil.asRegister;
3030

3131
import jdk.graal.compiler.asm.Label;
3232
import jdk.graal.compiler.asm.aarch64.AArch64Address;
@@ -40,7 +40,6 @@
4040
import jdk.graal.compiler.lir.LIRInstructionClass;
4141
import jdk.graal.compiler.lir.Opcode;
4242
import jdk.graal.compiler.lir.asm.CompilationResultBuilder;
43-
4443
import jdk.vm.ci.code.Register;
4544
import jdk.vm.ci.code.TargetDescription;
4645
import jdk.vm.ci.meta.Value;

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/meta/HotSpotGraphBuilderPlugins.java

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@
4040
import static jdk.graal.compiler.hotspot.HotSpotBackend.SHAREDRUNTIME_NOTIFY_JVMTI_VTHREAD_UNMOUNT;
4141
import static jdk.graal.compiler.hotspot.HotSpotBackend.UPDATE_BYTES_CRC32;
4242
import static jdk.graal.compiler.hotspot.HotSpotBackend.UPDATE_BYTES_CRC32C;
43+
import static jdk.graal.compiler.hotspot.replacements.HotSpotInvocationPluginHelper.HotSpotVMConfigField.HOTSPOT_CONTINUATION_ENTRY_PIN_COUNT;
44+
import static jdk.graal.compiler.hotspot.replacements.HotSpotInvocationPluginHelper.HotSpotVMConfigField.HOTSPOT_JAVA_THREAD_CONT_ENTRY;
4345
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.HOTSPOT_CARRIER_THREAD_OOP_HANDLE_LOCATION;
44-
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.HOTSPOT_CONTINUATION_ENTRY_PIN_COUNT;
46+
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.HOTSPOT_CONTINUATION_ENTRY_PIN_COUNT_LOCATION;
4547
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.HOTSPOT_CURRENT_THREAD_OOP_HANDLE_LOCATION;
46-
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.HOTSPOT_JAVA_THREAD_CONT_ENTRY;
4748
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.HOTSPOT_JAVA_THREAD_SCOPED_VALUE_CACHE_HANDLE_LOCATION;
4849
import static jdk.graal.compiler.hotspot.replacements.HotSpotReplacementsUtil.JAVA_THREAD_MONITOR_OWNER_ID_LOCATION;
4950
import static jdk.graal.compiler.java.BytecodeParserOptions.InlineDuringParsing;
@@ -100,6 +101,7 @@
100101
import jdk.graal.compiler.hotspot.word.HotSpotWordTypes;
101102
import jdk.graal.compiler.java.BytecodeParser;
102103
import jdk.graal.compiler.lir.SyncPort;
104+
import jdk.graal.compiler.nodes.AbstractBeginNode;
103105
import jdk.graal.compiler.nodes.BeginNode;
104106
import jdk.graal.compiler.nodes.ComputeObjectAddressNode;
105107
import jdk.graal.compiler.nodes.ConstantNode;
@@ -134,6 +136,7 @@
134136
import jdk.graal.compiler.nodes.extended.MembarNode;
135137
import jdk.graal.compiler.nodes.extended.ObjectIsArrayNode;
136138
import jdk.graal.compiler.nodes.extended.PublishWritesNode;
139+
import jdk.graal.compiler.nodes.extended.RawStoreNode;
137140
import jdk.graal.compiler.nodes.gc.BarrierSet;
138141
import jdk.graal.compiler.nodes.graphbuilderconf.ForeignCallPlugin;
139142
import jdk.graal.compiler.nodes.graphbuilderconf.GeneratedPluginFactory;
@@ -748,7 +751,7 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
748751
}
749752
});
750753

751-
r.registerConditional(config.threadScopedValueCacheOffset != -1, new InvocationPlugin("scopedValueCache") {
754+
r.registerConditional(config.javaThreadScopedValueCacheOffset != -1, new InvocationPlugin("scopedValueCache") {
752755
@Override
753756
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver) {
754757
try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) {
@@ -762,7 +765,7 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
762765
}
763766
});
764767

765-
r.registerConditional(config.threadScopedValueCacheOffset != -1, new InvocationPlugin("setScopedValueCache", Object[].class) {
768+
r.registerConditional(config.javaThreadScopedValueCacheOffset != -1, new InvocationPlugin("setScopedValueCache", Object[].class) {
766769
@Override
767770
public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Receiver receiver, ValueNode cache) {
768771
try (HotSpotInvocationPluginHelper helper = new HotSpotInvocationPluginHelper(b, targetMethod, config)) {
@@ -808,8 +811,8 @@ private static void inlineNativeNotifyJvmtiFunctions(GraalHotSpotVMConfig config
808811

809812
// else set hide value to the VTMS transition bit in current JavaThread and
810813
// VirtualThread object
811-
GraalError.guarantee(config.threadIsInVTMSTransitionOffset != -1L, "JavaThread::_is_in_VTMS_transition is not exported");
812-
OffsetAddressNode jtAddress = graph.addOrUniqueWithInputs(new OffsetAddressNode(javaThread, helper.asWord(config.threadIsInVTMSTransitionOffset)));
814+
GraalError.guarantee(config.javaThreadIsInVTMSTransitionOffset != -1L, "JavaThread::_is_in_VTMS_transition is not exported");
815+
OffsetAddressNode jtAddress = graph.addOrUniqueWithInputs(new OffsetAddressNode(javaThread, helper.asWord(config.javaThreadIsInVTMSTransitionOffset)));
813816
JavaWriteNode jtWrite = b.add(new JavaWriteNode(JavaKind.Boolean, jtAddress, HotSpotReplacementsUtil.HOTSPOT_JAVA_THREAD_IS_IN_VTMS_TRANSITION, hide, BarrierType.NONE, false));
814817
falseSuccessor.setNext(jtWrite);
815818

@@ -852,21 +855,17 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
852855
StructuredGraph graph = b.getGraph();
853856
CurrentJavaThreadNode javaThread = graph.addOrUniqueWithInputs(new CurrentJavaThreadNode(helper.getWordKind()));
854857

855-
GraalError.guarantee(config.contEntry != -1, "JavaThread::_cont_entry is not exported");
856-
OffsetAddressNode lastContinuationAddr = graph.addOrUniqueWithInputs(new OffsetAddressNode(javaThread, helper.asWord(config.contEntry)));
857-
ValueNode lastContinuation = b.add(new JavaReadNode(JavaKind.Object, lastContinuationAddr, HOTSPOT_JAVA_THREAD_CONT_ENTRY, BarrierType.NONE, MemoryOrderMode.PLAIN, false));
858-
ValueNode nonNullLastContinuation = helper.emitNullReturnGuard(lastContinuation, null, NOT_FREQUENT_PROBABILITY);
858+
ValueNode lastContinuation = helper.readLocation(javaThread, HOTSPOT_JAVA_THREAD_CONT_ENTRY);
859+
AbstractBeginNode guard = helper.emitReturnIf(IntegerEqualsNode.create(lastContinuation, helper.asWord(0), NodeView.DEFAULT), null, NOT_FREQUENT_PROBABILITY);
859860

860-
GraalError.guarantee(config.pinCount != -1, "ContinuationEntry::_pin_count is not exported");
861-
OffsetAddressNode pinCountAddr = graph.addOrUniqueWithInputs(new OffsetAddressNode(nonNullLastContinuation, helper.asWord(config.pinCount)));
862-
ValueNode pinCount = b.add(new JavaReadNode(JavaKind.Int, pinCountAddr, HOTSPOT_CONTINUATION_ENTRY_PIN_COUNT, BarrierType.NONE, MemoryOrderMode.PLAIN, false));
861+
ValueNode pinCount = helper.readLocation(lastContinuation, HOTSPOT_CONTINUATION_ENTRY_PIN_COUNT, guard);
863862

864863
LogicNode overFlow = IntegerEqualsNode.create(pinCount, pin ? ConstantNode.forInt(-1) : ConstantNode.forInt(0), NodeView.DEFAULT);
865864
// TypeCheckedInliningViolated (Reason_type_checked_inlining) is aliasing
866865
// Reason_intrinsic
867866
b.append(new FixedGuardNode(overFlow, TypeCheckedInliningViolated, DeoptimizationAction.None, true));
868867
ValueNode newPinCount = b.add(AddNode.create(pinCount, pin ? ConstantNode.forInt(1) : ConstantNode.forInt(-1), NodeView.DEFAULT));
869-
b.add(new JavaWriteNode(JavaKind.Int, pinCountAddr, HOTSPOT_CONTINUATION_ENTRY_PIN_COUNT, newPinCount, BarrierType.NONE, false));
868+
b.add(new RawStoreNode(lastContinuation, helper.asWord(config.pinCountOffset), newPinCount, JavaKind.Int, HOTSPOT_CONTINUATION_ENTRY_PIN_COUNT_LOCATION));
870869
helper.emitFinalReturn(JavaKind.Void, null);
871870
}
872871
return true;
@@ -934,9 +933,9 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
934933
receiver.get(true);
935934
// unconditionally update the temporary VTMS transition bit in current
936935
// JavaThread
937-
GraalError.guarantee(config.threadIsInTmpVTMSTransitionOffset != -1, "JavaThread::_is_in_tmp_VTMS_transition is not exported");
936+
GraalError.guarantee(config.javaThreadIsInTmpVTMSTransitionOffset != -1, "JavaThread::_is_in_tmp_VTMS_transition is not exported");
938937
CurrentJavaThreadNode javaThread = b.add(new CurrentJavaThreadNode(helper.getWordKind()));
939-
OffsetAddressNode address = b.add(new OffsetAddressNode(javaThread, helper.asWord(config.threadIsInTmpVTMSTransitionOffset)));
938+
OffsetAddressNode address = b.add(new OffsetAddressNode(javaThread, helper.asWord(config.javaThreadIsInTmpVTMSTransitionOffset)));
940939
b.add(new JavaWriteNode(JavaKind.Boolean, address, HotSpotReplacementsUtil.HOTSPOT_JAVA_THREAD_IS_IN_TMP_VTMS_TRANSITION, hide, BarrierType.NONE, false));
941940
}
942941
}
@@ -957,9 +956,9 @@ public boolean apply(GraphBuilderContext b, ResolvedJavaMethod targetMethod, Rec
957956
}
958957
// unconditionally update the is_disable_suspend bit in current
959958
// JavaThread
960-
GraalError.guarantee(config.threadIsDisableSuspendOffset != -1, "JavaThread::_is_disable_suspend is not exported");
959+
GraalError.guarantee(config.javaThreadIsDisableSuspendOffset != -1, "JavaThread::_is_disable_suspend is not exported");
961960
CurrentJavaThreadNode javaThread = b.add(new CurrentJavaThreadNode(helper.getWordKind()));
962-
OffsetAddressNode address = b.add(new OffsetAddressNode(javaThread, helper.asWord(config.threadIsDisableSuspendOffset)));
961+
OffsetAddressNode address = b.add(new OffsetAddressNode(javaThread, helper.asWord(config.javaThreadIsDisableSuspendOffset)));
963962
b.add(new JavaWriteNode(JavaKind.Boolean, address, HotSpotReplacementsUtil.HOTSPOT_JAVA_THREAD_IS_DISABLE_SUSPEND, enter, BarrierType.NONE, false));
964963
}
965964
}

0 commit comments

Comments
 (0)