< prev index next >

src/hotspot/share/opto/cfgnode.cpp

Print this page




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) {


< prev index next >