2362 } else { 2363 new_ii = new EncodePKlassNode(ii, narrow_t); 2364 } 2365 igvn->register_new_node_with_optimizer(new_ii); 2366 } 2367 } 2368 new_phi->set_req(i, new_ii); 2369 } 2370 igvn->register_new_node_with_optimizer(new_phi, this); 2371 if (is_decodeN) { 2372 progress = new DecodeNNode(new_phi, bottom_type()); 2373 } else { 2374 progress = new DecodeNKlassNode(new_phi, bottom_type()); 2375 } 2376 } 2377 } 2378 #endif 2379 2380 // Phi (VB ... VB) => VB (Phi ...) (Phi ...) 2381 if (EnableVectorReboxing && can_reshape && progress == NULL) { 2382 PhaseIterGVN *igvn = phase->is_IterGVN(); 2383 2384 bool all_inputs_are_equiv_vboxes = true; 2385 for (uint i = 1; i < req(); ++i) { 2386 Node *n = in(i); 2387 if (in(i)->Opcode() != Op_VectorBox) { 2388 all_inputs_are_equiv_vboxes = false; 2389 break; 2390 } 2391 // Check that vector type of vboxes is equivalent 2392 if (i != 1) { 2393 if (Type::cmp(in(i-0)->in(VectorBoxNode::Value)->bottom_type(), 2394 in(i-1)->in(VectorBoxNode::Value)->bottom_type()) != 0) { 2395 all_inputs_are_equiv_vboxes = false; 2396 break; 2397 } 2398 if (Type::cmp(in(i-0)->in(VectorBoxNode::Box)->bottom_type(), 2399 in(i-1)->in(VectorBoxNode::Box)->bottom_type()) != 0) { 2400 all_inputs_are_equiv_vboxes = false; 2401 break; 2402 } 2403 } 2404 } 2405 2406 if (all_inputs_are_equiv_vboxes) { | 2362 } else { 2363 new_ii = new EncodePKlassNode(ii, narrow_t); 2364 } 2365 igvn->register_new_node_with_optimizer(new_ii); 2366 } 2367 } 2368 new_phi->set_req(i, new_ii); 2369 } 2370 igvn->register_new_node_with_optimizer(new_phi, this); 2371 if (is_decodeN) { 2372 progress = new DecodeNNode(new_phi, bottom_type()); 2373 } else { 2374 progress = new DecodeNKlassNode(new_phi, bottom_type()); 2375 } 2376 } 2377 } 2378 #endif 2379 2380 // Phi (VB ... VB) => VB (Phi ...) (Phi ...) 2381 if (EnableVectorReboxing && can_reshape && progress == NULL) { 2382 PhaseIterGVN* igvn = phase->is_IterGVN(); 2383 2384 bool all_inputs_are_equiv_vboxes = true; 2385 for (uint i = 1; i < req(); ++i) { 2386 Node* n = in(i); 2387 if (in(i)->Opcode() != Op_VectorBox) { 2388 all_inputs_are_equiv_vboxes = false; 2389 break; 2390 } 2391 // Check that vector type of vboxes is equivalent 2392 if (i != 1) { 2393 if (Type::cmp(in(i-0)->in(VectorBoxNode::Value)->bottom_type(), 2394 in(i-1)->in(VectorBoxNode::Value)->bottom_type()) != 0) { 2395 all_inputs_are_equiv_vboxes = false; 2396 break; 2397 } 2398 if (Type::cmp(in(i-0)->in(VectorBoxNode::Box)->bottom_type(), 2399 in(i-1)->in(VectorBoxNode::Box)->bottom_type()) != 0) { 2400 all_inputs_are_equiv_vboxes = false; 2401 break; 2402 } 2403 } 2404 } 2405 2406 if (all_inputs_are_equiv_vboxes) { |