39 assert( region->is_Region(), "" ); |
39 assert( region->is_Region(), "" ); |
40 |
40 |
41 const Type* type = n->bottom_type(); |
41 const Type* type = n->bottom_type(); |
42 const TypeOopPtr *t_oop = _igvn.type(n)->isa_oopptr(); |
42 const TypeOopPtr *t_oop = _igvn.type(n)->isa_oopptr(); |
43 Node *phi; |
43 Node *phi; |
44 if( t_oop != NULL && t_oop->is_instance_field() ) { |
44 if( t_oop != NULL && t_oop->is_known_instance_field() ) { |
45 int iid = t_oop->instance_id(); |
45 int iid = t_oop->instance_id(); |
46 int index = C->get_alias_index(t_oop); |
46 int index = C->get_alias_index(t_oop); |
47 int offset = t_oop->offset(); |
47 int offset = t_oop->offset(); |
48 phi = new (C,region->req()) PhiNode(region, type, NULL, iid, index, offset); |
48 phi = new (C,region->req()) PhiNode(region, type, NULL, iid, index, offset); |
49 } else { |
49 } else { |
2683 if( dom_lca( exit, u_ctrl ) != exit ) continue; |
2683 if( dom_lca( exit, u_ctrl ) != exit ) continue; |
2684 // protect against stride not being a constant |
2684 // protect against stride not being a constant |
2685 if( !cle->stride_is_con() ) continue; |
2685 if( !cle->stride_is_con() ) continue; |
2686 // Hit! Refactor use to use the post-incremented tripcounter. |
2686 // Hit! Refactor use to use the post-incremented tripcounter. |
2687 // Compute a post-increment tripcounter. |
2687 // Compute a post-increment tripcounter. |
2688 Node *opaq = new (C, 2) Opaque2Node( cle->incr() ); |
2688 Node *opaq = new (C, 2) Opaque2Node( C, cle->incr() ); |
2689 register_new_node( opaq, u_ctrl ); |
2689 register_new_node( opaq, u_ctrl ); |
2690 Node *neg_stride = _igvn.intcon(-cle->stride_con()); |
2690 Node *neg_stride = _igvn.intcon(-cle->stride_con()); |
2691 set_ctrl(neg_stride, C->root()); |
2691 set_ctrl(neg_stride, C->root()); |
2692 Node *post = new (C, 3) AddINode( opaq, neg_stride); |
2692 Node *post = new (C, 3) AddINode( opaq, neg_stride); |
2693 register_new_node( post, u_ctrl ); |
2693 register_new_node( post, u_ctrl ); |