re PR tree-optimization/78396 (gcc.dg/vect/bb-slp-cond-1.c FAILs after fix for PR77848)
2016-11-23 Richard Biener <rguenther@suse.de> PR tree-optimization/78396 * tree-vectorizer.c (vectorize_loops): If an innermost loop didn't vectorize try vectorizing an if-converted body using BB vectorization. * gcc.dg/vect/bb-slp-cond-1.c: Adjust. From-SVN: r242759
This commit is contained in:
parent
07ce146666
commit
e600f2198f
@ -1,3 +1,9 @@
|
||||
2016-11-23 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/78396
|
||||
* tree-vectorizer.c (vectorize_loops): If an innermost loop didn't
|
||||
vectorize try vectorizing an if-converted body using BB vectorization.
|
||||
|
||||
2016-11-23 Richard Sandiford <richard.sandiford@arm.com>
|
||||
Alan Hayward <alan.hayward@arm.com>
|
||||
David Sherwood <david.sherwood@arm.com>
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-11-23 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/78396
|
||||
* gcc.dg/vect/bb-slp-cond-1.c: Adjust.
|
||||
|
||||
2016-11-23 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/78482
|
||||
|
@ -1,4 +1,5 @@
|
||||
/* { dg-require-effective-target vect_condition } */
|
||||
/* { dg-additional-options "-fdump-tree-vect-details" } */
|
||||
|
||||
#include "tree-vect.h"
|
||||
|
||||
@ -41,5 +42,10 @@ int main ()
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "slp1" { target vect_element_align } } } */
|
||||
/* Basic blocks of if-converted loops are vectorized from within the loop
|
||||
vectorizer pass. In this case it is really a deficiency in loop
|
||||
vectorization data dependence analysis that causes us to require
|
||||
basic block vectorization in the first place. */
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "basic block vectorized" 1 "vect" { target vect_element_align } } } */
|
||||
|
||||
|
@ -540,6 +540,7 @@ vectorize_loops (void)
|
||||
|| loop->force_vectorize)
|
||||
{
|
||||
loop_vec_info loop_vinfo, orig_loop_vinfo = NULL;
|
||||
gimple *loop_vectorized_call = vect_loop_vectorized_call (loop);
|
||||
vectorize_epilogue:
|
||||
vect_location = find_loop_location (loop);
|
||||
if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOCATION
|
||||
@ -558,6 +559,33 @@ vectorize_epilogue:
|
||||
if (loop_constraint_set_p (loop, LOOP_C_FINITE))
|
||||
vect_free_loop_info_assumptions (loop);
|
||||
|
||||
/* If we applied if-conversion then try to vectorize the
|
||||
BB of innermost loops.
|
||||
??? Ideally BB vectorization would learn to vectorize
|
||||
control flow by applying if-conversion on-the-fly, the
|
||||
following retains the if-converted loop body even when
|
||||
only non-if-converted parts took part in BB vectorization. */
|
||||
if (flag_tree_slp_vectorize != 0
|
||||
&& loop_vectorized_call
|
||||
&& ! loop->inner)
|
||||
{
|
||||
basic_block bb = loop->header;
|
||||
for (gimple_stmt_iterator gsi = gsi_start_bb (bb);
|
||||
!gsi_end_p (gsi); gsi_next (&gsi))
|
||||
{
|
||||
gimple *stmt = gsi_stmt (gsi);
|
||||
gimple_set_uid (stmt, -1);
|
||||
gimple_set_visited (stmt, false);
|
||||
}
|
||||
if (vect_slp_bb (bb))
|
||||
{
|
||||
dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, vect_location,
|
||||
"basic block vectorized\n");
|
||||
fold_loop_vectorized_call (loop_vectorized_call,
|
||||
boolean_true_node);
|
||||
ret |= TODO_cleanup_cfg;
|
||||
}
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -575,7 +603,6 @@ vectorize_epilogue:
|
||||
break;
|
||||
}
|
||||
|
||||
gimple *loop_vectorized_call = vect_loop_vectorized_call (loop);
|
||||
if (loop_vectorized_call)
|
||||
set_uid_loop_bbs (loop_vinfo, loop_vectorized_call);
|
||||
if (LOCATION_LOCUS (vect_location) != UNKNOWN_LOCATION
|
||||
|
Loading…
Reference in New Issue
Block a user