[PATCH] Remove empty loop with assumed finiteness (PR tree-optimization/89713)

Jeff Law law@redhat.com
Fri May 17 16:47:00 GMT 2019


On 5/16/19 10:17 PM, Feng Xue OS wrote:
> This patch is meant to give user a way to optimize away those empty loops which are impossible to be recognized by compiler, such as C++ STL container-based loop,
> 
>     void f (std::map<int, int> &m)
>     {
>         for (auto it = m.begin (); it != m.end (); ++it);
>     }
>  
> An option "-ffinite-loop" is added to tell compiler about finiteness of loops so that compiler can apply the optimization.
> 
> Feng
> 
> diff --git a/gcc/ChangeLog b/gcc/ChangeLog
> index d8bed3a..c55f2e6 100644
> --- a/gcc/ChangeLog
> +++ b/gcc/ChangeLog
> @@ -1,3 +1,18 @@
> +2019-05-16  Feng Xue  <fxue@os.amperecomputing.com>
> +
> +        PR tree-optimization/89713
> +        * doc/invoke.texi (-ffinite-loop): Document new option.
> +        * common.opt (-ffinite-loop): New option.
> +        * passes.def: Replace pass_cd_dce with pass_cd_dce2.
> +        * tree-pass.h (pass_cd_dce2): New declaration.
> +        * tree-ssa-dce.c (loop_has_true_exits): New function.
> +        (find_obviously_necessary_stmts): Add aggressive_loop_removal
> +        parameter.
> +        (perform_tree_ssa_dce, tree_ssa_cd_dce): Likewise.
> +        (class pass_cd_dce): Add new member aggressive_loop_removal.
> +        (pass_cd_dce::pass_cd_dce: Add alr parameter.
> +        (make_pass_cd_dce2): New function.
I'm not a big fan of this patch.  I'd rather be looking at either
improving our analysis or adding attributes to the loops to help the
analysis bits prove termination.

Jeff



More information about the Gcc-patches mailing list