Hi Richard, Thanks for the review.
On 6 July 2018 at 20:17, Richard Biener <richard.guent...@gmail.com> wrote: > On Fri, Jul 6, 2018 at 11:45 AM Kugan Vivekanandarajah > <kugan.vivekanandara...@linaro.org> wrote: >> >> Hi Richard, >> >> > It was rewrite_to_non_trapping_overflow available in tree.h. Thus >> > final value replacement >> > could use that before gimplifying instead of using >> > rewrite_to_defined_overflow >> Thanks. >> >> Is the attached patch OK? I am testing this on x86_64-linux-gnu and if >> there is no new regressions. > > Please clean up the control flow to > > if (...) > def = rewrite_to_non_trapping_overflow (def); > def = force_gimple_operand_gsi (&gsi, def, false, NULL_TREE, > true, GSI_SAME_STMT); I also had to add flag_trapv like we do in other places (for flag_wrapv) when calling rewrite_to_non_trapping_overflow. Attached patch bootstraps and there is no new regressions in x86-64-linux-gnu. Is this OK? Thanks, Kugan > > OK with that change. > Richard. > >> Thanks, >> Kugan >> >> gcc/ChangeLog: >> >> 2018-07-06 Kugan Vivekanandarajah <kug...@linaro.org> >> >> * tree-scalar-evolution.c (final_value_replacement_loop): Use >> rewrite_to_non_trapping_overflow instead of rewrite_to_defined_overflow.
From f3ecde5ff57d361e452965550aca94560629e784 Mon Sep 17 00:00:00 2001 From: Kugan Vivekanandarajah <kugan.vivekanandara...@linaro.org> Date: Fri, 6 Jul 2018 13:34:41 +1000 Subject: [PATCH] rewrite with rewrite_to_non_trapping_overflow Change-Id: I18bb9713b4562cd3f3954c3997bb376969d8ce9b --- gcc/tree-scalar-evolution.c | 29 +++++++---------------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/gcc/tree-scalar-evolution.c b/gcc/tree-scalar-evolution.c index 4b0ec02..4feb4b1 100644 --- a/gcc/tree-scalar-evolution.c +++ b/gcc/tree-scalar-evolution.c @@ -267,6 +267,7 @@ along with GCC; see the file COPYING3. If not see #include "gimple-iterator.h" #include "gimplify-me.h" #include "tree-cfg.h" +#include "tree-eh.h" #include "tree-ssa-loop-ivopts.h" #include "tree-ssa-loop-manip.h" #include "tree-ssa-loop-niter.h" @@ -3615,30 +3616,14 @@ final_value_replacement_loop (struct loop *loop) if (folded_casts && ANY_INTEGRAL_TYPE_P (TREE_TYPE (def)) && TYPE_OVERFLOW_UNDEFINED (TREE_TYPE (def))) { - gimple_seq stmts; - gimple_stmt_iterator gsi2; - def = force_gimple_operand (def, &stmts, true, NULL_TREE); - gsi2 = gsi_start (stmts); - while (!gsi_end_p (gsi2)) - { - gimple *stmt = gsi_stmt (gsi2); - gimple_stmt_iterator gsi3 = gsi2; - gsi_next (&gsi2); - gsi_remove (&gsi3, false); - if (is_gimple_assign (stmt) - && arith_code_with_undefined_signed_overflow - (gimple_assign_rhs_code (stmt))) - gsi_insert_seq_before (&gsi, - rewrite_to_defined_overflow (stmt), - GSI_SAME_STMT); - else - gsi_insert_before (&gsi, stmt, GSI_SAME_STMT); - } + bool saved_flag_trapv = flag_trapv; + flag_trapv = 1; + def = rewrite_to_non_trapping_overflow (def); + flag_trapv = saved_flag_trapv; } - else - def = force_gimple_operand_gsi (&gsi, def, false, NULL_TREE, - true, GSI_SAME_STMT); + def = force_gimple_operand_gsi (&gsi, def, false, NULL_TREE, + true, GSI_SAME_STMT); gassign *ass = gimple_build_assign (rslt, def); gsi_insert_before (&gsi, ass, GSI_SAME_STMT); if (dump_file) -- 2.7.4