[Bug middle-end/59409] [4.9 Regression] 253.perlbmk in SPEC CPU 2K is miscompiled
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sat Dec 7 15:57:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59409
--- Comment #10 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to rguenther@suse.de from comment #9)
> >
> >Is that ever possible to have latch execution count < 0
> >and FIRST_NITERS == 0? It happens in x32 253.perlbmk.
>
> That should be impossible.
>
That is what I thought too. But this patch
diff --git a/gcc/tree-vect-loop-manip.c b/gcc/tree-vect-loop-manip.c
index 380fd22..68c24a0 100644
--- a/gcc/tree-vect-loop-manip.c
+++ b/gcc/tree-vect-loop-manip.c
@@ -1273,6 +1273,17 @@ slpeel_tree_peel_loop_to_edge (struct loop *loop,
pre_condition =
fold_build2 (LT_EXPR, boolean_type_node, scalar_loop_iters,
build_int_cst (TREE_TYPE (scalar_loop_iters), limit));
+ tree first_condition =
+ fold_build2 (LE_EXPR, boolean_type_node, *first_niters,
+ build_int_cst (TREE_TYPE (*first_niters), 0));
+ first_condition =
+ fold_build2 (TRUTH_AND_EXPR, boolean_type_node,
+ first_condition,
+ fold_build2 (LT_EXPR, boolean_type_node, scalar_loop_iters,
+ *first_niters));
+ pre_condition =
+ fold_build2 (TRUTH_OR_EXPR, boolean_type_node,
+ pre_condition, first_condition);
if (cond_expr)
{
pre_condition =
fixes the problem. But I can't explain why/how it can make
a difference at all.
More information about the Gcc-bugs
mailing list