src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp
changeset 58471 bada0782842a
parent 58366 222a91b9438a
child 58679 9c3209ff7550
child 58710 ff3eab78554f
equal deleted inserted replaced
58470:8991796c17d4 58471:bada0782842a
  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()) {
  1275       if (call->entry_point() == OptoRuntime::rethrow_stub()) {
  1276         // The rethrow call may have too many projections to be
  1276         // The rethrow call may have too many projections to be
  1277         // properly handled here. Given there's no reason for a
  1277         // properly handled here. Given there's no reason for a
  1278         // barrier to depend on the call, move it above the call
  1278         // barrier to depend on the call, move it above the call
  1279         if (phase->get_ctrl(val) == ctrl) {
  1279         stack.push(lrb, 0);
  1280           assert(val->Opcode() == Op_DecodeN, "unexpected node");
  1280         do {
  1281           assert(phase->is_dominator(phase->get_ctrl(val->in(1)), call->in(0)), "Load is too low");
  1281           Node* n = stack.node();
  1282           phase->set_ctrl(val, call->in(0));
  1282           uint idx = stack.index();
  1283         }
  1283           if (idx < n->req()) {
  1284         phase->set_ctrl(lrb, call->in(0));
  1284             Node* in = n->in(idx);
       
  1285             stack.set_index(idx+1);
       
  1286             if (in != NULL) {
       
  1287               if (phase->has_ctrl(in)) {
       
  1288                 if (phase->is_dominator(call, phase->get_ctrl(in))) {
       
  1289 #ifdef ASSERT
       
  1290                   for (uint i = 0; i < stack.size(); i++) {
       
  1291                     assert(stack.node_at(i) != in, "node shouldn't have been seen yet");
       
  1292                   }
       
  1293 #endif
       
  1294                   stack.push(in, 0);
       
  1295                 }
       
  1296               } else {
       
  1297                 assert(phase->is_dominator(in, call->in(0)), "no dependency on the call");
       
  1298               }
       
  1299             }
       
  1300           } else {
       
  1301             phase->set_ctrl(n, call->in(0));
       
  1302             stack.pop();
       
  1303           }
       
  1304         } while(stack.size() > 0);
  1285         continue;
  1305         continue;
  1286       }
  1306       }
  1287       CallProjections projs;
  1307       CallProjections projs;
  1288       call->extract_projections(&projs, false, false);
  1308       call->extract_projections(&projs, false, false);
  1289 
  1309