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

Reply via email to