2015 } // End of is IF
2016
2017 }
2018
2019 // Update loop limits
2020 if (conditional_rc) {
2021 pre_limit = (stride_con > 0) ? (Node*)new MinINode(pre_limit, orig_limit)
2022 : (Node*)new MaxINode(pre_limit, orig_limit);
2023 register_new_node(pre_limit, pre_ctrl);
2024 }
2025 _igvn.replace_input_of(pre_opaq, 1, pre_limit);
2026
2027 // Note:: we are making the main loop limit no longer precise;
2028 // need to round up based on stride.
2029 cl->set_nonexact_trip_count();
2030 if (!LoopLimitCheck && stride_con != 1 && stride_con != -1) { // Cutout for common case
2031 // "Standard" round-up logic: ([main_limit-init+(y-1)]/y)*y+init
2032 // Hopefully, compiler will optimize for powers of 2.
2033 Node *ctrl = get_ctrl(main_limit);
2034 Node *stride = cl->stride();
2035 Node *init = cl->init_trip();
2036 Node *span = new SubINode(main_limit,init);
2037 register_new_node(span,ctrl);
2038 Node *rndup = _igvn.intcon(stride_con + ((stride_con>0)?-1:1));
2039 Node *add = new AddINode(span,rndup);
2040 register_new_node(add,ctrl);
2041 Node *div = new DivINode(0,add,stride);
2042 register_new_node(div,ctrl);
2043 Node *mul = new MulINode(div,stride);
2044 register_new_node(mul,ctrl);
2045 Node *newlim = new AddINode(mul,init);
2046 register_new_node(newlim,ctrl);
2047 main_limit = newlim;
2048 }
2049
2050 Node *main_cle = cl->loopexit();
2051 Node *main_bol = main_cle->in(1);
2052 // Hacking loop bounds; need private copies of exit test
2053 if( main_bol->outcnt() > 1 ) {// BoolNode shared?
2054 main_bol = main_bol->clone();// Clone a private BoolNode
2055 register_new_node( main_bol, main_cle->in(0) );
|
2015 } // End of is IF
2016
2017 }
2018
2019 // Update loop limits
2020 if (conditional_rc) {
2021 pre_limit = (stride_con > 0) ? (Node*)new MinINode(pre_limit, orig_limit)
2022 : (Node*)new MaxINode(pre_limit, orig_limit);
2023 register_new_node(pre_limit, pre_ctrl);
2024 }
2025 _igvn.replace_input_of(pre_opaq, 1, pre_limit);
2026
2027 // Note:: we are making the main loop limit no longer precise;
2028 // need to round up based on stride.
2029 cl->set_nonexact_trip_count();
2030 if (!LoopLimitCheck && stride_con != 1 && stride_con != -1) { // Cutout for common case
2031 // "Standard" round-up logic: ([main_limit-init+(y-1)]/y)*y+init
2032 // Hopefully, compiler will optimize for powers of 2.
2033 Node *ctrl = get_ctrl(main_limit);
2034 Node *stride = cl->stride();
2035 Node *init = cl->init_trip()->uncast();
2036 Node *span = new SubINode(main_limit,init);
2037 register_new_node(span,ctrl);
2038 Node *rndup = _igvn.intcon(stride_con + ((stride_con>0)?-1:1));
2039 Node *add = new AddINode(span,rndup);
2040 register_new_node(add,ctrl);
2041 Node *div = new DivINode(0,add,stride);
2042 register_new_node(div,ctrl);
2043 Node *mul = new MulINode(div,stride);
2044 register_new_node(mul,ctrl);
2045 Node *newlim = new AddINode(mul,init);
2046 register_new_node(newlim,ctrl);
2047 main_limit = newlim;
2048 }
2049
2050 Node *main_cle = cl->loopexit();
2051 Node *main_bol = main_cle->in(1);
2052 // Hacking loop bounds; need private copies of exit test
2053 if( main_bol->outcnt() > 1 ) {// BoolNode shared?
2054 main_bol = main_bol->clone();// Clone a private BoolNode
2055 register_new_node( main_bol, main_cle->in(0) );
|