> On Thu, Dec 10, 2015 at 08:30:37AM +0100, Jan Hubicka wrote:
> >     * ipa-cp.c (ipcp_cloning_candidate_p): Use node->optimize_for_size_p.
> >     (good_cloning_opportunity_p): Likewise.
> >     (gather_context_independent_values): Do not return true when
> >     polymorphic call context is known or when we have known aggregate
> >     value of unused parameter.
> >     (estimate_local_effects): Try to create clone for all context
> >     when either some params are substituted or devirtualization is possible
> >     or some params can be removed; use local flag instead of
> >     node->will_be_removed_from_program_if_no_direct_calls_p.
> >     (identify_dead_nodes): Likewise.
> 
> This commit breaks several guality tests on S/390x:

The patch changes ipa-cp heuristics in a way that it will clone in order to 
remove
unused parameter.  Previously it did know how to remove unused parameter but 
would
do so only if some of function's parameter (perhaps the unused one) was also 
constant.
This is inconsistent.  As a result we do more ipa-cp cloning and I suppose we 
are
more likely to hit them on guality for simplified testcases that often contain 
unused
code:
int __attribute__((noinline))
foo (int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7)
{
  char *x = __builtin_alloca (arg7);
  int __attribute__ ((aligned(32))) y;

  y = 2;
  asm (NOP : "=m" (y), "=m" (b) : "m" (y));
  x[0] = 25;
  asm (NOP : "=m" (x[0]), "=m" (a) : "m" (x[0]), "m" (b));
  return y;
}

int
main ()
{
  int l = 0;
  asm ("" : "=r" (l) : "0" (l));
  a = foo (l + 1, l + 2, l + 3, l + 4, l + 5, l + 6, l + 30);
  asm volatile ("" :: "r" (l));
  return 0;
}

I am trying to understand Jakub's debug code and perhaps it can be improved. 
But in
the case of optimized out unused parameters I think it is perfectly resonable to
say that the variable was optimized out.

As you can see, the testcase explicitely prevents ipa-cp constant propagation 
by the
asm statement.  We can just update the testcases to use the parameters and test
the original issue again.
> 
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 y == 2
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 y == 2
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 16 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 16 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 16 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 16 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 16 y == 2
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 18 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 18 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 18 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 18 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-1.c   -O3 -g  line 18 y == 2
>  FAIL: gcc.dg/guality/pr36728-2.c   -O2  line 18 *x == (char) 25
>  FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fno-use-linker-plugin 
> -flto-partition=none  line 18 *x == (char) 25
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg7 == 30
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 y == 2
>  FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 *x == (char) 25
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 arg7 == 30
> +FAIL: gcc.dg/guality/pr36728-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 18 y == 2
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 16 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 16 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 16 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 16 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 16 arg7 == 30
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 16 y == 2
>  FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 18 *x == (char) 25
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 18 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 18 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 18 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 18 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 18 arg7 == 30
> +FAIL: gcc.dg/guality/pr36728-2.c   -O3 -g  line 18 y == 2
>  FAIL: gcc.dg/guality/pr36728-2.c   -Os  line 18 *x == (char) 25
> +FAIL: gcc.dg/guality/pr36728-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 14 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 14 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 14 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 14 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-3.c   -O3 -g  line 14 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-3.c   -O3 -g  line 14 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-3.c   -O3 -g  line 14 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-3.c   -O3 -g  line 14 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-3.c   -O3 -g  line 16 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-3.c   -O3 -g  line 16 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-3.c   -O3 -g  line 16 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-3.c   -O3 -g  line 16 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 14 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 14 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 14 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 14 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 14 arg7 == 30
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 16 arg7 == 30
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 14 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 14 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 14 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 14 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 14 arg7 == 30
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 16 arg3 == 3
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 16 arg4 == 4
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 16 arg5 == 5
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 16 arg6 == 6
> +FAIL: gcc.dg/guality/pr36728-4.c   -O3 -g  line 16 arg7 == 30
> ...
>  FAIL: gcc.dg/guality/vla-1.c   -O1  line 17 sizeof (a) == 6
>  FAIL: gcc.dg/guality/vla-1.c   -O2  line 17 sizeof (a) == 6
>  FAIL: gcc.dg/guality/vla-1.c   -O2 -flto -fno-use-linker-plugin 
> -flto-partition=none  line 17 sizeof (a) == 6
> +FAIL: gcc.dg/guality/vla-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 17 i == 5
>  FAIL: gcc.dg/guality/vla-1.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  line 17 sizeof (a) == 6
> +FAIL: gcc.dg/guality/vla-1.c   -O3 -g  line 17 i == 5
>  FAIL: gcc.dg/guality/vla-1.c   -O3 -g  line 17 sizeof (a) == 6
>  FAIL: gcc.dg/guality/vla-1.c   -Os  line 17 sizeof (a) == 6
> 
> What can I do to help fixing this?
> 
> Ciao
> 
> Dominik ^_^  ^_^
> 
> -- 
> 
> Dominik Vogt
> IBM Germany

Reply via email to