src/share/vm/opto/stringopts.cpp

Print this page
rev 3898 : 8005031: Some cleanup in c2 to prepare for incremental inlining support
Summary: collection of small changes to prepare for incremental inlining.
Reviewed-by:

@@ -742,11 +742,13 @@
     if (n->is_Call()) {
       CallNode* cn = n->as_Call();
       ctrl_path.push(cn);
       ctrl_path.push(cn->proj_out(0));
       ctrl_path.push(cn->proj_out(0)->unique_out());
+      if (cn->proj_out(0)->unique_out()->as_Catch()->proj_out(0) != NULL) {
       ctrl_path.push(cn->proj_out(0)->unique_out()->as_Catch()->proj_out(0));
+      }
     } else {
       ShouldNotReachHere();
     }
   }
 

@@ -760,10 +762,16 @@
       ptr = ptr->in(0)->in(0)->in(0);
       assert(ctrl_path.member(ptr), "should be a known piece of control");
     } else if (ptr->is_IfTrue()) {
       IfNode* iff = ptr->in(0)->as_If();
       BoolNode* b = iff->in(1)->isa_Bool();
+      
+      if (b == NULL) {
+        fail = true;
+        break;
+      }
+
       Node* cmp = b->in(1);
       Node* v1 = cmp->in(1);
       Node* v2 = cmp->in(2);
       Node* otherproj = iff->proj_out(1 - ptr->as_Proj()->_con);
 

@@ -1406,10 +1414,13 @@
     C->record_for_igvn(overflow);
     kit.uncommon_trap(Deoptimization::Reason_intrinsic,
                       Deoptimization::Action_make_not_entrant);
   }
 
+  Node* result;
+  if (!kit.stopped()) {
+
   // length now contains the number of characters needed for the
   // char[] so create a new AllocateArray for the char[]
   Node* char_array = NULL;
   {
     PreserveReexecuteState preexecs(&kit);

@@ -1454,11 +1465,11 @@
         ShouldNotReachHere();
     }
   }
 
   // If we're not reusing an existing String allocation then allocate one here.
-  Node* result = sc->string_alloc();
+    result = sc->string_alloc();
   if (result == NULL) {
     PreserveReexecuteState preexecs(&kit);
     // The original jvms is for an allocation of either a String or
     // StringBuffer so no stack adjustment is necessary for proper
     // reexecution.

@@ -1470,11 +1481,13 @@
   if (java_lang_String::has_offset_field()) {
     kit.store_String_offset(kit.control(), result, __ intcon(0));
     kit.store_String_length(kit.control(), result, length);
   }
   kit.store_String_value(kit.control(), result, char_array);
-
+  } else {
+    result = C->top();
+  }
   // hook up the outgoing control and result
   kit.replace_call(sc->end(), result);
 
   // Unhook any hook nodes
   string_sizes->disconnect_inputs(NULL, C);