src/share/vm/opto/parse3.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot-comp-hsx Sdiff src/share/vm/opto

src/share/vm/opto/parse3.cpp

Print this page




 403       Node*    eaddr  = basic_plus_adr(array, offset);
 404       store_oop_to_array(control(), array, eaddr, adr_type, elem, elemtype, T_OBJECT);
 405     }
 406   }
 407   return array;
 408 }
 409 
 410 void Parse::do_multianewarray() {
 411   int ndimensions = iter().get_dimensions();
 412 
 413   // the m-dimensional array
 414   bool will_link;
 415   ciArrayKlass* array_klass = iter().get_klass(will_link)->as_array_klass();
 416   assert(will_link, "multianewarray: typeflow responsibility");
 417 
 418   // Note:  Array classes are always initialized; no is_initialized check.
 419 
 420   enum { MAX_DIMENSION = 5 };
 421   if (ndimensions > MAX_DIMENSION || ndimensions <= 0) {
 422     uncommon_trap(Deoptimization::Reason_unhandled,
 423                   Deoptimization::Action_none);
 424     return;
 425   }
 426 
 427   kill_dead_locals();
 428 
 429   // get the lengths from the stack (first dimension is on top)
 430   Node* length[MAX_DIMENSION+1];
 431   length[ndimensions] = NULL;  // terminating null for make_runtime_call
 432   int j;
 433   for (j = ndimensions-1; j >= 0 ; j--) length[j] = pop();
 434 
 435   // The original expression was of this form: new T[length0][length1]...
 436   // It is often the case that the lengths are small (except the last).
 437   // If that happens, use the fast 1-d creator a constant number of times.
 438   const jint expand_limit = MIN2((juint)MultiArrayExpandLimit, (juint)100);
 439   jint expand_count = 1;        // count of allocations in the expansion
 440   jint expand_fanout = 1;       // running total fanout
 441   for (j = 0; j < ndimensions-1; j++) {
 442     jint dim_con = find_int_con(length[j], -1);
 443     expand_fanout *= dim_con;




 403       Node*    eaddr  = basic_plus_adr(array, offset);
 404       store_oop_to_array(control(), array, eaddr, adr_type, elem, elemtype, T_OBJECT);
 405     }
 406   }
 407   return array;
 408 }
 409 
 410 void Parse::do_multianewarray() {
 411   int ndimensions = iter().get_dimensions();
 412 
 413   // the m-dimensional array
 414   bool will_link;
 415   ciArrayKlass* array_klass = iter().get_klass(will_link)->as_array_klass();
 416   assert(will_link, "multianewarray: typeflow responsibility");
 417 
 418   // Note:  Array classes are always initialized; no is_initialized check.
 419 
 420   enum { MAX_DIMENSION = 5 };
 421   if (ndimensions > MAX_DIMENSION || ndimensions <= 0) {
 422     uncommon_trap(Deoptimization::Reason_unhandled,
 423                   Deoptimization::Action_maybe_recompile);
 424     return;
 425   }
 426 
 427   kill_dead_locals();
 428 
 429   // get the lengths from the stack (first dimension is on top)
 430   Node* length[MAX_DIMENSION+1];
 431   length[ndimensions] = NULL;  // terminating null for make_runtime_call
 432   int j;
 433   for (j = ndimensions-1; j >= 0 ; j--) length[j] = pop();
 434 
 435   // The original expression was of this form: new T[length0][length1]...
 436   // It is often the case that the lengths are small (except the last).
 437   // If that happens, use the fast 1-d creator a constant number of times.
 438   const jint expand_limit = MIN2((juint)MultiArrayExpandLimit, (juint)100);
 439   jint expand_count = 1;        // count of allocations in the expansion
 440   jint expand_fanout = 1;       // running total fanout
 441   for (j = 0; j < ndimensions-1; j++) {
 442     jint dim_con = find_int_con(length[j], -1);
 443     expand_fanout *= dim_con;


src/share/vm/opto/parse3.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File