* tree-vectorizer.h (struct _loop_vec_info): Add num_iters_unchanged
field.
(LOOP_VINFO_NITERS_UNCHANGED): Define to num_iters_unchanged field.
* tree-vectorizer.c (set_prologue_iterations,
slpeel_tree_peel_loop_to_edge): Call unshare_expr on
LOOP_VINFO_NITERS_UNCHANGED before using it.
* gcc.c-torture/compile/
20071207-1.c: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130755
138bc75d-0d04-0410-961f-
82ee72b054a4
+2007-12-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/34371
+ * tree-vectorizer.h (struct _loop_vec_info): Add num_iters_unchanged
+ field.
+ (LOOP_VINFO_NITERS_UNCHANGED): Define to num_iters_unchanged field.
+ * tree-vectorizer.c (set_prologue_iterations,
+ slpeel_tree_peel_loop_to_edge): Call unshare_expr on
+ LOOP_VINFO_NITERS_UNCHANGED before using it.
+
2007-12-10 Eric Botcazou <ebotcazou@libertysurf.fr>
PR target/34403
+2007-12-10 Jakub Jelinek <jakub@redhat.com>
+
+ PR tree-optimization/34371
+ * gcc.c-torture/compile/20071207-1.c: New test.
+
2007-12-10 Simon Martin <simartin@users.sourceforge.net>
PR c++/34059
--- /dev/null
+/* PR tree-optimization/34371 */
+/* Testcase by Martin Michlmayr <tbm@cyrius.com> */
+
+void centerln (int width, int ch, char *s)
+{
+ unsigned int sidebar;
+ int i;
+ char linet1[1000];
+ char linet2[100];
+ sidebar = (width - __builtin_strlen (s)) / 2;
+ for (i = 0; i < sidebar; i++)
+ linet2[i] = ch;
+ __builtin_strcpy (linet1, linet2);
+}
tree gimplify_stmt_list;
tree cost_pre_condition = NULL_TREE;
tree scalar_loop_iters =
- LOOP_VINFO_NITERS_UNCHANGED (loop_vec_info_for_loop (loop));
+ unshare_expr (LOOP_VINFO_NITERS_UNCHANGED (loop_vec_info_for_loop (loop)));
e = single_pred_edge (bb_before_first_loop);
cond_bb = split_edge(e);
edge exit_e = single_exit (loop);
LOC loop_loc;
tree cost_pre_condition = NULL_TREE;
- tree scalar_loop_iters =
- LOOP_VINFO_NITERS_UNCHANGED (loop_vec_info_for_loop (loop));
if (!slpeel_can_duplicate_loop_p (loop, e))
return NULL;
build_int_cst (TREE_TYPE (first_niters), 0));
if (check_profitability)
{
- cost_pre_condition =
+ tree scalar_loop_iters
+ = unshare_expr (LOOP_VINFO_NITERS_UNCHANGED
+ (loop_vec_info_for_loop (loop)));
+ cost_pre_condition =
build2 (LE_EXPR, boolean_type_node, scalar_loop_iters,
build_int_cst (TREE_TYPE (scalar_loop_iters), th));
-
+
pre_condition = fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
cost_pre_condition, pre_condition);
}
/* Number of iterations. */
tree num_iters;
+ tree num_iters_unchanged;
/* Minimum number of iterations below which vectorization is expected to
not be profitable (as estimated by the cost model).
#define LOOP_VINFO_NITERS(L) (L)->num_iters
/* Since LOOP_VINFO_NITERS can change after prologue peeling
retain total unchanged scalar loop iterations for cost model. */
-#define LOOP_VINFO_NITERS_UNCHANGED(L) (L)->num_iters
+#define LOOP_VINFO_NITERS_UNCHANGED(L) (L)->num_iters_unchanged
#define LOOP_VINFO_COST_MODEL_MIN_ITERS(L) (L)->min_profitable_iters
#define LOOP_VINFO_VECTORIZABLE_P(L) (L)->vectorizable
#define LOOP_VINFO_VECT_FACTOR(L) (L)->vectorization_factor