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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2021-02-12
      Known to work|                            |6.5.0
            Summary|Optimizer moves struct      |[8/9/10/11 Regression]
                   |initialization into loop    |Optimizer moves struct
                   |                            |initialization into loop
     Ever confirmed|0                           |1
          Component|c++                         |tree-optimization
           Keywords|                            |missed-optimization
      Known to fail|                            |11.0, 7.5.0
             Status|UNCONFIRMED                 |NEW
           Priority|P3                          |P2
                 CC|                            |jamborm at gcc dot gnu.org,
                   |                            |rguenth at gcc dot gnu.org
   Target Milestone|---                         |8.5

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.  It is SRA that with total scalarization re-materializes 's' before
the aggregate use it cannot transform (*dest_106 = s).  Looks like quite
pointless in any case (removing one set of inits just to re-emit them for
the single remat case), maybe there's no costing involved at all?

There isn't really sth like a pass that hoists stores so undoing this
is really hard which means better avoid total scalarization of sth
where rematerialization in a bigger loop depth is required?


--- t.C.117t.cplxlower1 2021-02-12 09:17:00.278704232 +0100
+++ t.C.118t.sra        2021-02-12 09:17:00.278704232 +0100
...
@@ -10,26 +58,46 @@

   <bb 2> [local count: 118111600]:
   s = {};
-  s.c[1] = 1;
-  s.c[2] = 2;
-  s.c[3] = 3;
-  s.c[4] = 4;
-  s.c[5] = 5;
-  s.c[6] = 6;
-  s.c[8] = 8;
-  s.c[9] = 9;
-  s.c[10] = 10;
-  s.c[11] = 11;
-  s.c[12] = 12;
-  s.c[13] = 13;
-  s.c[14] = 14;
-  s.c[16] = 16;
-  s.c[17] = 17;
-  s.c[18] = 18;
-  s.c[19] = 19;
-  s.c[20] = 20;
-  s.c[21] = 21;
-  s.c[22] = 22;
+  s$c$1_12 = 0;
+  s$c$2_5 = 0;
+  s$c$3_4 = 0;
+  s$c$4_101 = 0;
+  s$c$5_100 = 0;
+  s$c$6_99 = 0;
+  s$c$8_116 = 0;
+  s$c$9_119 = 0;
+  s$c$10_121 = 0;
+  s$c$11_124 = 0;
+  s$c$12_126 = 0;
+  s$c$13_129 = 0;
+  s$c$14_131 = 0;
+  s$c$16_64 = 0;
+  s$c$17_66 = 0;
+  s$c$18_69 = 0;
+  s$c$19_71 = 0;
+  s$c$20_74 = 0;
+  s$c$21_76 = 0;
+  s$c$22_79 = 0;
+  s$c$1_81 = 1;
+  s$c$2_84 = 2;
+  s$c$3_86 = 3;
+  s$c$4_89 = 4;
+  s$c$5_91 = 5;
+  s$c$6_94 = 6;
+  s$c$8_96 = 8;
+  s$c$9_29 = 9;
+  s$c$10_31 = 10;
+  s$c$11_34 = 11;
+  s$c$12_36 = 12;
+  s$c$13_39 = 13;
+  s$c$14_41 = 14;
+  s$c$16_44 = 16;
+  s$c$17_46 = 17;
+  s$c$18_49 = 18;
+  s$c$19_51 = 19;
+  s$c$20_54 = 20;
+  s$c$21_56 = 21;
+  s$c$22_59 = 22;
   count_104 = count_20(D) + 4294967295;
   if (count_20(D) != 0)
     goto <bb 3>; [89.00%]
@@ -40,6 +108,26 @@
   # dest_106 = PHI <dest_19(D)(2), dest_25(3)>
   # count_114 = PHI <count_104(2), count_23(3)>
   dest_25 = dest_106 + 24;
+  s.c[1] = s$c$1_81;
+  s.c[2] = s$c$2_84;
+  s.c[3] = s$c$3_86;
+  s.c[4] = s$c$4_89;
+  s.c[5] = s$c$5_91;
+  s.c[6] = s$c$6_94;
+  s.c[8] = s$c$8_96;
+  s.c[9] = s$c$9_29;
+  s.c[10] = s$c$10_31;
+  s.c[11] = s$c$11_34;
+  s.c[12] = s$c$12_36;
+  s.c[13] = s$c$13_39;
+  s.c[14] = s$c$14_41;
+  s.c[16] = s$c$16_44;
+  s.c[17] = s$c$17_46;
+  s.c[18] = s$c$18_49;
+  s.c[19] = s$c$19_51;
+  s.c[20] = s$c$20_54;
+  s.c[21] = s$c$21_56;
+  s.c[22] = s$c$22_59;
   *dest_106 = s;
   count_23 = count_114 + 4294967295;
   if (count_114 != 0)

Reply via email to