[patch,committed] Work around problem in gen-pass-instances.awk

Richard Biener rguenther@suse.de
Wed Oct 26 11:08:00 GMT 2016


On Wed, 26 Oct 2016, Jakub Jelinek wrote:

> On Wed, Oct 26, 2016 at 11:54:36AM +0200, Georg-Johann Lay wrote:
> > gen-pass-instances.awk is sensitive to the order in which directives are
> > written down, e.g. in target-pass.def: If a pass that runs first is added
> > first, then the last pass is skipped and not added to pass-instances.def.
> > 
> > Work around is to add the 2nd pass before adding the 1st pass...
> > 
> > http://gcc.gnu.org/r241547
> > 
> > No so obvious, but committed anyway...
> 
> We shouldn't be working around bugs, but fixing them.
> 
> Here is a fix (so far tested only with running
> for i in alpha avr i386 sparc aarch64; do 
>   awk -f ./gen-pass-instances.awk.jj passes.def config/$i/${i}-passes.def > /tmp/1
>   awk -f ./gen-pass-instances.awk passes.def config/$i/${i}-passes.def > /tmp/2
>   diff -up /tmp/1 /tmp/2 # and diff -upb
> done
> ), for avr for both avr-passes.def before your workaround and after it.
> Except for the desirable whitespace changes, the only change is in the
> pre-workaround avr-passes.def having the same output as after-workaround
> (except for the comments at the end of file).
> 
> The fix for the avr issue is just the first hunk, the first part of the
> second hunk attempts to deal with
> NEXT_PASS ( avr_pass_casesi, 1);
> instead of the desirable
> NEXT_PASS (avr_pass_casesi, 1);
> (all arguments have the whitespace they have in *.def before them (after ,
> or ( characters).  So the first part of the second hunk strips away
> whitespace, so that one doesn't need to type
> INSERT_PASS_BEFORE (pass_free_cfg, 1,avr_pass_casesi);
> and the second part of the second hunk and third hunk deal with similar
> issue for the optional argument, we used to emit
> NEXT_PASS_WITH_ARG (pass_dominator, 1,  false /* may_peel_loop_headers_p */);
> rather than
> NEXT_PASS_WITH_ARG (pass_dominator, 1, false /* may_peel_loop_headers_p */);
> because the space from
> NEXT_PASS (pass_dominator, false /* may_peel_loop_headers_p */);
> (in between , and false) is already there and we add another one.
> 
> Ok for trunk if it passes bootstrap/regtest (though, as it doesn't change
> anything but whitespace on x86_64, it shouldn't make a difference)?

Ok.

Richard.

> 2016-10-26  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* gen-pass-instances.awk (adjust_linenos): INcrement pass_lines[p]
> 	by increment rather than double it.
> 	(insert_remove_pass): Strip leading whitespace from args[3].  Don't
> 	emit a space before args[4].
> 	(END): Don't emit a space before with_arg.
> 
> --- gcc/gen-pass-instances.awk.jj	2016-10-10 10:41:32.000000000 +0200
> +++ gcc/gen-pass-instances.awk	2016-10-26 12:30:20.637310242 +0200
> @@ -90,7 +90,7 @@ function adjust_linenos(above, increment
>  {
>    for (p in pass_lines)
>      if (pass_lines[p] >= above)
> -      pass_lines[p] += pass_lines[p];
> +      pass_lines[p] += increment;
>    if (increment > 0)
>      for (i = lineno - 1; i >= above; i--)
>        lines[i + increment] = lines[i];
> @@ -100,16 +100,18 @@ function adjust_linenos(above, increment
>    lineno += increment;
>  }
>  
> -function insert_remove_pass(line, fnname)
> +function insert_remove_pass(line, fnname,	arg3)
>  {
>    parse_line($0, fnname);
>    pass_name = args[1];
>    if (pass_name == "PASS")
>      return 1;
>    pass_num = args[2] + 0;
> -  new_line = prefix "NEXT_PASS (" args[3];
> +  arg3 = args[3];
> +  sub(/^[ \t]*/, "", arg3);
> +  new_line = prefix "NEXT_PASS (" arg3;
>    if (args[4])
> -    new_line = new_line ", " args[4];
> +    new_line = new_line "," args[4];
>    new_line = new_line ")" postfix;
>    if (!pass_lines[pass_name, pass_num])
>      {
> @@ -218,7 +220,7 @@ END {
>  	    printf "NEXT_PASS";
>  	  printf " (%s, %s", pass_name, pass_num;
>  	  if (with_arg)
> -	    printf ", %s", with_arg;
> +	    printf ",%s", with_arg;
>  	  printf ")%s\n", postfix;
>  	}
>        else
> 
> 
> 	Jakub
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)



More information about the Gcc-patches mailing list