On Wed, Oct 14, 2020 at 03:40:33PM +0200, Jan Hubicka wrote: > this patch adds logic to handle POINTER_PLUS_EXPR in compute_parm_map > that I originally did not since I tought that all such adjustments are > done by ancestor function. > > Bootstrapped/regtested x86_64-linux, will commit it shortly. > Honza > > gcc/ChangeLog: > > 2020-10-14 Jan Hubicka <hubi...@ucw.cz> > > * ipa-modref.c (compute_parm_map): Handle POINTER_PLUS_EXPR in > PASSTHROUGH. > > gcc/testsuite/ChangeLog: > > 2020-10-14 Jan Hubicka <hubi...@ucw.cz> > > * gcc.dg/ipa/modref-1.c: New test. > * gcc.dg/tree-ssa/modref-4.c: New test.
Both of these tests FAIL everywhere: FAIL: gcc.dg/ipa/modref-1.c (test for excess errors) FAIL: gcc.dg/ipa/modref-1.c scan-ipa-dump modref "param offset: 1" FAIL: gcc.dg/ipa/modref-1.c scan-ipa-dump modref "param offset: 2" FAIL: gcc.dg/tree-ssa/modref-4.c (test for excess errors) FAIL: gcc.dg/tree-ssa/modref-4.c scan-tree-dump modref1 "param offset: 1" UNRESOLVED: gcc.dg/tree-ssa/modref-4.c scan-tree-dump modref2 "param offset: 2" UNRESOLVED: gcc.dg/tree-ssa/modref-4.c scan-tree-dump modref2 "return 0" I've tried to fix most of things, but FAIL: gcc.dg/tree-ssa/modref-4.c scan-tree-dump modref1 "return 0" remains (it isn't even optimized in optimized dump). Committed to trunk as obvious anyway, but please tweak the modref-4.c test according to what you meant. 2020-10-15 Jakub Jelinek <ja...@redhat.com> * gcc.dg/ipa/modref-1.c: Remove space between param offset: and number in scan-ipa-dump. (b): Declare return type to void. (main): Declare return type to int. Change c to array of 3 chars. * gcc.dg/tree-ssa/modref-4.c: Remove space between param offset: and number in scan-ipa-dump. Use modref1 instead of modref2. (b): Declare return type to void. (main): Declare return type to int. Change c to array of 3 chars. --- gcc/testsuite/gcc.dg/ipa/modref-1.c.jj 2020-10-14 17:03:00.302245922 +0200 +++ gcc/testsuite/gcc.dg/ipa/modref-1.c 2020-10-15 10:13:43.044535887 +0200 @@ -8,16 +8,17 @@ void a(char *ptr, char *ptr2) } __attribute__((noinline)) -b(char *ptr) +void b(char *ptr) { a(ptr+1,&ptr[2]); } -main() + +int main() { - char c[2]={0,1,0}; + char c[3]={0,1,0}; b(c); return c[0]+c[2]; } /* Check that both param offsets are determined correctly. */ -/* { dg-final { scan-ipa-dump "param offset: 1" "modref" } } */ -/* { dg-final { scan-ipa-dump "param offset: 2" "modref" } } */ +/* { dg-final { scan-ipa-dump "param offset:1" "modref" } } */ +/* { dg-final { scan-ipa-dump "param offset:2" "modref" } } */ --- gcc/testsuite/gcc.dg/tree-ssa/modref-4.c.jj 2020-10-14 17:03:00.333245482 +0200 +++ gcc/testsuite/gcc.dg/tree-ssa/modref-4.c 2020-10-15 10:12:14.039825998 +0200 @@ -8,18 +8,19 @@ void a(char *ptr, char *ptr2) } __attribute__((noinline)) -b(char *ptr) +void b(char *ptr) { a(ptr+1,&ptr[2]); } -main() + +int main() { - char c[2]={0,1,0}; + char c[3]={0,1,0}; b(c); return c[0]+c[2]; } /* Check that both param offsets are determined correctly and the computation is optimized out. */ -/* { dg-final { scan-tree-dump "param offset: 1" "modref1" } } */ -/* { dg-final { scan-tree-dump "param offset: 2" "modref2" } } */ -/* { dg-final { scan-tree-dump "return 0" "modref2" } } */ +/* { dg-final { scan-tree-dump "param offset:1" "modref1" } } */ +/* { dg-final { scan-tree-dump "param offset:2" "modref1" } } */ +/* { dg-final { scan-tree-dump "return 0" "modref1" } } */ Jakub