1270 } |
1270 } |
1271 } |
1271 } |
1272 } |
1272 } |
1273 if ((ctrl->is_Proj() && ctrl->in(0)->is_CallJava()) || ctrl->is_CallJava()) { |
1273 if ((ctrl->is_Proj() && ctrl->in(0)->is_CallJava()) || ctrl->is_CallJava()) { |
1274 CallNode* call = ctrl->is_Proj() ? ctrl->in(0)->as_CallJava() : ctrl->as_CallJava(); |
1274 CallNode* call = ctrl->is_Proj() ? ctrl->in(0)->as_CallJava() : ctrl->as_CallJava(); |
|
1275 if (call->entry_point() == OptoRuntime::rethrow_stub()) { |
|
1276 // The rethrow call may have too many projections to be |
|
1277 // properly handled here. Given there's no reason for a |
|
1278 // barrier to depend on the call, move it above the call |
|
1279 if (phase->get_ctrl(val) == ctrl) { |
|
1280 assert(val->Opcode() == Op_DecodeN, "unexpected node"); |
|
1281 assert(phase->is_dominator(phase->get_ctrl(val->in(1)), call->in(0)), "Load is too low"); |
|
1282 phase->set_ctrl(val, call->in(0)); |
|
1283 } |
|
1284 phase->set_ctrl(lrb, call->in(0)); |
|
1285 continue; |
|
1286 } |
1275 CallProjections projs; |
1287 CallProjections projs; |
1276 call->extract_projections(&projs, false, false); |
1288 call->extract_projections(&projs, false, false); |
1277 |
1289 |
1278 Node* lrb_clone = lrb->clone(); |
1290 Node* lrb_clone = lrb->clone(); |
1279 phase->register_new_node(lrb_clone, projs.catchall_catchproj); |
1291 phase->register_new_node(lrb_clone, projs.catchall_catchproj); |