hotspot/src/share/vm/oops/generateOopMap.cpp
changeset 16374 634539171c19
parent 15799 6aa92f9debd2
child 18055 ba8c01e0d016
equal deleted inserted replaced
16372:20c2c4dc8b77 16374:634539171c19
   760 // depths match up then their states are merged.  Otherwise the
   760 // depths match up then their states are merged.  Otherwise the
   761 // mismatch is simply recorded and interpretation continues since
   761 // mismatch is simply recorded and interpretation continues since
   762 // monitor matching is purely informational and doesn't say anything
   762 // monitor matching is purely informational and doesn't say anything
   763 // about the correctness of the code.
   763 // about the correctness of the code.
   764 void GenerateOopMap::merge_state_into_bb(BasicBlock *bb) {
   764 void GenerateOopMap::merge_state_into_bb(BasicBlock *bb) {
       
   765   guarantee(bb != NULL, "null basicblock");
   765   assert(bb->is_alive(), "merging state into a dead basicblock");
   766   assert(bb->is_alive(), "merging state into a dead basicblock");
   766 
   767 
   767   if (_stack_top == bb->_stack_top) {
   768   if (_stack_top == bb->_stack_top) {
   768     // always merge local state even if monitors don't match.
   769     // always merge local state even if monitors don't match.
   769     if (merge_local_state_vectors(_state, bb->_state)) {
   770     if (merge_local_state_vectors(_state, bb->_state)) {
  1187       int handler_pc = exct.handler_pc(i);
  1188       int handler_pc = exct.handler_pc(i);
  1188       int catch_type = exct.catch_type_index(i);
  1189       int catch_type = exct.catch_type_index(i);
  1189 
  1190 
  1190       if (start_pc <= bci && bci < end_pc) {
  1191       if (start_pc <= bci && bci < end_pc) {
  1191         BasicBlock *excBB = get_basic_block_at(handler_pc);
  1192         BasicBlock *excBB = get_basic_block_at(handler_pc);
       
  1193         guarantee(excBB != NULL, "no basic block for exception");
  1192         CellTypeState *excStk = excBB->stack();
  1194         CellTypeState *excStk = excBB->stack();
  1193         CellTypeState *cOpStck = stack();
  1195         CellTypeState *cOpStck = stack();
  1194         CellTypeState cOpStck_0 = cOpStck[0];
  1196         CellTypeState cOpStck_0 = cOpStck[0];
  1195         int cOpStackTop = _stack_top;
  1197         int cOpStackTop = _stack_top;
  1196 
  1198 
  1801     // this monitorexit will be visited again.  We need to
  1803     // this monitorexit will be visited again.  We need to
  1802     // do this to ensure that we have accounted for the
  1804     // do this to ensure that we have accounted for the
  1803     // possibility that this bytecode will throw an
  1805     // possibility that this bytecode will throw an
  1804     // exception.
  1806     // exception.
  1805     BasicBlock* bb = get_basic_block_containing(bci);
  1807     BasicBlock* bb = get_basic_block_containing(bci);
       
  1808     guarantee(bb != NULL, "no basic block for bci");
  1806     bb->set_changed(true);
  1809     bb->set_changed(true);
  1807     bb->_monitor_top = bad_monitors;
  1810     bb->_monitor_top = bad_monitors;
  1808 
  1811 
  1809     if (TraceMonitorMismatch) {
  1812     if (TraceMonitorMismatch) {
  1810       report_monitor_mismatch("improper monitor pair");
  1813       report_monitor_mismatch("improper monitor pair");
  2188   // We now want to report the result of the parse
  2191   // We now want to report the result of the parse
  2189   _report_result = true;
  2192   _report_result = true;
  2190 
  2193 
  2191   // Find basicblock and report results
  2194   // Find basicblock and report results
  2192   BasicBlock* bb = get_basic_block_containing(bci);
  2195   BasicBlock* bb = get_basic_block_containing(bci);
       
  2196   guarantee(bb != NULL, "no basic block for bci");
  2193   assert(bb->is_reachable(), "getting result from unreachable basicblock");
  2197   assert(bb->is_reachable(), "getting result from unreachable basicblock");
  2194   bb->set_changed(true);
  2198   bb->set_changed(true);
  2195   interp_bb(bb);
  2199   interp_bb(bb);
  2196 }
  2200 }
  2197 
  2201