public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* Fix PR middle-end/57370
@ 2013-06-27 17:21 Easwaran Raman
  2013-07-12 15:36 ` Easwaran Raman
  0 siblings, 1 reply; 16+ messages in thread
From: Easwaran Raman @ 2013-06-27 17:21 UTC (permalink / raw)
  To: gcc-patches; +Cc: Richard Biener

A newly generated statement in build_and_add_sum  function of
tree-ssa-reassoc.c has to be assigned the UID of its adjacent
statement. In one instance, it was assigned the wrong uid (of an
earlier phi statement) which messed up the IR and caused the test
program to hang. Bootstraps and no test regressions on x86_64/linux.
Ok for trunk?

Thanks,
Easwaran


2013-06-27  Easwaran Raman  <eraman@google.com>

        PR middle-end/57370
        * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
        node for a non-phi gimple statement.

testsuite/ChangeLog:
2013-06-27  Easwaran Raman  <eraman@google.com>

        PR middle-end/57370
        * gfortran.dg/reassoc_12.f90: New testcase.


Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
===================================================================
--- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
+++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
@@ -0,0 +1,74 @@
+! { dg-do compile }
+! { dg-options "-O2 -ffast-math" }
+! PR middle-end/57370
+
+ SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
+                                       grad_deriv,npoints, sx)
+    IMPLICIT REAL*8 (t)
+    INTEGER, PARAMETER :: dp=8
+    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
+                                           e_ndrho_ndrho_rho
+      DO ii=1,npoints
+          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
+            t1425 = t233 * t557
+            t1429 = beta * t225
+            t1622 = t327 * t1621
+            t1626 = t327 * t1625
+            t1632 = t327 * t1631
+            t1685 = t105 * t1684
+            t2057 = t1636 + t8 * (t2635 + t3288)
+          END IF
+          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
+            t5469 = t5440 - t5443 - t5446 - t5449 - &
+                    t5451 - t5454 - t5456 + t5459  - &
+                    t5462 + t5466 - t5468
+            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
+            t5489 = 0.1600000000e2_dp * t1429 * t1658
+            t5531 = 0.160e2_dp * t112 * t1626
+            t5533 = 0.160e2_dp * t112 * t1632
+            t5537 = 0.160e2_dp * t112 * t1622
+            t5541 = t5472 - t5478 - t5523 + t5525 + &
+                    t5531 + t5533 + t5535 + t5537 + &
+                    t5540
+            t5565 = t112 * t1685
+            t5575 = t5545 - t5548 + t5551 + t5553 - &
+                    t5558 + t5560 - t5562 + t5564 - &
+                    0.80e1_dp * t5565 + t5568 + t5572 + &
+                    t5574
+            t5611 = t5579 - t5585 + t5590 - t5595 + &
+                    t5597 - t5602 + t5604 + t5607 + &
+                    t5610
+            t5613 = t5469 + t5541 + t5575 + t5611
+            t6223 = t6189 - &
+                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
+                    t6222
+            t6227 = - t8 * (t5305 + t6223)
+            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
+                     t6227 * sx
+            t6352 = t5440 - t5443 - t5446 - t5449 - &
+                    t5451 - t5454 + &
+                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
+                    t5456 + t5459 - t5462 + t5466 - &
+                    t5468
+            t6363 = t5480 - t5489 + &
+                    0.9600000000e2_dp  * t1054 * t640 * t3679
+            t6367 = t5472 - t5474 - t5478 - t5523 + &
+                    t5525 + t5531 + t5533 + t5535 + &
+                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
+                    t5540
+            t6370 = t5545 - t5548 + t5551 + t5553 - &
+                    t5558 + t5560 - t5562 + t5564  - &
+                    0.40e1_dp * t5565 + &
+                    t5568 + t5572 + t5574
+            t6373 = t5579 - t5585 + t5590 - t5595 + &
+                    t5597 - t5602 + t5604 + t5607 + &
+                    t5610
+            t6375 = t6352 + t6367 + t6370 + t6373
+            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
+            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
+            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
+                     t6669 * sx
+          END IF
+      END DO
+  END SUBROUTINE xb88_lr_adiabatic_lda_calc
+
Index: gcc/tree-ssa-reassoc.c
===================================================================
--- gcc/tree-ssa-reassoc.c        (revision 200429)
+++ gcc/tree-ssa-reassoc.c        (working copy)
@@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
       if (gimple_code (op1def) == GIMPLE_PHI)
         {
           gsi = gsi_after_labels (gimple_bb (op1def));
-           gimple_set_uid (sum, gimple_uid (op1def));
+          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
           gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
         }
       else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-06-27 17:21 Fix PR middle-end/57370 Easwaran Raman
@ 2013-07-12 15:36 ` Easwaran Raman
       [not found]   ` <CAPK5YPYXHtxs=+LpJNeZuKU+hmx80zjG1qQgeetxLt6qtGBSJA@mail.gmail.com>
  0 siblings, 1 reply; 16+ messages in thread
From: Easwaran Raman @ 2013-07-12 15:36 UTC (permalink / raw)
  To: gcc-patches; +Cc: Richard Biener

Ping.

On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
> A newly generated statement in build_and_add_sum  function of
> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
> statement. In one instance, it was assigned the wrong uid (of an
> earlier phi statement) which messed up the IR and caused the test
> program to hang. Bootstraps and no test regressions on x86_64/linux.
> Ok for trunk?
>
> Thanks,
> Easwaran
>
>
> 2013-06-27  Easwaran Raman  <eraman@google.com>
>
>         PR middle-end/57370
>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>         node for a non-phi gimple statement.
>
> testsuite/ChangeLog:
> 2013-06-27  Easwaran Raman  <eraman@google.com>
>
>         PR middle-end/57370
>         * gfortran.dg/reassoc_12.f90: New testcase.
>
>
> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
> ===================================================================
> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
> @@ -0,0 +1,74 @@
> +! { dg-do compile }
> +! { dg-options "-O2 -ffast-math" }
> +! PR middle-end/57370
> +
> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
> +                                       grad_deriv,npoints, sx)
> +    IMPLICIT REAL*8 (t)
> +    INTEGER, PARAMETER :: dp=8
> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
> +                                           e_ndrho_ndrho_rho
> +      DO ii=1,npoints
> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
> +            t1425 = t233 * t557
> +            t1429 = beta * t225
> +            t1622 = t327 * t1621
> +            t1626 = t327 * t1625
> +            t1632 = t327 * t1631
> +            t1685 = t105 * t1684
> +            t2057 = t1636 + t8 * (t2635 + t3288)
> +          END IF
> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
> +                    t5451 - t5454 - t5456 + t5459  - &
> +                    t5462 + t5466 - t5468
> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
> +            t5531 = 0.160e2_dp * t112 * t1626
> +            t5533 = 0.160e2_dp * t112 * t1632
> +            t5537 = 0.160e2_dp * t112 * t1622
> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
> +                    t5531 + t5533 + t5535 + t5537 + &
> +                    t5540
> +            t5565 = t112 * t1685
> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
> +                    t5558 + t5560 - t5562 + t5564 - &
> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
> +                    t5574
> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
> +                    t5597 - t5602 + t5604 + t5607 + &
> +                    t5610
> +            t5613 = t5469 + t5541 + t5575 + t5611
> +            t6223 = t6189 - &
> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
> +                    t6222
> +            t6227 = - t8 * (t5305 + t6223)
> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
> +                     t6227 * sx
> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
> +                    t5451 - t5454 + &
> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
> +                    t5456 + t5459 - t5462 + t5466 - &
> +                    t5468
> +            t6363 = t5480 - t5489 + &
> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
> +                    t5525 + t5531 + t5533 + t5535 + &
> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
> +                    t5540
> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
> +                    t5558 + t5560 - t5562 + t5564  - &
> +                    0.40e1_dp * t5565 + &
> +                    t5568 + t5572 + t5574
> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
> +                    t5597 - t5602 + t5604 + t5607 + &
> +                    t5610
> +            t6375 = t6352 + t6367 + t6370 + t6373
> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
> +                     t6669 * sx
> +          END IF
> +      END DO
> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
> +
> Index: gcc/tree-ssa-reassoc.c
> ===================================================================
> --- gcc/tree-ssa-reassoc.c        (revision 200429)
> +++ gcc/tree-ssa-reassoc.c        (working copy)
> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>        if (gimple_code (op1def) == GIMPLE_PHI)
>          {
>            gsi = gsi_after_labels (gimple_bb (op1def));
> -           gimple_set_uid (sum, gimple_uid (op1def));
> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>          }
>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
       [not found]   ` <CAPK5YPYXHtxs=+LpJNeZuKU+hmx80zjG1qQgeetxLt6qtGBSJA@mail.gmail.com>
@ 2013-08-07 16:52     ` Easwaran Raman
  2013-08-27 10:48     ` Richard Biener
  1 sibling, 0 replies; 16+ messages in thread
From: Easwaran Raman @ 2013-08-07 16:52 UTC (permalink / raw)
  To: gcc-patches; +Cc: Richard Biener

Ping.

On Wed, Jul 31, 2013 at 4:34 PM, Easwaran Raman <eraman@google.com> wrote:
> I have a new patch that supersedes this. The new patch also fixes PR
> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
> no test regression on x86_64/linux. Ok for trunk?
>
> 2013-07-31  Easwaran Raman  <eraman@google.com>
>
>     PR middle-end/57370
>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>     of debug statements that cause inconsistent IR.
>
>
> testsuite/ChangeLog:
> 2013-07-31  Easwaran Raman  <eraman@google.com>
>
>     PR middle-end/57370
>     PR tree-optimization/57393
>     PR tree-optimization/58011
>     * gfortran.dg/reassoc_12.f90: New testcase.
>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>
>
> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>> Ping.
>>
>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>> A newly generated statement in build_and_add_sum  function of
>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>> statement. In one instance, it was assigned the wrong uid (of an
>>> earlier phi statement) which messed up the IR and caused the test
>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>> Ok for trunk?
>>>
>>> Thanks,
>>> Easwaran
>>>
>>>
>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>
>>>         PR middle-end/57370
>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>         node for a non-phi gimple statement.
>>>
>>> testsuite/ChangeLog:
>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>
>>>         PR middle-end/57370
>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>
>>>
>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>> ===================================================================
>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>> @@ -0,0 +1,74 @@
>>> +! { dg-do compile }
>>> +! { dg-options "-O2 -ffast-math" }
>>> +! PR middle-end/57370
>>> +
>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>> +                                       grad_deriv,npoints, sx)
>>> +    IMPLICIT REAL*8 (t)
>>> +    INTEGER, PARAMETER :: dp=8
>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>> +                                           e_ndrho_ndrho_rho
>>> +      DO ii=1,npoints
>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>> +            t1425 = t233 * t557
>>> +            t1429 = beta * t225
>>> +            t1622 = t327 * t1621
>>> +            t1626 = t327 * t1625
>>> +            t1632 = t327 * t1631
>>> +            t1685 = t105 * t1684
>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>> +          END IF
>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>> +                    t5462 + t5466 - t5468
>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>> +                    t5540
>>> +            t5565 = t112 * t1685
>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>> +                    t5574
>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>> +                    t5610
>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>> +            t6223 = t6189 - &
>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>> +                    t6222
>>> +            t6227 = - t8 * (t5305 + t6223)
>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>> +                     t6227 * sx
>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>> +                    t5451 - t5454 + &
>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>> +                    t5468
>>> +            t6363 = t5480 - t5489 + &
>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>> +                    t5540
>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>> +                    0.40e1_dp * t5565 + &
>>> +                    t5568 + t5572 + t5574
>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>> +                    t5610
>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>> +                     t6669 * sx
>>> +          END IF
>>> +      END DO
>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>> +
>>> Index: gcc/tree-ssa-reassoc.c
>>> ===================================================================
>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>          {
>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>          }
>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
       [not found]   ` <CAPK5YPYXHtxs=+LpJNeZuKU+hmx80zjG1qQgeetxLt6qtGBSJA@mail.gmail.com>
  2013-08-07 16:52     ` Easwaran Raman
@ 2013-08-27 10:48     ` Richard Biener
  2013-08-30  0:41       ` Easwaran Raman
  2013-09-05 19:23       ` Easwaran Raman
  1 sibling, 2 replies; 16+ messages in thread
From: Richard Biener @ 2013-08-27 10:48 UTC (permalink / raw)
  To: Easwaran Raman; +Cc: GCC Patches

On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
> I have a new patch that supersedes this. The new patch also fixes PR
> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
> no test regression on x86_64/linux. Ok for trunk?
>
> 2013-07-31  Easwaran Raman  <eraman@google.com>
>
>     PR middle-end/57370
>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>     of debug statements that cause inconsistent IR.

Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
at all.  The other hunks are ok, but we need to work harder to preserve
debug stmts - simply removing all is not going to fly.

Richard.

>
> testsuite/ChangeLog:
> 2013-07-31  Easwaran Raman  <eraman@google.com>
>
>     PR middle-end/57370
>     PR tree-optimization/57393
>     PR tree-optimization/58011
>     * gfortran.dg/reassoc_12.f90: New testcase.
>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>
>
> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>> Ping.
>>
>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>> A newly generated statement in build_and_add_sum  function of
>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>> statement. In one instance, it was assigned the wrong uid (of an
>>> earlier phi statement) which messed up the IR and caused the test
>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>> Ok for trunk?
>>>
>>> Thanks,
>>> Easwaran
>>>
>>>
>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>
>>>         PR middle-end/57370
>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>         node for a non-phi gimple statement.
>>>
>>> testsuite/ChangeLog:
>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>
>>>         PR middle-end/57370
>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>
>>>
>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>> ===================================================================
>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>> @@ -0,0 +1,74 @@
>>> +! { dg-do compile }
>>> +! { dg-options "-O2 -ffast-math" }
>>> +! PR middle-end/57370
>>> +
>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>> +                                       grad_deriv,npoints, sx)
>>> +    IMPLICIT REAL*8 (t)
>>> +    INTEGER, PARAMETER :: dp=8
>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>> +                                           e_ndrho_ndrho_rho
>>> +      DO ii=1,npoints
>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>> +            t1425 = t233 * t557
>>> +            t1429 = beta * t225
>>> +            t1622 = t327 * t1621
>>> +            t1626 = t327 * t1625
>>> +            t1632 = t327 * t1631
>>> +            t1685 = t105 * t1684
>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>> +          END IF
>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>> +                    t5462 + t5466 - t5468
>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>> +                    t5540
>>> +            t5565 = t112 * t1685
>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>> +                    t5574
>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>> +                    t5610
>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>> +            t6223 = t6189 - &
>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>> +                    t6222
>>> +            t6227 = - t8 * (t5305 + t6223)
>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>> +                     t6227 * sx
>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>> +                    t5451 - t5454 + &
>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>> +                    t5468
>>> +            t6363 = t5480 - t5489 + &
>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>> +                    t5540
>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>> +                    0.40e1_dp * t5565 + &
>>> +                    t5568 + t5572 + t5574
>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>> +                    t5610
>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>> +                     t6669 * sx
>>> +          END IF
>>> +      END DO
>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>> +
>>> Index: gcc/tree-ssa-reassoc.c
>>> ===================================================================
>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>          {
>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>          }
>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-08-27 10:48     ` Richard Biener
@ 2013-08-30  0:41       ` Easwaran Raman
  2013-08-30  8:30         ` Richard Biener
  2013-09-05 19:23       ` Easwaran Raman
  1 sibling, 1 reply; 16+ messages in thread
From: Easwaran Raman @ 2013-08-30  0:41 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Patches

Richard,
Do you want me to commit everything but the  insert_stmt_after hunk
now? There are more similar failures reported in
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57393 and I have attached
the updated patch there. Shall I send that for review? Apart from the
debug statement issue, almost all the bugs are due to dependence
violation because certain newly inserted statements do not have the
right UID. Instead of trying to catch all of them, will it be better
if I check if the stmt has a proper uid (non-zero if it is not the
first stmt) and assign a sensible value at the point where it is used
(find_insert_point and appears_later_in_bb) instead of where the stmt
is created? I think that would be less brittle.

- Easwaran



On Tue, Aug 27, 2013 at 3:35 AM, Richard Biener
<richard.guenther@gmail.com> wrote:
> On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
>> I have a new patch that supersedes this. The new patch also fixes PR
>> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
>> no test regression on x86_64/linux. Ok for trunk?
>>
>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>
>>     PR middle-end/57370
>>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>>     of debug statements that cause inconsistent IR.
>
> Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
> at all.  The other hunks are ok, but we need to work harder to preserve
> debug stmts - simply removing all is not going to fly.
>
> Richard.
>
>>
>> testsuite/ChangeLog:
>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>
>>     PR middle-end/57370
>>     PR tree-optimization/57393
>>     PR tree-optimization/58011
>>     * gfortran.dg/reassoc_12.f90: New testcase.
>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>
>>
>> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>>> Ping.
>>>
>>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>>> A newly generated statement in build_and_add_sum  function of
>>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>>> statement. In one instance, it was assigned the wrong uid (of an
>>>> earlier phi statement) which messed up the IR and caused the test
>>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>>> Ok for trunk?
>>>>
>>>> Thanks,
>>>> Easwaran
>>>>
>>>>
>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>
>>>>         PR middle-end/57370
>>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>>         node for a non-phi gimple statement.
>>>>
>>>> testsuite/ChangeLog:
>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>
>>>>         PR middle-end/57370
>>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>>
>>>>
>>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>>> ===================================================================
>>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>> @@ -0,0 +1,74 @@
>>>> +! { dg-do compile }
>>>> +! { dg-options "-O2 -ffast-math" }
>>>> +! PR middle-end/57370
>>>> +
>>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>>> +                                       grad_deriv,npoints, sx)
>>>> +    IMPLICIT REAL*8 (t)
>>>> +    INTEGER, PARAMETER :: dp=8
>>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>>> +                                           e_ndrho_ndrho_rho
>>>> +      DO ii=1,npoints
>>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>>> +            t1425 = t233 * t557
>>>> +            t1429 = beta * t225
>>>> +            t1622 = t327 * t1621
>>>> +            t1626 = t327 * t1625
>>>> +            t1632 = t327 * t1631
>>>> +            t1685 = t105 * t1684
>>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>>> +          END IF
>>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>>> +                    t5462 + t5466 - t5468
>>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>>> +                    t5540
>>>> +            t5565 = t112 * t1685
>>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>>> +                    t5574
>>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>> +                    t5610
>>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>>> +            t6223 = t6189 - &
>>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>>> +                    t6222
>>>> +            t6227 = - t8 * (t5305 + t6223)
>>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>>> +                     t6227 * sx
>>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>>> +                    t5451 - t5454 + &
>>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>>> +                    t5468
>>>> +            t6363 = t5480 - t5489 + &
>>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>>> +                    t5540
>>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>>> +                    0.40e1_dp * t5565 + &
>>>> +                    t5568 + t5572 + t5574
>>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>> +                    t5610
>>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>>> +                     t6669 * sx
>>>> +          END IF
>>>> +      END DO
>>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>>> +
>>>> Index: gcc/tree-ssa-reassoc.c
>>>> ===================================================================
>>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>>          {
>>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>>          }
>>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-08-30  0:41       ` Easwaran Raman
@ 2013-08-30  8:30         ` Richard Biener
  2013-08-30 16:14           ` Easwaran Raman
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Biener @ 2013-08-30  8:30 UTC (permalink / raw)
  To: Easwaran Raman; +Cc: GCC Patches

On Fri, Aug 30, 2013 at 2:30 AM, Easwaran Raman <eraman@google.com> wrote:
> Richard,
> Do you want me to commit everything but the  insert_stmt_after hunk
> now?

Yes.

> There are more similar failures reported in
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57393 and I have attached
> the updated patch there. Shall I send that for review? Apart from the
> debug statement issue, almost all the bugs are due to dependence
> violation because certain newly inserted statements do not have the
> right UID. Instead of trying to catch all of them, will it be better
> if I check if the stmt has a proper uid (non-zero if it is not the
> first stmt) and assign a sensible value at the point where it is used
> (find_insert_point and appears_later_in_bb) instead of where the stmt
> is created? I think that would be less brittle.

In the end all this placement stuff should be reverted and done as
post-processing after reassoc is finished.  You can remember the
inserted stmts that are candidates for moving (just set a pass-local
flag on them) and assign UIDs for the whole function after all stmts
are inserted.

Richard.


> - Easwaran
>
>
>
> On Tue, Aug 27, 2013 at 3:35 AM, Richard Biener
> <richard.guenther@gmail.com> wrote:
>> On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
>>> I have a new patch that supersedes this. The new patch also fixes PR
>>> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
>>> no test regression on x86_64/linux. Ok for trunk?
>>>
>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>
>>>     PR middle-end/57370
>>>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>>>     of debug statements that cause inconsistent IR.
>>
>> Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
>> at all.  The other hunks are ok, but we need to work harder to preserve
>> debug stmts - simply removing all is not going to fly.
>>
>> Richard.
>>
>>>
>>> testsuite/ChangeLog:
>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>
>>>     PR middle-end/57370
>>>     PR tree-optimization/57393
>>>     PR tree-optimization/58011
>>>     * gfortran.dg/reassoc_12.f90: New testcase.
>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>
>>>
>>> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>>>> Ping.
>>>>
>>>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>> A newly generated statement in build_and_add_sum  function of
>>>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>>>> statement. In one instance, it was assigned the wrong uid (of an
>>>>> earlier phi statement) which messed up the IR and caused the test
>>>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>>>> Ok for trunk?
>>>>>
>>>>> Thanks,
>>>>> Easwaran
>>>>>
>>>>>
>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>
>>>>>         PR middle-end/57370
>>>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>>>         node for a non-phi gimple statement.
>>>>>
>>>>> testsuite/ChangeLog:
>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>
>>>>>         PR middle-end/57370
>>>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>
>>>>>
>>>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>>>> ===================================================================
>>>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>> @@ -0,0 +1,74 @@
>>>>> +! { dg-do compile }
>>>>> +! { dg-options "-O2 -ffast-math" }
>>>>> +! PR middle-end/57370
>>>>> +
>>>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>>>> +                                       grad_deriv,npoints, sx)
>>>>> +    IMPLICIT REAL*8 (t)
>>>>> +    INTEGER, PARAMETER :: dp=8
>>>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>>>> +                                           e_ndrho_ndrho_rho
>>>>> +      DO ii=1,npoints
>>>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>>>> +            t1425 = t233 * t557
>>>>> +            t1429 = beta * t225
>>>>> +            t1622 = t327 * t1621
>>>>> +            t1626 = t327 * t1625
>>>>> +            t1632 = t327 * t1631
>>>>> +            t1685 = t105 * t1684
>>>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>>>> +          END IF
>>>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>>>> +                    t5462 + t5466 - t5468
>>>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>>>> +                    t5540
>>>>> +            t5565 = t112 * t1685
>>>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>>>> +                    t5574
>>>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>> +                    t5610
>>>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>>>> +            t6223 = t6189 - &
>>>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>>>> +                    t6222
>>>>> +            t6227 = - t8 * (t5305 + t6223)
>>>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>>>> +                     t6227 * sx
>>>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>>>> +                    t5451 - t5454 + &
>>>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>>>> +                    t5468
>>>>> +            t6363 = t5480 - t5489 + &
>>>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>>>> +                    t5540
>>>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>>>> +                    0.40e1_dp * t5565 + &
>>>>> +                    t5568 + t5572 + t5574
>>>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>> +                    t5610
>>>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>>>> +                     t6669 * sx
>>>>> +          END IF
>>>>> +      END DO
>>>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>>>> +
>>>>> Index: gcc/tree-ssa-reassoc.c
>>>>> ===================================================================
>>>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>>>          {
>>>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>>>          }
>>>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-08-30  8:30         ` Richard Biener
@ 2013-08-30 16:14           ` Easwaran Raman
  2013-08-30 16:27             ` Jakub Jelinek
  2013-09-02  9:31             ` Richard Biener
  0 siblings, 2 replies; 16+ messages in thread
From: Easwaran Raman @ 2013-08-30 16:14 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Patches

On Fri, Aug 30, 2013 at 1:25 AM, Richard Biener
<richard.guenther@gmail.com> wrote:
> On Fri, Aug 30, 2013 at 2:30 AM, Easwaran Raman <eraman@google.com> wrote:
>> Richard,
>> Do you want me to commit everything but the  insert_stmt_after hunk
>> now?
>
> Yes.
>
>> There are more similar failures reported in
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57393 and I have attached
>> the updated patch there. Shall I send that for review? Apart from the
>> debug statement issue, almost all the bugs are due to dependence
>> violation because certain newly inserted statements do not have the
>> right UID. Instead of trying to catch all of them, will it be better
>> if I check if the stmt has a proper uid (non-zero if it is not the
>> first stmt) and assign a sensible value at the point where it is used
>> (find_insert_point and appears_later_in_bb) instead of where the stmt
>> is created? I think that would be less brittle.
>
> In the end all this placement stuff should be reverted and done as
> post-processing after reassoc is finished.  You can remember the
> inserted stmts that are candidates for moving (just set a pass-local
> flag on them) and assign UIDs for the whole function after all stmts
> are inserted.

The problem is we need sane UID values as reassoc is happening - not
after it is finished. As it process each stmt in reassoc_bb, it might
generate new stmts which might have to be compared in
find_insert_point or appears_later_in_bb.

- Easwaran

> Richard.
>
>
>> - Easwaran
>>
>>
>>
>> On Tue, Aug 27, 2013 at 3:35 AM, Richard Biener
>> <richard.guenther@gmail.com> wrote:
>>> On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
>>>> I have a new patch that supersedes this. The new patch also fixes PR
>>>> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
>>>> no test regression on x86_64/linux. Ok for trunk?
>>>>
>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>
>>>>     PR middle-end/57370
>>>>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>>>>     of debug statements that cause inconsistent IR.
>>>
>>> Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
>>> at all.  The other hunks are ok, but we need to work harder to preserve
>>> debug stmts - simply removing all is not going to fly.
>>>
>>> Richard.
>>>
>>>>
>>>> testsuite/ChangeLog:
>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>
>>>>     PR middle-end/57370
>>>>     PR tree-optimization/57393
>>>>     PR tree-optimization/58011
>>>>     * gfortran.dg/reassoc_12.f90: New testcase.
>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>
>>>>
>>>> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>> Ping.
>>>>>
>>>>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>>> A newly generated statement in build_and_add_sum  function of
>>>>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>>>>> statement. In one instance, it was assigned the wrong uid (of an
>>>>>> earlier phi statement) which messed up the IR and caused the test
>>>>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>>>>> Ok for trunk?
>>>>>>
>>>>>> Thanks,
>>>>>> Easwaran
>>>>>>
>>>>>>
>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>
>>>>>>         PR middle-end/57370
>>>>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>>>>         node for a non-phi gimple statement.
>>>>>>
>>>>>> testsuite/ChangeLog:
>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>
>>>>>>         PR middle-end/57370
>>>>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>>
>>>>>>
>>>>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>>>>> ===================================================================
>>>>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>> @@ -0,0 +1,74 @@
>>>>>> +! { dg-do compile }
>>>>>> +! { dg-options "-O2 -ffast-math" }
>>>>>> +! PR middle-end/57370
>>>>>> +
>>>>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>>>>> +                                       grad_deriv,npoints, sx)
>>>>>> +    IMPLICIT REAL*8 (t)
>>>>>> +    INTEGER, PARAMETER :: dp=8
>>>>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>>>>> +                                           e_ndrho_ndrho_rho
>>>>>> +      DO ii=1,npoints
>>>>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>>>>> +            t1425 = t233 * t557
>>>>>> +            t1429 = beta * t225
>>>>>> +            t1622 = t327 * t1621
>>>>>> +            t1626 = t327 * t1625
>>>>>> +            t1632 = t327 * t1631
>>>>>> +            t1685 = t105 * t1684
>>>>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>>>>> +          END IF
>>>>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>>>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>>>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>>>>> +                    t5462 + t5466 - t5468
>>>>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>>>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>>>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>>>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>>>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>>>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>>>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>>>>> +                    t5540
>>>>>> +            t5565 = t112 * t1685
>>>>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>>>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>>>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>>>>> +                    t5574
>>>>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>> +                    t5610
>>>>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>>>>> +            t6223 = t6189 - &
>>>>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>>>>> +                    t6222
>>>>>> +            t6227 = - t8 * (t5305 + t6223)
>>>>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>>>>> +                     t6227 * sx
>>>>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>>>>> +                    t5451 - t5454 + &
>>>>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>>>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>>>>> +                    t5468
>>>>>> +            t6363 = t5480 - t5489 + &
>>>>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>>>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>>>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>>>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>>>>> +                    t5540
>>>>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>>>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>>>>> +                    0.40e1_dp * t5565 + &
>>>>>> +                    t5568 + t5572 + t5574
>>>>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>> +                    t5610
>>>>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>>>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>>>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>>>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>>>>> +                     t6669 * sx
>>>>>> +          END IF
>>>>>> +      END DO
>>>>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>>>>> +
>>>>>> Index: gcc/tree-ssa-reassoc.c
>>>>>> ===================================================================
>>>>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>>>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>>>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>>>>          {
>>>>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>>>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>>>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>>>>          }
>>>>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-08-30 16:14           ` Easwaran Raman
@ 2013-08-30 16:27             ` Jakub Jelinek
  2013-08-30 17:02               ` Easwaran Raman
  2013-09-02  9:31             ` Richard Biener
  1 sibling, 1 reply; 16+ messages in thread
From: Jakub Jelinek @ 2013-08-30 16:27 UTC (permalink / raw)
  To: Easwaran Raman; +Cc: Richard Biener, GCC Patches

On Fri, Aug 30, 2013 at 09:13:34AM -0700, Easwaran Raman wrote:
> >> There are more similar failures reported in
> >> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57393 and I have attached
> >> the updated patch there. Shall I send that for review? Apart from the
> >> debug statement issue, almost all the bugs are due to dependence
> >> violation because certain newly inserted statements do not have the
> >> right UID. Instead of trying to catch all of them, will it be better
> >> if I check if the stmt has a proper uid (non-zero if it is not the
> >> first stmt) and assign a sensible value at the point where it is used
> >> (find_insert_point and appears_later_in_bb) instead of where the stmt
> >> is created? I think that would be less brittle.
> >
> > In the end all this placement stuff should be reverted and done as
> > post-processing after reassoc is finished.  You can remember the
> > inserted stmts that are candidates for moving (just set a pass-local
> > flag on them) and assign UIDs for the whole function after all stmts
> > are inserted.
> 
> The problem is we need sane UID values as reassoc is happening - not
> after it is finished. As it process each stmt in reassoc_bb, it might
> generate new stmts which might have to be compared in
> find_insert_point or appears_later_in_bb.

A new stmt will be created with UID 0 and in case there is stmt movement,
you could zero the UID during movement.  Then, you can just special case
UID zero when you are looking at UIDs.  As on trunk/4.8 gsi_for_stmt is
O(1), you can easily walk a couple of previous and/or later stmts and look
for the first non-zero UID around it, and treat it as if the UID was
previous non-zero UID + 0.5 or next non-zero UID - 0.5.  And, if you see
too many consecutive statements with UID 0 (more than some constant, 32?),
just reassign UIDs to the whole bb.  Or you could initially assign UIDs
with some gaps, then keep filling those gaps and once you fill them,
renumber again with new gaps.

	Jakub

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-08-30 16:27             ` Jakub Jelinek
@ 2013-08-30 17:02               ` Easwaran Raman
  2013-08-30 17:18                 ` Jakub Jelinek
  0 siblings, 1 reply; 16+ messages in thread
From: Easwaran Raman @ 2013-08-30 17:02 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Richard Biener, GCC Patches

On Fri, Aug 30, 2013 at 9:26 AM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Fri, Aug 30, 2013 at 09:13:34AM -0700, Easwaran Raman wrote:
>> >> There are more similar failures reported in
>> >> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57393 and I have attached
>> >> the updated patch there. Shall I send that for review? Apart from the
>> >> debug statement issue, almost all the bugs are due to dependence
>> >> violation because certain newly inserted statements do not have the
>> >> right UID. Instead of trying to catch all of them, will it be better
>> >> if I check if the stmt has a proper uid (non-zero if it is not the
>> >> first stmt) and assign a sensible value at the point where it is used
>> >> (find_insert_point and appears_later_in_bb) instead of where the stmt
>> >> is created? I think that would be less brittle.
>> >
>> > In the end all this placement stuff should be reverted and done as
>> > post-processing after reassoc is finished.  You can remember the
>> > inserted stmts that are candidates for moving (just set a pass-local
>> > flag on them) and assign UIDs for the whole function after all stmts
>> > are inserted.
>>
>> The problem is we need sane UID values as reassoc is happening - not
>> after it is finished. As it process each stmt in reassoc_bb, it might
>> generate new stmts which might have to be compared in
>> find_insert_point or appears_later_in_bb.
>
> A new stmt will be created with UID 0 and in case there is stmt movement,
> you could zero the UID during movement.  Then, you can just special case
> UID zero when you are looking at UIDs.  As on trunk/4.8 gsi_for_stmt is
> O(1), you can easily walk a couple of previous and/or later stmts and look
> for the first non-zero UID around it, and treat it as if the UID was
> previous non-zero UID + 0.5 or next non-zero UID - 0.5.  And, if you see
> too many consecutive statements with UID 0 (more than some constant, 32?),
> just reassign UIDs to the whole bb.  Or you could initially assign UIDs
> with some gaps, then keep filling those gaps and once you fill them,
> renumber again with new gaps.
>         Jakub

Yes, this is pretty much what I was proposing. The current
implementation doesn't rely on UIDs being unique - they only have to
be monotonically non-decreasing. So, when a UID of 0 is encountered,
go up till a non-zero UID is found and then go down and assign this
non-zero UID. This effectively implies that each UID-0 stmt is visited
at most twice. I don't think we need to check if I see more than
certain number of UID-0 stmts and redo the entire BB.

- Easwaran

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-08-30 17:02               ` Easwaran Raman
@ 2013-08-30 17:18                 ` Jakub Jelinek
  0 siblings, 0 replies; 16+ messages in thread
From: Jakub Jelinek @ 2013-08-30 17:18 UTC (permalink / raw)
  To: Easwaran Raman; +Cc: Richard Biener, GCC Patches

On Fri, Aug 30, 2013 at 09:49:59AM -0700, Easwaran Raman wrote:
> Yes, this is pretty much what I was proposing. The current
> implementation doesn't rely on UIDs being unique - they only have to
> be monotonically non-decreasing. So, when a UID of 0 is encountered,
> go up till a non-zero UID is found and then go down and assign this
> non-zero UID. This effectively implies that each UID-0 stmt is visited
> at most twice. I don't think we need to check if I see more than
> certain number of UID-0 stmts and redo the entire BB.

Sure, renumbering the entire BB would be only for compile time reasons;
if you end up with a huge bb where 90% of stmts will have the same UID,
it is as if you weren't using UIDs at all and always walked the entire BB
to find out what stmt precedes what.  You could spend a lot of time in
appears_later_in_bb.

Looking at the code, couple of nits:
  return ((bb_a == bb_b && gimple_uid (a)  < gimple_uid (b))
extra space before <.

  gsi_next (&gsi);
  if (gsi_end_p (gsi))
    return stmt1;
  for (; !gsi_end_p (gsi); gsi_next (&gsi))
    {
...
    }
  return stmt1;

Why not just for (gsi_next (&gsi); !gsi_end_p (gsi); gsi_next (&gsi)) ?
The extra if (gsi_end_p (gsi)) return stmt1; doesn't make any sense
when the loop does exactly that too.

And for the debug stmts, are you sure you are resetting only those debug
stmts which you have to reset?  I mean, if there are say debug stmts using
the SSA_NAME in other bb, it doesn't need to be reset (unless you reuse
the same SSA_NAME for something else), and the compiler even has code
to reconstruct SSA_NAMEs that have been removed, but were still referenced
in debug stmts, using expressions in debug stmts and debug temporaries.

	Jakub

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-08-30 16:14           ` Easwaran Raman
  2013-08-30 16:27             ` Jakub Jelinek
@ 2013-09-02  9:31             ` Richard Biener
  2013-09-04 17:50               ` Easwaran Raman
  1 sibling, 1 reply; 16+ messages in thread
From: Richard Biener @ 2013-09-02  9:31 UTC (permalink / raw)
  To: Easwaran Raman; +Cc: GCC Patches

On Fri, Aug 30, 2013 at 6:13 PM, Easwaran Raman <eraman@google.com> wrote:
> On Fri, Aug 30, 2013 at 1:25 AM, Richard Biener
> <richard.guenther@gmail.com> wrote:
>> On Fri, Aug 30, 2013 at 2:30 AM, Easwaran Raman <eraman@google.com> wrote:
>>> Richard,
>>> Do you want me to commit everything but the  insert_stmt_after hunk
>>> now?
>>
>> Yes.
>>
>>> There are more similar failures reported in
>>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57393 and I have attached
>>> the updated patch there. Shall I send that for review? Apart from the
>>> debug statement issue, almost all the bugs are due to dependence
>>> violation because certain newly inserted statements do not have the
>>> right UID. Instead of trying to catch all of them, will it be better
>>> if I check if the stmt has a proper uid (non-zero if it is not the
>>> first stmt) and assign a sensible value at the point where it is used
>>> (find_insert_point and appears_later_in_bb) instead of where the stmt
>>> is created? I think that would be less brittle.
>>
>> In the end all this placement stuff should be reverted and done as
>> post-processing after reassoc is finished.  You can remember the
>> inserted stmts that are candidates for moving (just set a pass-local
>> flag on them) and assign UIDs for the whole function after all stmts
>> are inserted.
>
> The problem is we need sane UID values as reassoc is happening - not
> after it is finished. As it process each stmt in reassoc_bb, it might
> generate new stmts which might have to be compared in
> find_insert_point or appears_later_in_bb.

But if you no longer find_insert_point during reassoc but instead do
a "scheduling" pass after it finished you won't need sane UIDs during
reassoc.

Richard.

> - Easwaran
>
>> Richard.
>>
>>
>>> - Easwaran
>>>
>>>
>>>
>>> On Tue, Aug 27, 2013 at 3:35 AM, Richard Biener
>>> <richard.guenther@gmail.com> wrote:
>>>> On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>> I have a new patch that supersedes this. The new patch also fixes PR
>>>>> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
>>>>> no test regression on x86_64/linux. Ok for trunk?
>>>>>
>>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>>
>>>>>     PR middle-end/57370
>>>>>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>>>>>     of debug statements that cause inconsistent IR.
>>>>
>>>> Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
>>>> at all.  The other hunks are ok, but we need to work harder to preserve
>>>> debug stmts - simply removing all is not going to fly.
>>>>
>>>> Richard.
>>>>
>>>>>
>>>>> testsuite/ChangeLog:
>>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>>
>>>>>     PR middle-end/57370
>>>>>     PR tree-optimization/57393
>>>>>     PR tree-optimization/58011
>>>>>     * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>>
>>>>>
>>>>> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>>> Ping.
>>>>>>
>>>>>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>>>> A newly generated statement in build_and_add_sum  function of
>>>>>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>>>>>> statement. In one instance, it was assigned the wrong uid (of an
>>>>>>> earlier phi statement) which messed up the IR and caused the test
>>>>>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>>>>>> Ok for trunk?
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Easwaran
>>>>>>>
>>>>>>>
>>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>>
>>>>>>>         PR middle-end/57370
>>>>>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>>>>>         node for a non-phi gimple statement.
>>>>>>>
>>>>>>> testsuite/ChangeLog:
>>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>>
>>>>>>>         PR middle-end/57370
>>>>>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>>>
>>>>>>>
>>>>>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>>>>>> ===================================================================
>>>>>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>>> @@ -0,0 +1,74 @@
>>>>>>> +! { dg-do compile }
>>>>>>> +! { dg-options "-O2 -ffast-math" }
>>>>>>> +! PR middle-end/57370
>>>>>>> +
>>>>>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>>>>>> +                                       grad_deriv,npoints, sx)
>>>>>>> +    IMPLICIT REAL*8 (t)
>>>>>>> +    INTEGER, PARAMETER :: dp=8
>>>>>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>>>>>> +                                           e_ndrho_ndrho_rho
>>>>>>> +      DO ii=1,npoints
>>>>>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>>>>>> +            t1425 = t233 * t557
>>>>>>> +            t1429 = beta * t225
>>>>>>> +            t1622 = t327 * t1621
>>>>>>> +            t1626 = t327 * t1625
>>>>>>> +            t1632 = t327 * t1631
>>>>>>> +            t1685 = t105 * t1684
>>>>>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>>>>>> +          END IF
>>>>>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>>>>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>>>>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>>>>>> +                    t5462 + t5466 - t5468
>>>>>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>>>>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>>>>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>>>>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>>>>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>>>>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>>>>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>>>>>> +                    t5540
>>>>>>> +            t5565 = t112 * t1685
>>>>>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>>>>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>>>>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>>>>>> +                    t5574
>>>>>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>>> +                    t5610
>>>>>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>>>>>> +            t6223 = t6189 - &
>>>>>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>>>>>> +                    t6222
>>>>>>> +            t6227 = - t8 * (t5305 + t6223)
>>>>>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>>>>>> +                     t6227 * sx
>>>>>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>>>>>> +                    t5451 - t5454 + &
>>>>>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>>>>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>>>>>> +                    t5468
>>>>>>> +            t6363 = t5480 - t5489 + &
>>>>>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>>>>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>>>>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>>>>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>>>>>> +                    t5540
>>>>>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>>>>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>>>>>> +                    0.40e1_dp * t5565 + &
>>>>>>> +                    t5568 + t5572 + t5574
>>>>>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>>> +                    t5610
>>>>>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>>>>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>>>>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>>>>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>>>>>> +                     t6669 * sx
>>>>>>> +          END IF
>>>>>>> +      END DO
>>>>>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>>>>>> +
>>>>>>> Index: gcc/tree-ssa-reassoc.c
>>>>>>> ===================================================================
>>>>>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>>>>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>>>>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>>>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>>>>>          {
>>>>>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>>>>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>>>>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>>>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>>>>>          }
>>>>>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-09-02  9:31             ` Richard Biener
@ 2013-09-04 17:50               ` Easwaran Raman
  0 siblings, 0 replies; 16+ messages in thread
From: Easwaran Raman @ 2013-09-04 17:50 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Patches

Submitted the patch (r202262) without the insert_stmt_after hunk. Also
fixed nits pointed out by Jakub.

- Easwaran

On Mon, Sep 2, 2013 at 2:31 AM, Richard Biener
<richard.guenther@gmail.com> wrote:
> On Fri, Aug 30, 2013 at 6:13 PM, Easwaran Raman <eraman@google.com> wrote:
>> On Fri, Aug 30, 2013 at 1:25 AM, Richard Biener
>> <richard.guenther@gmail.com> wrote:
>>> On Fri, Aug 30, 2013 at 2:30 AM, Easwaran Raman <eraman@google.com> wrote:
>>>> Richard,
>>>> Do you want me to commit everything but the  insert_stmt_after hunk
>>>> now?
>>>
>>> Yes.
>>>
>>>> There are more similar failures reported in
>>>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57393 and I have attached
>>>> the updated patch there. Shall I send that for review? Apart from the
>>>> debug statement issue, almost all the bugs are due to dependence
>>>> violation because certain newly inserted statements do not have the
>>>> right UID. Instead of trying to catch all of them, will it be better
>>>> if I check if the stmt has a proper uid (non-zero if it is not the
>>>> first stmt) and assign a sensible value at the point where it is used
>>>> (find_insert_point and appears_later_in_bb) instead of where the stmt
>>>> is created? I think that would be less brittle.
>>>
>>> In the end all this placement stuff should be reverted and done as
>>> post-processing after reassoc is finished.  You can remember the
>>> inserted stmts that are candidates for moving (just set a pass-local
>>> flag on them) and assign UIDs for the whole function after all stmts
>>> are inserted.
>>
>> The problem is we need sane UID values as reassoc is happening - not
>> after it is finished. As it process each stmt in reassoc_bb, it might
>> generate new stmts which might have to be compared in
>> find_insert_point or appears_later_in_bb.
>
> But if you no longer find_insert_point during reassoc but instead do
> a "scheduling" pass after it finished you won't need sane UIDs during
> reassoc.
>
> Richard.
>
>> - Easwaran
>>
>>> Richard.
>>>
>>>
>>>> - Easwaran
>>>>
>>>>
>>>>
>>>> On Tue, Aug 27, 2013 at 3:35 AM, Richard Biener
>>>> <richard.guenther@gmail.com> wrote:
>>>>> On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>>> I have a new patch that supersedes this. The new patch also fixes PR
>>>>>> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
>>>>>> no test regression on x86_64/linux. Ok for trunk?
>>>>>>
>>>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>>>
>>>>>>     PR middle-end/57370
>>>>>>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>>>>>>     of debug statements that cause inconsistent IR.
>>>>>
>>>>> Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
>>>>> at all.  The other hunks are ok, but we need to work harder to preserve
>>>>> debug stmts - simply removing all is not going to fly.
>>>>>
>>>>> Richard.
>>>>>
>>>>>>
>>>>>> testsuite/ChangeLog:
>>>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>>>
>>>>>>     PR middle-end/57370
>>>>>>     PR tree-optimization/57393
>>>>>>     PR tree-optimization/58011
>>>>>>     * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>>>
>>>>>>
>>>>>> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>>>> Ping.
>>>>>>>
>>>>>>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>>>>> A newly generated statement in build_and_add_sum  function of
>>>>>>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>>>>>>> statement. In one instance, it was assigned the wrong uid (of an
>>>>>>>> earlier phi statement) which messed up the IR and caused the test
>>>>>>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>>>>>>> Ok for trunk?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Easwaran
>>>>>>>>
>>>>>>>>
>>>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>>>
>>>>>>>>         PR middle-end/57370
>>>>>>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>>>>>>         node for a non-phi gimple statement.
>>>>>>>>
>>>>>>>> testsuite/ChangeLog:
>>>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>>>
>>>>>>>>         PR middle-end/57370
>>>>>>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>>>>
>>>>>>>>
>>>>>>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>>>>>>> ===================================================================
>>>>>>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>>>> @@ -0,0 +1,74 @@
>>>>>>>> +! { dg-do compile }
>>>>>>>> +! { dg-options "-O2 -ffast-math" }
>>>>>>>> +! PR middle-end/57370
>>>>>>>> +
>>>>>>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>>>>>>> +                                       grad_deriv,npoints, sx)
>>>>>>>> +    IMPLICIT REAL*8 (t)
>>>>>>>> +    INTEGER, PARAMETER :: dp=8
>>>>>>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>>>>>>> +                                           e_ndrho_ndrho_rho
>>>>>>>> +      DO ii=1,npoints
>>>>>>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>>>>>>> +            t1425 = t233 * t557
>>>>>>>> +            t1429 = beta * t225
>>>>>>>> +            t1622 = t327 * t1621
>>>>>>>> +            t1626 = t327 * t1625
>>>>>>>> +            t1632 = t327 * t1631
>>>>>>>> +            t1685 = t105 * t1684
>>>>>>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>>>>>>> +          END IF
>>>>>>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>>>>>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>>>>>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>>>>>>> +                    t5462 + t5466 - t5468
>>>>>>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>>>>>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>>>>>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>>>>>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>>>>>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>>>>>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>>>>>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>>>>>>> +                    t5540
>>>>>>>> +            t5565 = t112 * t1685
>>>>>>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>>>>>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>>>>>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>>>>>>> +                    t5574
>>>>>>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>>>> +                    t5610
>>>>>>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>>>>>>> +            t6223 = t6189 - &
>>>>>>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>>>>>>> +                    t6222
>>>>>>>> +            t6227 = - t8 * (t5305 + t6223)
>>>>>>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>>>>>>> +                     t6227 * sx
>>>>>>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>>>>>>> +                    t5451 - t5454 + &
>>>>>>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>>>>>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>>>>>>> +                    t5468
>>>>>>>> +            t6363 = t5480 - t5489 + &
>>>>>>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>>>>>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>>>>>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>>>>>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>>>>>>> +                    t5540
>>>>>>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>>>>>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>>>>>>> +                    0.40e1_dp * t5565 + &
>>>>>>>> +                    t5568 + t5572 + t5574
>>>>>>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>>>> +                    t5610
>>>>>>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>>>>>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>>>>>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>>>>>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>>>>>>> +                     t6669 * sx
>>>>>>>> +          END IF
>>>>>>>> +      END DO
>>>>>>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>>>>>>> +
>>>>>>>> Index: gcc/tree-ssa-reassoc.c
>>>>>>>> ===================================================================
>>>>>>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>>>>>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>>>>>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>>>>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>>>>>>          {
>>>>>>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>>>>>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>>>>>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>>>>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>>>>>>          }
>>>>>>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-08-27 10:48     ` Richard Biener
  2013-08-30  0:41       ` Easwaran Raman
@ 2013-09-05 19:23       ` Easwaran Raman
  2013-09-06  7:05         ` Richard Biener
  1 sibling, 1 reply; 16+ messages in thread
From: Easwaran Raman @ 2013-09-05 19:23 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Patches

On Tue, Aug 27, 2013 at 3:35 AM, Richard Biener
<richard.guenther@gmail.com> wrote:
> On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
>> I have a new patch that supersedes this. The new patch also fixes PR
>> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
>> no test regression on x86_64/linux. Ok for trunk?
>>
>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>
>>     PR middle-end/57370
>>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>>     of debug statements that cause inconsistent IR.
>
> Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
> at all.  The other hunks are ok, but we need to work harder to preserve
> debug stmts - simply removing all is not going to fly.
>
> Richard.

I looked into the problem related to the debug stmts in this failing
test case in detail. Initially, the code sequence looks


s$n_13 = MEM[(struct S *)&s];
# DEBUG s$n => s$n_13
_2 = (double) s$n_13;
_4 = _2 * a_3(D);
_6 = (double) i_5(D);
_7 = _4 * _6;
_9 = (double) j_8(D);
_10 = _7 * _9;
bar (_10);
# DEBUG D#2 => (double) k_12(D)
# DEBUG D#1 => _7 * D#2
# DEBUG t$n => (int) D#1

After reassociation

s$n_13 = MEM[(struct S *)&s];
# DEBUG s$n => s$n_13
_2 = (double) s$n_13;
_6 = (double) i_5(D);
# DEBUG D#3 => _4 * _6
_9 = (double) j_8(D);
_4 = _9 * _2;
_7 = _4 * a_3(D);
_10 = _7 * _6;
bar (_10);
# DEBUG D#2 => (double) k_12(D)
# DEBUG D#1 => D#3 * D#2
# DEBUG t$n => (int) D#1

In the above, # DEBUG D#3 => _4 * _6  appears above the statement that
defines _4. But even if I move the def of D#3 below the statement
defining _4, it is not sufficient. Before reassociation, t$n refers to
the expression (s$n_13 * a_3(D) * i_5(D) * k_12(D)), but after
reassociation it would refer to ( j_8(D) * s$n_13 *  i_5(D) *
k_12(D)). It seems the correct fix is to discard the debug temps whose
RHS contains a variable that is involved in reassociation and then
reconstruct it. Is that the expected fix here?

- Easwaran

>>
>> testsuite/ChangeLog:
>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>
>>     PR middle-end/57370
>>     PR tree-optimization/57393
>>     PR tree-optimization/58011
>>     * gfortran.dg/reassoc_12.f90: New testcase.
>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>
>>
>> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>>> Ping.
>>>
>>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>>> A newly generated statement in build_and_add_sum  function of
>>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>>> statement. In one instance, it was assigned the wrong uid (of an
>>>> earlier phi statement) which messed up the IR and caused the test
>>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>>> Ok for trunk?
>>>>
>>>> Thanks,
>>>> Easwaran
>>>>
>>>>
>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>
>>>>         PR middle-end/57370
>>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>>         node for a non-phi gimple statement.
>>>>
>>>> testsuite/ChangeLog:
>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>
>>>>         PR middle-end/57370
>>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>>
>>>>
>>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>>> ===================================================================
>>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>> @@ -0,0 +1,74 @@
>>>> +! { dg-do compile }
>>>> +! { dg-options "-O2 -ffast-math" }
>>>> +! PR middle-end/57370
>>>> +
>>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>>> +                                       grad_deriv,npoints, sx)
>>>> +    IMPLICIT REAL*8 (t)
>>>> +    INTEGER, PARAMETER :: dp=8
>>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>>> +                                           e_ndrho_ndrho_rho
>>>> +      DO ii=1,npoints
>>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>>> +            t1425 = t233 * t557
>>>> +            t1429 = beta * t225
>>>> +            t1622 = t327 * t1621
>>>> +            t1626 = t327 * t1625
>>>> +            t1632 = t327 * t1631
>>>> +            t1685 = t105 * t1684
>>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>>> +          END IF
>>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>>> +                    t5462 + t5466 - t5468
>>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>>> +                    t5540
>>>> +            t5565 = t112 * t1685
>>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>>> +                    t5574
>>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>> +                    t5610
>>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>>> +            t6223 = t6189 - &
>>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>>> +                    t6222
>>>> +            t6227 = - t8 * (t5305 + t6223)
>>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>>> +                     t6227 * sx
>>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>>> +                    t5451 - t5454 + &
>>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>>> +                    t5468
>>>> +            t6363 = t5480 - t5489 + &
>>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>>> +                    t5540
>>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>>> +                    0.40e1_dp * t5565 + &
>>>> +                    t5568 + t5572 + t5574
>>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>> +                    t5610
>>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>>> +                     t6669 * sx
>>>> +          END IF
>>>> +      END DO
>>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>>> +
>>>> Index: gcc/tree-ssa-reassoc.c
>>>> ===================================================================
>>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>>          {
>>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>>          }
>>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-09-05 19:23       ` Easwaran Raman
@ 2013-09-06  7:05         ` Richard Biener
  2013-09-06 18:47           ` Easwaran Raman
  0 siblings, 1 reply; 16+ messages in thread
From: Richard Biener @ 2013-09-06  7:05 UTC (permalink / raw)
  To: Easwaran Raman; +Cc: GCC Patches

On Thu, Sep 5, 2013 at 9:23 PM, Easwaran Raman <eraman@google.com> wrote:
> On Tue, Aug 27, 2013 at 3:35 AM, Richard Biener
> <richard.guenther@gmail.com> wrote:
>> On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
>>> I have a new patch that supersedes this. The new patch also fixes PR
>>> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
>>> no test regression on x86_64/linux. Ok for trunk?
>>>
>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>
>>>     PR middle-end/57370
>>>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>>>     of debug statements that cause inconsistent IR.
>>
>> Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
>> at all.  The other hunks are ok, but we need to work harder to preserve
>> debug stmts - simply removing all is not going to fly.
>>
>> Richard.
>
> I looked into the problem related to the debug stmts in this failing
> test case in detail. Initially, the code sequence looks
>
>
> s$n_13 = MEM[(struct S *)&s];
> # DEBUG s$n => s$n_13
> _2 = (double) s$n_13;
> _4 = _2 * a_3(D);
> _6 = (double) i_5(D);
> _7 = _4 * _6;
> _9 = (double) j_8(D);
> _10 = _7 * _9;
> bar (_10);
> # DEBUG D#2 => (double) k_12(D)
> # DEBUG D#1 => _7 * D#2
> # DEBUG t$n => (int) D#1
>
> After reassociation
>
> s$n_13 = MEM[(struct S *)&s];
> # DEBUG s$n => s$n_13
> _2 = (double) s$n_13;
> _6 = (double) i_5(D);
> # DEBUG D#3 => _4 * _6
> _9 = (double) j_8(D);
> _4 = _9 * _2;
> _7 = _4 * a_3(D);
> _10 = _7 * _6;
> bar (_10);
> # DEBUG D#2 => (double) k_12(D)
> # DEBUG D#1 => D#3 * D#2
> # DEBUG t$n => (int) D#1
>
> In the above, # DEBUG D#3 => _4 * _6  appears above the statement that
> defines _4. But even if I move the def of D#3 below the statement
> defining _4, it is not sufficient. Before reassociation, t$n refers to
> the expression (s$n_13 * a_3(D) * i_5(D) * k_12(D)), but after
> reassociation it would refer to ( j_8(D) * s$n_13 *  i_5(D) *
> k_12(D)). It seems the correct fix is to discard the debug temps whose
> RHS contains a variable that is involved in reassociation and then
> reconstruct it. Is that the expected fix here?

The value of the DEBUG expression changes because the value
that _4 computes changes - that is a no-no that may not happen.
We cannot re-use _4 (without previously releasing it and allocating
it newly) with a new value.  releasing _4 should have fixed up the
debug stmts.

So - can you verify whether we are indeed just replacing the
RHS of _4 = _2 * a_3(D) to _9 * _2 without changing the SSA name of
that expression?

Another reason why re-using the same LHS for another value is
wrong is that annotated information like points-to sets, alignment
and soon value-range information will be wrong.

Thanks,
Richard.

> - Easwaran
>
>>>
>>> testsuite/ChangeLog:
>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>
>>>     PR middle-end/57370
>>>     PR tree-optimization/57393
>>>     PR tree-optimization/58011
>>>     * gfortran.dg/reassoc_12.f90: New testcase.
>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>
>>>
>>> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>>>> Ping.
>>>>
>>>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>> A newly generated statement in build_and_add_sum  function of
>>>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>>>> statement. In one instance, it was assigned the wrong uid (of an
>>>>> earlier phi statement) which messed up the IR and caused the test
>>>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>>>> Ok for trunk?
>>>>>
>>>>> Thanks,
>>>>> Easwaran
>>>>>
>>>>>
>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>
>>>>>         PR middle-end/57370
>>>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>>>         node for a non-phi gimple statement.
>>>>>
>>>>> testsuite/ChangeLog:
>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>
>>>>>         PR middle-end/57370
>>>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>
>>>>>
>>>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>>>> ===================================================================
>>>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>> @@ -0,0 +1,74 @@
>>>>> +! { dg-do compile }
>>>>> +! { dg-options "-O2 -ffast-math" }
>>>>> +! PR middle-end/57370
>>>>> +
>>>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>>>> +                                       grad_deriv,npoints, sx)
>>>>> +    IMPLICIT REAL*8 (t)
>>>>> +    INTEGER, PARAMETER :: dp=8
>>>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>>>> +                                           e_ndrho_ndrho_rho
>>>>> +      DO ii=1,npoints
>>>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>>>> +            t1425 = t233 * t557
>>>>> +            t1429 = beta * t225
>>>>> +            t1622 = t327 * t1621
>>>>> +            t1626 = t327 * t1625
>>>>> +            t1632 = t327 * t1631
>>>>> +            t1685 = t105 * t1684
>>>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>>>> +          END IF
>>>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>>>> +                    t5462 + t5466 - t5468
>>>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>>>> +                    t5540
>>>>> +            t5565 = t112 * t1685
>>>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>>>> +                    t5574
>>>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>> +                    t5610
>>>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>>>> +            t6223 = t6189 - &
>>>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>>>> +                    t6222
>>>>> +            t6227 = - t8 * (t5305 + t6223)
>>>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>>>> +                     t6227 * sx
>>>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>>>> +                    t5451 - t5454 + &
>>>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>>>> +                    t5468
>>>>> +            t6363 = t5480 - t5489 + &
>>>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>>>> +                    t5540
>>>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>>>> +                    0.40e1_dp * t5565 + &
>>>>> +                    t5568 + t5572 + t5574
>>>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>> +                    t5610
>>>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>>>> +                     t6669 * sx
>>>>> +          END IF
>>>>> +      END DO
>>>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>>>> +
>>>>> Index: gcc/tree-ssa-reassoc.c
>>>>> ===================================================================
>>>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>>>          {
>>>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>>>          }
>>>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-09-06  7:05         ` Richard Biener
@ 2013-09-06 18:47           ` Easwaran Raman
  2013-09-09  8:58             ` Richard Biener
  0 siblings, 1 reply; 16+ messages in thread
From: Easwaran Raman @ 2013-09-06 18:47 UTC (permalink / raw)
  To: Richard Biener; +Cc: GCC Patches

On Fri, Sep 6, 2013 at 12:05 AM, Richard Biener
<richard.guenther@gmail.com> wrote:
> On Thu, Sep 5, 2013 at 9:23 PM, Easwaran Raman <eraman@google.com> wrote:
>> On Tue, Aug 27, 2013 at 3:35 AM, Richard Biener
>> <richard.guenther@gmail.com> wrote:
>>> On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
>>>> I have a new patch that supersedes this. The new patch also fixes PR
>>>> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
>>>> no test regression on x86_64/linux. Ok for trunk?
>>>>
>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>
>>>>     PR middle-end/57370
>>>>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>>>>     of debug statements that cause inconsistent IR.
>>>
>>> Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
>>> at all.  The other hunks are ok, but we need to work harder to preserve
>>> debug stmts - simply removing all is not going to fly.
>>>
>>> Richard.
>>
>> I looked into the problem related to the debug stmts in this failing
>> test case in detail. Initially, the code sequence looks
>>
>>
>> s$n_13 = MEM[(struct S *)&s];
>> # DEBUG s$n => s$n_13
>> _2 = (double) s$n_13;
>> _4 = _2 * a_3(D);
>> _6 = (double) i_5(D);
>> _7 = _4 * _6;
>> _9 = (double) j_8(D);
>> _10 = _7 * _9;
>> bar (_10);
>> # DEBUG D#2 => (double) k_12(D)
>> # DEBUG D#1 => _7 * D#2
>> # DEBUG t$n => (int) D#1
>>
>> After reassociation
>>
>> s$n_13 = MEM[(struct S *)&s];
>> # DEBUG s$n => s$n_13
>> _2 = (double) s$n_13;
>> _6 = (double) i_5(D);
>> # DEBUG D#3 => _4 * _6
>> _9 = (double) j_8(D);
>> _4 = _9 * _2;
>> _7 = _4 * a_3(D);
>> _10 = _7 * _6;
>> bar (_10);
>> # DEBUG D#2 => (double) k_12(D)
>> # DEBUG D#1 => D#3 * D#2
>> # DEBUG t$n => (int) D#1
>>
>> In the above, # DEBUG D#3 => _4 * _6  appears above the statement that
>> defines _4. But even if I move the def of D#3 below the statement
>> defining _4, it is not sufficient. Before reassociation, t$n refers to
>> the expression (s$n_13 * a_3(D) * i_5(D) * k_12(D)), but after
>> reassociation it would refer to ( j_8(D) * s$n_13 *  i_5(D) *
>> k_12(D)). It seems the correct fix is to discard the debug temps whose
>> RHS contains a variable that is involved in reassociation and then
>> reconstruct it. Is that the expected fix here?
>
> The value of the DEBUG expression changes because the value
> that _4 computes changes - that is a no-no that may not happen.
> We cannot re-use _4 (without previously releasing it and allocating
> it newly) with a new value.  releasing _4 should have fixed up the
> debug stmts.
>
> So - can you verify whether we are indeed just replacing the
> RHS of _4 = _2 * a_3(D) to _9 * _2 without changing the SSA name of
> that expression?

I have confirmed that the SSA name of the LHS remains the same. The
reassociation code simply calls gimple_assign_set_rhs2 to modify RHS2
and then calls update_stmt.

- Easwaran

> Another reason why re-using the same LHS for another value is
> wrong is that annotated information like points-to sets, alignment
> and soon value-range information will be wrong.
>
> Thanks,
> Richard.
>
>> - Easwaran
>>
>>>>
>>>> testsuite/ChangeLog:
>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>
>>>>     PR middle-end/57370
>>>>     PR tree-optimization/57393
>>>>     PR tree-optimization/58011
>>>>     * gfortran.dg/reassoc_12.f90: New testcase.
>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>
>>>>
>>>> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>> Ping.
>>>>>
>>>>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>>> A newly generated statement in build_and_add_sum  function of
>>>>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>>>>> statement. In one instance, it was assigned the wrong uid (of an
>>>>>> earlier phi statement) which messed up the IR and caused the test
>>>>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>>>>> Ok for trunk?
>>>>>>
>>>>>> Thanks,
>>>>>> Easwaran
>>>>>>
>>>>>>
>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>
>>>>>>         PR middle-end/57370
>>>>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>>>>         node for a non-phi gimple statement.
>>>>>>
>>>>>> testsuite/ChangeLog:
>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>
>>>>>>         PR middle-end/57370
>>>>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>>
>>>>>>
>>>>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>>>>> ===================================================================
>>>>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>> @@ -0,0 +1,74 @@
>>>>>> +! { dg-do compile }
>>>>>> +! { dg-options "-O2 -ffast-math" }
>>>>>> +! PR middle-end/57370
>>>>>> +
>>>>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>>>>> +                                       grad_deriv,npoints, sx)
>>>>>> +    IMPLICIT REAL*8 (t)
>>>>>> +    INTEGER, PARAMETER :: dp=8
>>>>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>>>>> +                                           e_ndrho_ndrho_rho
>>>>>> +      DO ii=1,npoints
>>>>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>>>>> +            t1425 = t233 * t557
>>>>>> +            t1429 = beta * t225
>>>>>> +            t1622 = t327 * t1621
>>>>>> +            t1626 = t327 * t1625
>>>>>> +            t1632 = t327 * t1631
>>>>>> +            t1685 = t105 * t1684
>>>>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>>>>> +          END IF
>>>>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>>>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>>>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>>>>> +                    t5462 + t5466 - t5468
>>>>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>>>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>>>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>>>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>>>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>>>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>>>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>>>>> +                    t5540
>>>>>> +            t5565 = t112 * t1685
>>>>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>>>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>>>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>>>>> +                    t5574
>>>>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>> +                    t5610
>>>>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>>>>> +            t6223 = t6189 - &
>>>>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>>>>> +                    t6222
>>>>>> +            t6227 = - t8 * (t5305 + t6223)
>>>>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>>>>> +                     t6227 * sx
>>>>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>>>>> +                    t5451 - t5454 + &
>>>>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>>>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>>>>> +                    t5468
>>>>>> +            t6363 = t5480 - t5489 + &
>>>>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>>>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>>>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>>>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>>>>> +                    t5540
>>>>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>>>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>>>>> +                    0.40e1_dp * t5565 + &
>>>>>> +                    t5568 + t5572 + t5574
>>>>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>> +                    t5610
>>>>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>>>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>>>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>>>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>>>>> +                     t6669 * sx
>>>>>> +          END IF
>>>>>> +      END DO
>>>>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>>>>> +
>>>>>> Index: gcc/tree-ssa-reassoc.c
>>>>>> ===================================================================
>>>>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>>>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>>>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>>>>          {
>>>>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>>>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>>>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>>>>          }
>>>>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: Fix PR middle-end/57370
  2013-09-06 18:47           ` Easwaran Raman
@ 2013-09-09  8:58             ` Richard Biener
  0 siblings, 0 replies; 16+ messages in thread
From: Richard Biener @ 2013-09-09  8:58 UTC (permalink / raw)
  To: Easwaran Raman; +Cc: GCC Patches

On Fri, Sep 6, 2013 at 8:47 PM, Easwaran Raman <eraman@google.com> wrote:
> On Fri, Sep 6, 2013 at 12:05 AM, Richard Biener
> <richard.guenther@gmail.com> wrote:
>> On Thu, Sep 5, 2013 at 9:23 PM, Easwaran Raman <eraman@google.com> wrote:
>>> On Tue, Aug 27, 2013 at 3:35 AM, Richard Biener
>>> <richard.guenther@gmail.com> wrote:
>>>> On Thu, Aug 1, 2013 at 1:34 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>> I have a new patch that supersedes this. The new patch also fixes PR
>>>>> tree-optimization/57393 and PR tree-optimization/58011. Bootstraps and
>>>>> no test regression on x86_64/linux. Ok for trunk?
>>>>>
>>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>>
>>>>>     PR middle-end/57370
>>>>>     * tree-ssa-reassoc.c (build_and_add_sum): Fix UID assignment and reset
>>>>>     of debug statements that cause inconsistent IR.
>>>>
>>>> Missing ChangeLog entry for the insert_stmt_after hunk which I do not like
>>>> at all.  The other hunks are ok, but we need to work harder to preserve
>>>> debug stmts - simply removing all is not going to fly.
>>>>
>>>> Richard.
>>>
>>> I looked into the problem related to the debug stmts in this failing
>>> test case in detail. Initially, the code sequence looks
>>>
>>>
>>> s$n_13 = MEM[(struct S *)&s];
>>> # DEBUG s$n => s$n_13
>>> _2 = (double) s$n_13;
>>> _4 = _2 * a_3(D);
>>> _6 = (double) i_5(D);
>>> _7 = _4 * _6;
>>> _9 = (double) j_8(D);
>>> _10 = _7 * _9;
>>> bar (_10);
>>> # DEBUG D#2 => (double) k_12(D)
>>> # DEBUG D#1 => _7 * D#2
>>> # DEBUG t$n => (int) D#1
>>>
>>> After reassociation
>>>
>>> s$n_13 = MEM[(struct S *)&s];
>>> # DEBUG s$n => s$n_13
>>> _2 = (double) s$n_13;
>>> _6 = (double) i_5(D);
>>> # DEBUG D#3 => _4 * _6
>>> _9 = (double) j_8(D);
>>> _4 = _9 * _2;
>>> _7 = _4 * a_3(D);
>>> _10 = _7 * _6;
>>> bar (_10);
>>> # DEBUG D#2 => (double) k_12(D)
>>> # DEBUG D#1 => D#3 * D#2
>>> # DEBUG t$n => (int) D#1
>>>
>>> In the above, # DEBUG D#3 => _4 * _6  appears above the statement that
>>> defines _4. But even if I move the def of D#3 below the statement
>>> defining _4, it is not sufficient. Before reassociation, t$n refers to
>>> the expression (s$n_13 * a_3(D) * i_5(D) * k_12(D)), but after
>>> reassociation it would refer to ( j_8(D) * s$n_13 *  i_5(D) *
>>> k_12(D)). It seems the correct fix is to discard the debug temps whose
>>> RHS contains a variable that is involved in reassociation and then
>>> reconstruct it. Is that the expected fix here?
>>
>> The value of the DEBUG expression changes because the value
>> that _4 computes changes - that is a no-no that may not happen.
>> We cannot re-use _4 (without previously releasing it and allocating
>> it newly) with a new value.  releasing _4 should have fixed up the
>> debug stmts.
>>
>> So - can you verify whether we are indeed just replacing the
>> RHS of _4 = _2 * a_3(D) to _9 * _2 without changing the SSA name of
>> that expression?
>
> I have confirmed that the SSA name of the LHS remains the same. The
> reassociation code simply calls gimple_assign_set_rhs2 to modify RHS2
> and then calls update_stmt.

That's definitely not allowed (though ISTR I remember that reassoc does
this kind of things :/) - it will result in wrong debug info.

Richard.

> - Easwaran
>
>> Another reason why re-using the same LHS for another value is
>> wrong is that annotated information like points-to sets, alignment
>> and soon value-range information will be wrong.
>>
>> Thanks,
>> Richard.
>>
>>> - Easwaran
>>>
>>>>>
>>>>> testsuite/ChangeLog:
>>>>> 2013-07-31  Easwaran Raman  <eraman@google.com>
>>>>>
>>>>>     PR middle-end/57370
>>>>>     PR tree-optimization/57393
>>>>>     PR tree-optimization/58011
>>>>>     * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>>     * gcc.dg/tree-ssa/reassoc-31.c: New testcase.
>>>>>
>>>>>
>>>>> On Fri, Jul 12, 2013 at 7:57 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>>> Ping.
>>>>>>
>>>>>> On Thu, Jun 27, 2013 at 10:15 AM, Easwaran Raman <eraman@google.com> wrote:
>>>>>>> A newly generated statement in build_and_add_sum  function of
>>>>>>> tree-ssa-reassoc.c has to be assigned the UID of its adjacent
>>>>>>> statement. In one instance, it was assigned the wrong uid (of an
>>>>>>> earlier phi statement) which messed up the IR and caused the test
>>>>>>> program to hang. Bootstraps and no test regressions on x86_64/linux.
>>>>>>> Ok for trunk?
>>>>>>>
>>>>>>> Thanks,
>>>>>>> Easwaran
>>>>>>>
>>>>>>>
>>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>>
>>>>>>>         PR middle-end/57370
>>>>>>>         * tree-ssa-reassoc.c (build_and_add_sum): Do not use the UID of a phi
>>>>>>>         node for a non-phi gimple statement.
>>>>>>>
>>>>>>> testsuite/ChangeLog:
>>>>>>> 2013-06-27  Easwaran Raman  <eraman@google.com>
>>>>>>>
>>>>>>>         PR middle-end/57370
>>>>>>>         * gfortran.dg/reassoc_12.f90: New testcase.
>>>>>>>
>>>>>>>
>>>>>>> Index: gcc/testsuite/gfortran.dg/reassoc_12.f90
>>>>>>> ===================================================================
>>>>>>> --- gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>>> +++ gcc/testsuite/gfortran.dg/reassoc_12.f90 (revision 0)
>>>>>>> @@ -0,0 +1,74 @@
>>>>>>> +! { dg-do compile }
>>>>>>> +! { dg-options "-O2 -ffast-math" }
>>>>>>> +! PR middle-end/57370
>>>>>>> +
>>>>>>> + SUBROUTINE xb88_lr_adiabatic_lda_calc(e_ndrho_ndrho_ndrho, &
>>>>>>> +                                       grad_deriv,npoints, sx)
>>>>>>> +    IMPLICIT REAL*8 (t)
>>>>>>> +    INTEGER, PARAMETER :: dp=8
>>>>>>> +    REAL(kind=dp), DIMENSION(1:npoints) :: e_ndrho_ndrho_ndrho, &
>>>>>>> +                                           e_ndrho_ndrho_rho
>>>>>>> +      DO ii=1,npoints
>>>>>>> +          IF( grad_deriv >= 2 .OR. grad_deriv == -2 ) THEN
>>>>>>> +            t1425 = t233 * t557
>>>>>>> +            t1429 = beta * t225
>>>>>>> +            t1622 = t327 * t1621
>>>>>>> +            t1626 = t327 * t1625
>>>>>>> +            t1632 = t327 * t1631
>>>>>>> +            t1685 = t105 * t1684
>>>>>>> +            t2057 = t1636 + t8 * (t2635 + t3288)
>>>>>>> +          END IF
>>>>>>> +          IF( grad_deriv >= 3 .OR. grad_deriv == -3 ) THEN
>>>>>>> +            t5469 = t5440 - t5443 - t5446 - t5449 - &
>>>>>>> +                    t5451 - t5454 - t5456 + t5459  - &
>>>>>>> +                    t5462 + t5466 - t5468
>>>>>>> +            t5478 = 0.240e2_dp * t1616 * t973 * t645 * t1425
>>>>>>> +            t5489 = 0.1600000000e2_dp * t1429 * t1658
>>>>>>> +            t5531 = 0.160e2_dp * t112 * t1626
>>>>>>> +            t5533 = 0.160e2_dp * t112 * t1632
>>>>>>> +            t5537 = 0.160e2_dp * t112 * t1622
>>>>>>> +            t5541 = t5472 - t5478 - t5523 + t5525 + &
>>>>>>> +                    t5531 + t5533 + t5535 + t5537 + &
>>>>>>> +                    t5540
>>>>>>> +            t5565 = t112 * t1685
>>>>>>> +            t5575 = t5545 - t5548 + t5551 + t5553 - &
>>>>>>> +                    t5558 + t5560 - t5562 + t5564 - &
>>>>>>> +                    0.80e1_dp * t5565 + t5568 + t5572 + &
>>>>>>> +                    t5574
>>>>>>> +            t5611 = t5579 - t5585 + t5590 - t5595 + &
>>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>>> +                    t5610
>>>>>>> +            t5613 = t5469 + t5541 + t5575 + t5611
>>>>>>> +            t6223 = t6189 - &
>>>>>>> +                    0.3333333336e0_dp  * t83 * t84 * t5613 + &
>>>>>>> +                    t6222
>>>>>>> +            t6227 = - t8 * (t5305 + t6223)
>>>>>>> +            e_ndrho_ndrho_rho(ii) = e_ndrho_ndrho_rho(ii) + &
>>>>>>> +                     t6227 * sx
>>>>>>> +            t6352 = t5440 - t5443 - t5446 - t5449 - &
>>>>>>> +                    t5451 - t5454 + &
>>>>>>> +                    0.40e1_dp * t102  * t327 * t2057 * t557 - &
>>>>>>> +                    t5456 + t5459 - t5462 + t5466 - &
>>>>>>> +                    t5468
>>>>>>> +            t6363 = t5480 - t5489 + &
>>>>>>> +                    0.9600000000e2_dp  * t1054 * t640 * t3679
>>>>>>> +            t6367 = t5472 - t5474 - t5478 - t5523 + &
>>>>>>> +                    t5525 + t5531 + t5533 + t5535 + &
>>>>>>> +                    t5537 - 0.20e1_dp * t102 * t105 * t6363 + &
>>>>>>> +                    t5540
>>>>>>> +            t6370 = t5545 - t5548 + t5551 + t5553 - &
>>>>>>> +                    t5558 + t5560 - t5562 + t5564  - &
>>>>>>> +                    0.40e1_dp * t5565 + &
>>>>>>> +                    t5568 + t5572 + t5574
>>>>>>> +            t6373 = t5579 - t5585 + t5590 - t5595 + &
>>>>>>> +                    t5597 - t5602 + t5604 + t5607 + &
>>>>>>> +                    t5610
>>>>>>> +            t6375 = t6352 + t6367 + t6370 + t6373
>>>>>>> +            t6380 = - 0.3333333336e0_dp * t83 * t84 * t6375 + t5701
>>>>>>> +            t6669 = -t4704 - t8 * (t6344 + t6380 + t6665)
>>>>>>> +            e_ndrho_ndrho_ndrho(ii) = e_ndrho_ndrho_ndrho(ii) + &
>>>>>>> +                     t6669 * sx
>>>>>>> +          END IF
>>>>>>> +      END DO
>>>>>>> +  END SUBROUTINE xb88_lr_adiabatic_lda_calc
>>>>>>> +
>>>>>>> Index: gcc/tree-ssa-reassoc.c
>>>>>>> ===================================================================
>>>>>>> --- gcc/tree-ssa-reassoc.c        (revision 200429)
>>>>>>> +++ gcc/tree-ssa-reassoc.c        (working copy)
>>>>>>> @@ -1207,7 +1207,7 @@ build_and_add_sum (tree type, tree op1, tree op2,
>>>>>>>        if (gimple_code (op1def) == GIMPLE_PHI)
>>>>>>>          {
>>>>>>>            gsi = gsi_after_labels (gimple_bb (op1def));
>>>>>>> -           gimple_set_uid (sum, gimple_uid (op1def));
>>>>>>> +          gimple_set_uid (sum, gimple_uid (gsi_stmt (gsi)));
>>>>>>>            gsi_insert_before (&gsi, sum, GSI_NEW_STMT);
>>>>>>>          }
>>>>>>>        else

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2013-09-09  8:54 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-27 17:21 Fix PR middle-end/57370 Easwaran Raman
2013-07-12 15:36 ` Easwaran Raman
     [not found]   ` <CAPK5YPYXHtxs=+LpJNeZuKU+hmx80zjG1qQgeetxLt6qtGBSJA@mail.gmail.com>
2013-08-07 16:52     ` Easwaran Raman
2013-08-27 10:48     ` Richard Biener
2013-08-30  0:41       ` Easwaran Raman
2013-08-30  8:30         ` Richard Biener
2013-08-30 16:14           ` Easwaran Raman
2013-08-30 16:27             ` Jakub Jelinek
2013-08-30 17:02               ` Easwaran Raman
2013-08-30 17:18                 ` Jakub Jelinek
2013-09-02  9:31             ` Richard Biener
2013-09-04 17:50               ` Easwaran Raman
2013-09-05 19:23       ` Easwaran Raman
2013-09-06  7:05         ` Richard Biener
2013-09-06 18:47           ` Easwaran Raman
2013-09-09  8:58             ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).