https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97652

--- Comment #1 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Actually there is another propagation happening in ipa-cp analysis:

--- aa/pdt_14.f03.077i.cp       2020-10-31 09:00:52.809726530 +0100
+++ pdt_14.f03.077i.cp  2020-10-31 09:10:35.204755828 +0100
@@ -10,6 +10,8 @@
   Starting walk at: push_8 (&root, &C.4104);
   instance pointer: &root  Outer instance pointer: root offset: 0 (bits) vtbl
reference: 
   Function call may change dynamic type:push_8 (&root, &C.4103);
+ipa-modref: call stmt push_8 (&root, &C.4103);
+ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14
 Determining dynamic type for call: push_8 (&root, &C.4104);
   Starting walk at: push_8 (&root, &C.4104);
   instance pointer: &C.4104  Outer instance pointer: C.4104 offset: 0 (bits)
vtbl reference: 
@@ -19,6 +21,10 @@
   instance pointer: &root  Outer instance pointer: root offset: 0 (bits) vtbl
reference: 
   Function call may change dynamic type:push_8 (&root, &C.4104);
   Function call may change dynamic type:push_8 (&root, &C.4103);
+ipa-modref: call stmt push_8 (&root, &C.4104);
+ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14
+ipa-modref: call stmt push_8 (&root, &C.4103);
+ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14
 Determining dynamic type for call: push_8 (&root, &C.4105);
   Starting walk at: push_8 (&root, &C.4105);
   instance pointer: &C.4105  Outer instance pointer: C.4105 offset: 0 (bits)
vtbl reference: 
@@ -30,6 +36,12 @@
   Function call may change dynamic type:push_8 (&root, &C.4105);
   Function call may change dynamic type:push_8 (&root, &C.4104);
   Function call may change dynamic type:push_8 (&root, &C.4103);
+ipa-modref: call stmt push_8 (&root, &C.4105);
+ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14
+ipa-modref: call stmt push_8 (&root, &C.4104);
+ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14
+ipa-modref: call stmt push_8 (&root, &C.4103);
+ipa-modref: call to push_8/6 does not clobber ref: root alias sets: 14->14
 Determining dynamic type for call: _3 = pop_8 (&root);
   Starting walk at: _3 = pop_8 (&root);
   instance pointer: &root  Outer instance pointer: root offset: 0 (bits) vtbl
reference: 
@@ -129,10 +141,14 @@
        no arg info
     callsite  ch2701/7 -> pop_8/5 : 
        param 0: UNKNOWN
+         Aggregate passed by reference:
+           offset: 0, type: struct pdtlink_8 *, CONST: 0B
          value: 0x0, mask: 0xfffffffffffffff8
          VR  [1, -1]
     callsite  ch2701/7 -> push_8/6 : 
        param 0: UNKNOWN
+         Aggregate passed by reference:
+           offset: 0, type: struct pdtlink_8 *, CONST: 0B
          value: 0x0, mask: 0xfffffffffffffff8
          VR  [1, -1]
        param 1: CONST: &C.4105 -> 3.0e+0
@@ -140,6 +156,8 @@
          Unknown VR
     callsite  ch2701/7 -> push_8/6 : 
        param 0: UNKNOWN
+         Aggregate passed by reference:
+           offset: 0, type: struct pdtlink_8 *, CONST: 0B
          value: 0x0, mask: 0xfffffffffffffff8
          VR  [1, -1]
        param 1: CONST: &C.4104 -> 2.0e+0

The jump function is not used for cloning, only triggers inline, but the
conclusion seems wrong.  push_8 can make root non-0.  Root is of type pdtlink_8
so perhaps Frontend produces multiple copies of these.

push_8 store is:
 - Analyzing store: *self_34(D)                                                 
   - Recording base_set=8 ref_set=8 parm=0                                      
so indeed a different alias set than 14 used by ch2701

Reply via email to