Skip to content

Commit 140a74e

Browse files
committed
[GR-60462] Backport to 24.1: No exit safepoint if end safepoints are disabled.
PullRequest: graal/19598
2 parents 6b85833 + d44a1db commit 140a74e

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/java/BytecodeParser.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3824,6 +3824,7 @@ private LoopBeginNode appendLoopBegin(FixedWithNextNode fixedWithNext, int start
38243824
if (disableLoopSafepoint()) {
38253825
loopBegin.disableSafepoint(SafepointState.MUST_NEVER_SAFEPOINT);
38263826
loopBegin.disableGuestSafepoint(SafepointState.MUST_NEVER_SAFEPOINT);
3827+
loopBegin.disableLoopExitSafepoint(SafepointState.MUST_NEVER_SAFEPOINT);
38273828
}
38283829
fixedWithNext.setNext(preLoopEnd);
38293830
// Add the single non-loop predecessor of the loop header.

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/graal/phases/SubstrateSafepointInsertionPhase.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,20 +64,34 @@ public static boolean needSafepointCheck(ResolvedJavaMethod method) {
6464
return true;
6565
}
6666

67-
@Override
68-
protected void run(StructuredGraph graph, MidTierContext context) {
67+
/**
68+
* Determines if this (potentially special) method needs safepoint checks.
69+
*/
70+
public static boolean needsSafepointCheck(StructuredGraph graph) {
6971
SharedMethod method = (SharedMethod) graph.method();
70-
if (!method.needSafepointCheck()) {
71-
return;
72-
}
72+
return method.needSafepointCheck();
73+
}
7374

75+
/**
76+
* Insert SVM specific safepoints at the method end if necessary.
77+
*/
78+
public static void insertMethodEndSafepoints(StructuredGraph graph, MidTierContext context) {
79+
SharedMethod method = (SharedMethod) graph.method();
7480
if (!((SubstrateBackend) context.getTargetProvider()).safepointCheckedInEpilogue(method)) {
7581
/* Insert method-end safepoints. */
7682
for (ReturnNode returnNode : graph.getNodes(ReturnNode.TYPE)) {
7783
SafepointNode safepointNode = graph.add(new SafepointNode());
7884
graph.addBeforeFixed(returnNode, safepointNode);
7985
}
8086
}
87+
}
88+
89+
@Override
90+
protected void run(StructuredGraph graph, MidTierContext context) {
91+
if (!needsSafepointCheck(graph)) {
92+
return;
93+
}
94+
insertMethodEndSafepoints(graph, context);
8195

8296
/* Insert loop safepoints. */
8397
super.run(graph, context);

0 commit comments

Comments
 (0)