re PR rtl-optimization/38722 (Revision 143027 causes ICE in find_decomposable_subregs)
PR rtl-optimization/38722 * combine.c (try_combine): Don't modify PATTERN (i3) and notes too early, only set a flag and modify after last possible undo_all point. * gfortran.dg/pr38722.f90: New test. From-SVN: r143132
This commit is contained in:
parent
fc7e955409
commit
7ad7809bbf
@ -1,3 +1,10 @@
|
||||
2009-01-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/38722
|
||||
* combine.c (try_combine): Don't modify PATTERN (i3) and notes
|
||||
too early, only set a flag and modify after last possible
|
||||
undo_all point.
|
||||
|
||||
2009-01-06 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
PR c/34252
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Optimize by combining instructions for GNU compiler.
|
||||
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
@ -2208,6 +2208,7 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
|
||||
/* Notes that I1, I2 or I3 is a MULT operation. */
|
||||
int have_mult = 0;
|
||||
int swap_i2i3 = 0;
|
||||
int changed_i3_dest = 0;
|
||||
|
||||
int maxreg;
|
||||
rtx temp;
|
||||
@ -2895,14 +2896,7 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
|
||||
insn_code_number = recog_for_combine (&newpat, i3, &new_i3_notes);
|
||||
|
||||
if (insn_code_number >= 0)
|
||||
{
|
||||
/* If we will be able to accept this, we have made a
|
||||
change to the destination of I3. This requires us to
|
||||
do a few adjustments. */
|
||||
|
||||
PATTERN (i3) = newpat;
|
||||
adjust_for_new_dest (i3);
|
||||
}
|
||||
changed_i3_dest = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3375,6 +3369,16 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* If we will be able to accept this, we have made a
|
||||
change to the destination of I3. This requires us to
|
||||
do a few adjustments. */
|
||||
|
||||
if (changed_i3_dest)
|
||||
{
|
||||
PATTERN (i3) = newpat;
|
||||
adjust_for_new_dest (i3);
|
||||
}
|
||||
|
||||
/* We now know that we can do this combination. Merge the insns and
|
||||
update the status of registers and LOG_LINKS. */
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2009-01-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/38722
|
||||
* gfortran.dg/pr38722.f90: New test.
|
||||
|
||||
2009-01-06 Janis Johnson <janis187@us.ibm.com>
|
||||
|
||||
PR c/34252
|
||||
|
38
gcc/testsuite/gfortran.dg/pr38722.f90
Normal file
38
gcc/testsuite/gfortran.dg/pr38722.f90
Normal file
@ -0,0 +1,38 @@
|
||||
! PR rtl-optimization/38722
|
||||
! { dg-do compile }
|
||||
! { dg-options "-O1" }
|
||||
SUBROUTINE foo(x, n, ga, gc, vr)
|
||||
TYPE pt
|
||||
DOUBLE PRECISION, DIMENSION (:, :, :), POINTER :: cr
|
||||
END TYPE pt
|
||||
TYPE pu
|
||||
TYPE(pt), POINTER :: pw
|
||||
END TYPE pu
|
||||
LOGICAL, INTENT(in) :: x, ga, gc
|
||||
INTEGER :: i, n
|
||||
LOGICAL :: dd, ep, fe
|
||||
TYPE(pu) :: vr
|
||||
TYPE(pu), DIMENSION(:), POINTER :: v
|
||||
IF (.NOT. fe) THEN
|
||||
IF (ga) THEN
|
||||
CALL bar (dd, ep, gc)
|
||||
END IF
|
||||
IF (x .AND. .NOT. ga) THEN
|
||||
IF (gc) THEN
|
||||
DO i=1,n
|
||||
CALL baz (v(i), x, gc)
|
||||
v(i)%pw%cr = 1.0
|
||||
END DO
|
||||
DO i=1,n
|
||||
IF (ep) THEN
|
||||
IF (dd) THEN
|
||||
IF (i==1) THEN
|
||||
v(i)%pw%cr=v(i)%pw%cr + vr%pw%cr
|
||||
ENDIF
|
||||
END IF
|
||||
END IF
|
||||
END DO
|
||||
END IF
|
||||
ENDIF
|
||||
END IF
|
||||
END SUBROUTINE foo
|
Loading…
x
Reference in New Issue
Block a user