src/hotspot/share/opto/superword.cpp
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File
*** old/src/hotspot/share/opto/superword.cpp	Thu Oct 26 18:34:52 2017
--- new/src/hotspot/share/opto/superword.cpp	Thu Oct 26 18:34:52 2017

*** 2166,2179 **** --- 2166,2181 ---- // Convert packs into vector node operations void SuperWord::output() { CountedLoopNode *cl = lpt()->_head->as_CountedLoop(); Compile* C = _phase->C; if (_packset.length() == 0) { + if (cl->is_main_loop()) { // Instigate more unrolling for optimization when vectorization fails. C->set_major_progress(); cl->set_notpassed_slp(); cl->mark_do_unroll_only(); + } return; } #ifndef PRODUCT if (TraceLoopOpts) {
*** 2415,2424 **** --- 2417,2429 ---- #endif } }//for (int i = 0; i < _block.length(); i++) C->set_max_vector_size(max_vlen_in_bytes); + if (max_vlen_in_bytes > 0) { + cl->mark_loop_vectorized(); + } if (SuperWordLoopUnrollAnalysis) { if (cl->has_passed_slp()) { uint slp_max_unroll_factor = cl->slp_max_unroll(); if (slp_max_unroll_factor == max_vlen) {
*** 2437,2447 **** --- 2442,2451 ---- cl->mark_do_unroll_only(); } } if (do_reserve_copy()) { cl->mark_loop_vectorized(); if (can_process_post_loop) { // Now create the difference of trip and limit and use it as our mask index. // Note: We limited the unroll of the vectorized loop so that // only vlen-1 size iterations can remain to be mask programmed. Node *incr = cl->incr();

src/hotspot/share/opto/superword.cpp
Index Unified diffs Context diffs Sdiffs Frames Patch New Old Previous File Next File