Fix PR middle-end/57370

Easwaran Raman eraman@google.com
Thu Jun 27 17:21:00 GMT 2013


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



More information about the Gcc-patches mailing list