aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Monakov <amonakov@ispras.ru>2010-01-14 13:46:57 +0300
committerAlexander Monakov <amonakov@gcc.gnu.org>2010-01-14 13:46:57 +0300
commit14f30b877fe018475154a6e4d8979bc57528232d (patch)
treec509501241a054bccf98517dd21d44b196485b7b
parent8ec4d0ada31aee6ee23b4ed7f234171f6639c0dd (diff)
downloadgcc-14f30b877fe018475154a6e4d8979bc57528232d.zip
gcc-14f30b877fe018475154a6e4d8979bc57528232d.tar.gz
gcc-14f30b877fe018475154a6e4d8979bc57528232d.tar.bz2
re PR rtl-optimization/42294 (ICE in code_motion_path_driver for 416.gamess)
2010-01-14 Alexander Monakov <amonakov@ispras.ru> PR rtl-optimization/42294 * sel-sched-ir.h (struct _sel_insn_data): Update comment. * sel-sched.c (move_exprs_to_boundary): Transitively add all originators' originators. * gfortran.dg/pr42294.f: New. From-SVN: r155893
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/sel-sched-ir.h3
-rw-r--r--gcc/sel-sched.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr42294.f41
5 files changed, 64 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 768e125..c8bd4c9 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,12 @@
2010-01-14 Alexander Monakov <amonakov@ispras.ru>
+ PR rtl-optimization/42294
+ * sel-sched-ir.h (struct _sel_insn_data): Update comment.
+ * sel-sched.c (move_exprs_to_boundary): Transitively add all
+ originators' originators.
+
+2010-01-14 Alexander Monakov <amonakov@ispras.ru>
+
PR rtl-optimization/39453
PR rtl-optimization/42246
* sel-sched-ir.c (considered_for_pipelining_p): Do not test
diff --git a/gcc/sel-sched-ir.h b/gcc/sel-sched-ir.h
index db2989b..50eb903 100644
--- a/gcc/sel-sched-ir.h
+++ b/gcc/sel-sched-ir.h
@@ -715,7 +715,8 @@ struct _sel_insn_data
bitmap found_deps;
/* An INSN_UID bit is set when this is a bookkeeping insn generated from
- a parent with this uid. */
+ a parent with this uid. If a parent is a bookkeeping copy, all its
+ originators are transitively included in this set. */
bitmap originators;
/* A hashtable caching the result of insn transformations through this one. */
diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c
index 4ca8ab2..1ec2eeb 100644
--- a/gcc/sel-sched.c
+++ b/gcc/sel-sched.c
@@ -5208,12 +5208,21 @@ move_exprs_to_boundary (bnd_t bnd, expr_t expr_vliw,
EXECUTE_IF_SET_IN_BITMAP (current_copies, 0, book_uid, bi)
{
+ unsigned uid;
+ bitmap_iterator bi;
+
/* We allocate these bitmaps lazily. */
if (! INSN_ORIGINATORS_BY_UID (book_uid))
INSN_ORIGINATORS_BY_UID (book_uid) = BITMAP_ALLOC (NULL);
bitmap_copy (INSN_ORIGINATORS_BY_UID (book_uid),
current_originators);
+
+ /* Transitively add all originators' originators. */
+ EXECUTE_IF_SET_IN_BITMAP (current_originators, 0, uid, bi)
+ if (INSN_ORIGINATORS_BY_UID (uid))
+ bitmap_ior_into (INSN_ORIGINATORS_BY_UID (book_uid),
+ INSN_ORIGINATORS_BY_UID (uid));
}
return should_move;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index af31ac3..6389af5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,10 @@
2010-01-14 Alexander Monakov <amonakov@ispras.ru>
+ PR rtl-optimization/42294
+ * gfortran.dg/pr42294.f: New.
+
+2010-01-14 Alexander Monakov <amonakov@ispras.ru>
+
PR rtl-optimization/39453
PR rtl-optimization/42246
* gcc.dg/pr39453.c: New.
diff --git a/gcc/testsuite/gfortran.dg/pr42294.f b/gcc/testsuite/gfortran.dg/pr42294.f
new file mode 100644
index 0000000..9464379
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr42294.f
@@ -0,0 +1,41 @@
+C PR rtl-optimization/42294
+C { dg-do compile { target powerpc*-*-* ia64-*-* x86_64-*-* } }
+C { dg-options "-O2 -fselective-scheduling2 -fsel-sched-pipelining -funroll-all-loops" }
+
+ SUBROUTINE ORIEN(IW,NATOT,NTOTORB,NATORB,P,T)
+ IMPLICIT DOUBLE PRECISION(A-H,O-Z)
+ DIMENSION NATORB(NATOT),P(NTOTORB*(NTOTORB+1)/2)
+ DIMENSION T(NTOTORB,NTOTORB)
+ DO 9000 IATOM=1,NATOT
+ ILAST = NTOTORB
+ IF (IATOM.NE.NATOT) ILAST=NATORB(IATOM+1)-1
+ DO 8000 IAOI=NATORB(IATOM),ILAST
+ DO 7000 IAOJ = IAOI+1,ILAST
+ R2 = 0.0D+00
+ R3 = 0.0D+00
+ DO 6000 INOTA=1,NATOT
+ DO 5000 IK=NATORB(INOTA),NTOTORB
+ IMAI=MAX(IK,IAOI)
+ IMII=MIN(IK,IAOI)
+ IMAJ=MAX(IK,IAOJ)
+ IMIJ=MIN(IK,IAOJ)
+ IKI=(IMAI*(IMAI-1))/2 + IMII
+ IKJ=(IMAJ*(IMAJ-1))/2 + IMIJ
+ PIKI=P(IKI)
+ PIKJ=P(IKJ)
+ R2 = R2 + (PIKI**4)-6*(PIKI*PIKI*PIKJ*PIKJ)+(PIKJ)
+ 5000 CONTINUE
+ 6000 CONTINUE
+ R2 = (R2/4.0D+00)
+ Q = SQRT(R2*R2 + R3*R3)
+ IF (Q.LT.1.0D-08) GO TO 7000
+ A = COS(THETA)
+ B = -SIN(THETA)
+ CALL ROT1INT(NTOTORB,IAOI,IAOJ,A,B,P)
+ 7000 CONTINUE
+ 8000 CONTINUE
+ 9000 CONTINUE
+ RETURN
+ END
+
+