diff options
| author | amonakov <amonakov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-14 10:46:57 +0000 |
|---|---|---|
| committer | amonakov <amonakov@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-01-14 10:46:57 +0000 |
| commit | dca13bd74b5975342e82dea746d23d20df486f7f (patch) | |
| tree | c509501241a054bccf98517dd21d44b196485b7b | |
| parent | a2d56a0eabb7d7274e2d68ca718dbe45a52a103d (diff) | |
| download | ppe42-gcc-dca13bd74b5975342e82dea746d23d20df486f7f.tar.gz ppe42-gcc-dca13bd74b5975342e82dea746d23d20df486f7f.zip | |
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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155893 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/ChangeLog | 7 | ||||
| -rw-r--r-- | gcc/sel-sched-ir.h | 3 | ||||
| -rw-r--r-- | gcc/sel-sched.c | 9 | ||||
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/gfortran.dg/pr42294.f | 41 |
5 files changed, 64 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 768e12598cc..c8bd4c97f7e 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 db2989b6111..50eb903dac1 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 4ca8ab22f85..1ec2eeb292d 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 af31ac36ba2..6389af52eaf 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 00000000000..9464379083d --- /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 + + |

