File tree 1 file changed +10
-1
lines changed
src/hotspot/share/gc/shenandoah/c2
1 file changed +10
-1
lines changed Original file line number Diff line number Diff line change @@ -1149,8 +1149,9 @@ void ShenandoahBarrierC2Support::pin_and_expand(PhaseIdealLoop* phase) {
1149
1149
}
1150
1150
}
1151
1151
}
1152
+ // Load barrier on the control output of a call
1152
1153
if ((ctrl->is_Proj () && ctrl->in (0 )->is_CallJava ()) || ctrl->is_CallJava ()) {
1153
- CallNode * call = ctrl->is_Proj () ? ctrl->in (0 )->as_CallJava () : ctrl->as_CallJava ();
1154
+ CallJavaNode * call = ctrl->is_Proj () ? ctrl->in (0 )->as_CallJava () : ctrl->as_CallJava ();
1154
1155
if (call->entry_point () == OptoRuntime::rethrow_stub ()) {
1155
1156
// The rethrow call may have too many projections to be
1156
1157
// properly handled here. Given there's no reason for a
@@ -1186,6 +1187,14 @@ void ShenandoahBarrierC2Support::pin_and_expand(PhaseIdealLoop* phase) {
1186
1187
CallProjections projs;
1187
1188
call->extract_projections (&projs, false , false );
1188
1189
1190
+ // If this is a runtime call, it doesn't have an exception handling path
1191
+ if (projs.fallthrough_catchproj == nullptr ) {
1192
+ assert (call->method () == nullptr , " should be runtime call" );
1193
+ assert (projs.catchall_catchproj == nullptr , " runtime call should not have catch all projection" );
1194
+ continue ;
1195
+ }
1196
+
1197
+ // Otherwise, clone the barrier so there's one for the fallthrough and one for the exception handling path
1189
1198
#ifdef ASSERT
1190
1199
VectorSet cloned;
1191
1200
#endif
You can’t perform that action at this time.
1 commit comments
openjdk-notifier[bot] commentedon Mar 31, 2025
Review
Issues