Skip to content

Commit

Permalink
[GR-60462] Backport to 24.1: No exit safepoint if end safepoints are …
Browse files Browse the repository at this point in the history
…disabled.

PullRequest: graal/19598
  • Loading branch information
elkorchi committed Dec 18, 2024
2 parents 6b85833 + d44a1db commit 140a74e
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3824,6 +3824,7 @@ private LoopBeginNode appendLoopBegin(FixedWithNextNode fixedWithNext, int start
if (disableLoopSafepoint()) {
loopBegin.disableSafepoint(SafepointState.MUST_NEVER_SAFEPOINT);
loopBegin.disableGuestSafepoint(SafepointState.MUST_NEVER_SAFEPOINT);
loopBegin.disableLoopExitSafepoint(SafepointState.MUST_NEVER_SAFEPOINT);
}
fixedWithNext.setNext(preLoopEnd);
// Add the single non-loop predecessor of the loop header.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,20 +64,34 @@ public static boolean needSafepointCheck(ResolvedJavaMethod method) {
return true;
}

@Override
protected void run(StructuredGraph graph, MidTierContext context) {
/**
* Determines if this (potentially special) method needs safepoint checks.
*/
public static boolean needsSafepointCheck(StructuredGraph graph) {
SharedMethod method = (SharedMethod) graph.method();
if (!method.needSafepointCheck()) {
return;
}
return method.needSafepointCheck();
}

/**
* Insert SVM specific safepoints at the method end if necessary.
*/
public static void insertMethodEndSafepoints(StructuredGraph graph, MidTierContext context) {
SharedMethod method = (SharedMethod) graph.method();
if (!((SubstrateBackend) context.getTargetProvider()).safepointCheckedInEpilogue(method)) {
/* Insert method-end safepoints. */
for (ReturnNode returnNode : graph.getNodes(ReturnNode.TYPE)) {
SafepointNode safepointNode = graph.add(new SafepointNode());
graph.addBeforeFixed(returnNode, safepointNode);
}
}
}

@Override
protected void run(StructuredGraph graph, MidTierContext context) {
if (!needsSafepointCheck(graph)) {
return;
}
insertMethodEndSafepoints(graph, context);

/* Insert loop safepoints. */
super.run(graph, context);
Expand Down

0 comments on commit 140a74e

Please sign in to comment.