------- Comment #12 from jakub at gcc dot gnu dot org  2008-04-24 09:59 -------
This is actually a tree optimization issue.  In optimized dump without -DGOOD
we have:
  bar (&g[0][0] + 288, &g[0][0]);
  bar (&g[0][0] + 324, &g[1][0]);
  bar (&g[0][0] + 360, &g[2][0]);
  bar (&g[0][0] + 396, &g[3][0]);
  bar (&g[1][0], &g[4][0]);
  bar (&g[0][0] + 468, &g[5][0]);
  bar (&g[0][0] + 504, &g[6][0]);
  bar (&g[0][0] + 540, &g[7][0]);
note the bogus first argument for 5th bar call, should have been &g[0][0] + 432
aka &g[12][0].
In *.reassoc2 we have for the 4th and 5th bar calls:
  i_73 = i_56 + 1;
  k_80 = i_73 + 8;
  D.1588_81 = (long unsigned int) k_80;
  D.1589_82 = D.1588_81 * 36;
  D.1590_83 = D.1589_82 + -288;
  D.1591_84 = &g + D.1590_83;
  D.1592_85 = &(*D.1591_84)[0];
  D.1594_86 = &g[0][0] + D.1589_82;
  bar (D.1594_86, D.1592_85);
  i_90 = i_73 + 1;
  k_97 = i_90 + 8;
  D.1588_98 = (long unsigned int) k_97;
  D.1589_99 = D.1588_98 * 36;
  D.1590_100 = D.1589_99 + -288;
  D.1591_101 = &g + D.1590_100;
  D.1592_102 = &(*D.1591_101)[0];
  D.1594_103 = &g[0][0] + D.1589_99;
  bar (D.1594_103, D.1592_102);
which looks correct, but in *.vrp2:
  i_73 = 3;
  k_80 = 11;
  D.1588_81 = 11;
  D.1589_82 = 396;
  D.1590_83 = 108;
  D.1591_84 = &g[3];
  D.1592_85 = &(*D.1591_84)[0];
  D.1594_86 = &g[0][0] + 396;
  bar (D.1594_86, D.1592_85);
  i_90 = 4;
  k_97 = 12;
  D.1588_98 = 12;
  D.1589_99 = 432;
  D.1590_100 = 144;
  D.1591_101 = &g[4];
  D.1592_102 = &(*D.1591_101)[0];
  D.1594_103 = &g[1][0];
  bar (&g[1][0], D.1592_102);
which is wrong.  So to me this looks like vrp bug.


-- 

jakub at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
          Component|rtl-optimization            |tree-optimization


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=36008

Reply via email to