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