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