Commit 7ad7809b by Jakub Jelinek Committed by Jakub Jelinek

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
parent fc7e9554
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
......
/* 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. */
......
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
......
! 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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment