Commit 03001a35 by Richard Biener Committed by Richard Biener

re PR tree-optimization/89649 (r269458 FAILs g++.dg/pr80481.C, scan-assembler-not vmovaps)

2019-03-11  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/89649
	* tree-vectorizer.h (vect_loop_versioning): Adjust prototype.
	* tree-vect-loop-manip.c (vect_do_peeling): Unset force_vectorize
	on the prolog and epilog loops.
	(vect_loop_versioning): Return copy of loop.
	* tree-vect-loop.c (vect_transform_loop): Unset force_vectorize
	on the non-vectorized version of the loop.

From-SVN: r269578
parent 470fa18b
2019-03-11 Richard Biener <rguenther@suse.de>
PR tree-optimization/89649
* tree-vectorizer.h (vect_loop_versioning): Adjust prototype.
* tree-vect-loop-manip.c (vect_do_peeling): Unset force_vectorize
on the prolog and epilog loops.
(vect_loop_versioning): Return copy of loop.
* tree-vect-loop.c (vect_transform_loop): Unset force_vectorize
on the non-vectorized version of the loop.
2019-03-10 Uroš Bizjak <ubizjak@gmail.com> 2019-03-10 Uroš Bizjak <ubizjak@gmail.com>
PR target/68924 PR target/68924
......
...@@ -2542,6 +2542,7 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1, ...@@ -2542,6 +2542,7 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1,
"slpeel_tree_duplicate_loop_to_edge_cfg failed.\n"); "slpeel_tree_duplicate_loop_to_edge_cfg failed.\n");
gcc_unreachable (); gcc_unreachable ();
} }
prolog->force_vectorize = false;
slpeel_update_phi_nodes_for_loops (loop_vinfo, prolog, loop, true); slpeel_update_phi_nodes_for_loops (loop_vinfo, prolog, loop, true);
first_loop = prolog; first_loop = prolog;
reset_original_copy_tables (); reset_original_copy_tables ();
...@@ -2612,6 +2613,7 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1, ...@@ -2612,6 +2613,7 @@ vect_do_peeling (loop_vec_info loop_vinfo, tree niters, tree nitersm1,
"slpeel_tree_duplicate_loop_to_edge_cfg failed.\n"); "slpeel_tree_duplicate_loop_to_edge_cfg failed.\n");
gcc_unreachable (); gcc_unreachable ();
} }
epilog->force_vectorize = false;
slpeel_update_phi_nodes_for_loops (loop_vinfo, loop, epilog, false); slpeel_update_phi_nodes_for_loops (loop_vinfo, loop, epilog, false);
/* Scalar version loop may be preferred. In this case, add guard /* Scalar version loop may be preferred. In this case, add guard
...@@ -2984,7 +2986,7 @@ vect_create_cond_for_alias_checks (loop_vec_info loop_vinfo, tree * cond_expr) ...@@ -2984,7 +2986,7 @@ vect_create_cond_for_alias_checks (loop_vec_info loop_vinfo, tree * cond_expr)
The versioning precondition(s) are placed in *COND_EXPR and The versioning precondition(s) are placed in *COND_EXPR and
*COND_EXPR_STMT_LIST. */ *COND_EXPR_STMT_LIST. */
void struct loop *
vect_loop_versioning (loop_vec_info loop_vinfo, vect_loop_versioning (loop_vec_info loop_vinfo,
unsigned int th, bool check_profitability, unsigned int th, bool check_profitability,
poly_uint64 versioning_threshold) poly_uint64 versioning_threshold)
...@@ -3154,4 +3156,6 @@ vect_loop_versioning (loop_vec_info loop_vinfo, ...@@ -3154,4 +3156,6 @@ vect_loop_versioning (loop_vec_info loop_vinfo,
GSI_SAME_STMT); GSI_SAME_STMT);
} }
update_ssa (TODO_update_ssa); update_ssa (TODO_update_ssa);
return nloop;
} }
...@@ -8201,8 +8201,10 @@ vect_transform_loop (loop_vec_info loop_vinfo) ...@@ -8201,8 +8201,10 @@ vect_transform_loop (loop_vec_info loop_vinfo)
versioning_threshold); versioning_threshold);
check_profitability = false; check_profitability = false;
} }
vect_loop_versioning (loop_vinfo, th, check_profitability, struct loop *sloop
versioning_threshold); = vect_loop_versioning (loop_vinfo, th, check_profitability,
versioning_threshold);
sloop->force_vectorize = false;
check_profitability = false; check_profitability = false;
} }
......
...@@ -1449,8 +1449,8 @@ extern void vect_set_loop_condition (struct loop *, loop_vec_info, ...@@ -1449,8 +1449,8 @@ extern void vect_set_loop_condition (struct loop *, loop_vec_info,
extern bool slpeel_can_duplicate_loop_p (const struct loop *, const_edge); extern bool slpeel_can_duplicate_loop_p (const struct loop *, const_edge);
struct loop *slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *, struct loop *slpeel_tree_duplicate_loop_to_edge_cfg (struct loop *,
struct loop *, edge); struct loop *, edge);
extern void vect_loop_versioning (loop_vec_info, unsigned int, bool, struct loop *vect_loop_versioning (loop_vec_info, unsigned int, bool,
poly_uint64); poly_uint64);
extern struct loop *vect_do_peeling (loop_vec_info, tree, tree, extern struct loop *vect_do_peeling (loop_vec_info, tree, tree,
tree *, tree *, tree *, int, bool, bool); tree *, tree *, tree *, int, bool, bool);
extern void vect_prepare_for_masked_peels (loop_vec_info); extern void vect_prepare_for_masked_peels (loop_vec_info);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment