On Mon, Dec 02, 2019 at 09:15:14AM +0100, Jakub Jelinek wrote:
> On Sun, Dec 01, 2019 at 08:09:56PM -0500, Marek Polacek wrote:
> > On Thu, Nov 28, 2019 at 11:29:20PM -0500, Jason Merrill wrote:
> > > Sounds like reduced_constant_expression_p needs to deal better with empty
> > > bases.
> > 
> > This got a bit complicated because it also needs to handle unions and
> > now we also need to heed vptr.  But the following seems to work.
> > 
> > (I'll skip the story about a bogus error I hit when building cmcstl2 and
> > the need to debug a ~90,000 LOC test, because creduce got stuck reducing
> > it.)
> 
> Note, I got creduce stuck several times and what helped is:
> --- /usr/bin/creduce  2019-02-15 17:17:32.000000000 +0100
> +++ /usr/bin/creduce.nonnested        2019-11-30 11:34:21.604937392 +0100
> @@ -802,7 +802,7 @@ my @all_methods = (
>      { "name" => "pass_clang",    "arg" => "local-to-global",        "pri" => 
> 9500, "C" => 1, },
>      { "name" => "pass_clang",    "arg" => "param-to-global",        "pri" => 
> 203,  "C" => 1, },
>      { "name" => "pass_clang",    "arg" => "param-to-local",         "pri" => 
> 204,  "C" => 1, },
> -    { "name" => "pass_clang",    "arg" => "remove-nested-function", "pri" => 
> 205,  "C" => 1, },
> +   #{ "name" => "pass_clang",    "arg" => "remove-nested-function", "pri" => 
> 205,  "C" => 1, },
>      { "name" => "pass_clang",    "arg" => "rename-fun",                      
>       "last_pass_pri" => 207, "C" => 1, },
>      { "name" => "pass_clang",    "arg" => "union-to-struct",        "pri" => 
> 208,  },
>      { "name" => "pass_clang",    "arg" => "rename-param",                    
>       "last_pass_pri" => 209, "C" => 1, },
> where I can use creduce.nonnested if normal creduce gets stuck.  That pass
> tends to increase size of code rather than reduce if there are nested
> functions, by adding a large series of temporaries:
>   type __reduce_tmp_123 = ...
>   type __reduce_tmp_122 = __reduce_tmp_123;
>   type __reduce_tmp_121 = __reduce_tmp_122;
>   type __reduce_tmp_120 = __reduce_tmp_121;
>   type __reduce_tmp_119 = __reduce_tmp_120;
>   type __reduce_tmp_118 = __reduce_tmp_119;
>   type __reduce_tmp_117 = __reduce_tmp_118;
> ...
> and every iteration adds another line.

Ah, that's useful, thanks!

--
Marek Polacek • Red Hat, Inc. • 300 A St, Boston, MA

Reply via email to