src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp
changeset 58366 222a91b9438a
parent 58219 bc0648405d67
child 58471 bada0782842a
equal deleted inserted replaced
58365:73950479184b 58366:222a91b9438a
  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);