+2011-02-11 Pat Haugen <pthaugen@us.ibm.com>
+
+ PR rtl-optimization/47614
+ * rtl.h (check_for_inc_dec): Declare.
+ * dse.c (check_for_inc_dec): Externalize...
+ * postreload.c (reload_cse_simplify): ...use it before deleting stmt.
+ (reload_cse_simplify_operands): Don't simplify opnds with side effects.
+
2011-02-11 Joseph Myers <joseph@codesourcery.com>
PR driver/47678
/* Before we delete INSN, make sure that the auto inc/dec, if it is
there, is split into a separate insn. */
-static void
+void
check_for_inc_dec (rtx insn)
{
rtx note = find_reg_note (insn, REG_INC, NULL_RTX);
if (REG_P (value)
&& ! REG_FUNCTION_VALUE_P (value))
value = 0;
+ check_for_inc_dec (insn);
delete_insn_and_edges (insn);
return;
}
if (i < 0)
{
+ check_for_inc_dec (insn);
delete_insn_and_edges (insn);
/* We're done with this insn. */
return;
continue;
}
#endif /* LOAD_EXTEND_OP */
+ if (side_effects_p (op))
+ continue;
v = cselib_lookup (op, recog_data.operand_mode[i], 0, VOIDmode);
if (! v)
continue;
extern int exp_equiv_p (const_rtx, const_rtx, int, bool);
extern unsigned hash_rtx (const_rtx x, enum machine_mode, int *, int *, bool);
+/* In dse.c */
+extern void check_for_inc_dec (rtx insn);
+
/* In jump.c */
extern int comparison_dominates_p (enum rtx_code, enum rtx_code);
extern int condjump_p (const_rtx);
+2011-02-11 Pat Haugen <pthaugen@us.ibm.com>
+
+ PR rtl-optimization/47614
+ * gfortran.dg/pr47614.f: New.
+
2011-02-11 Joseph Myers <joseph@codesourcery.com>
PR driver/47678
--- /dev/null
+! { dg-do run { target { powerpc*-*-* } } }
+! { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } }
+! { dg-options "-O3 -funroll-loops -ffast-math -mcpu=power4" }
+
+
+ SUBROUTINE SFCPAR(ZET,NZ,ZMH,TSL,TMES)
+ IMPLICIT REAL*8 (A-H, O-Z)
+ REAL*8 ZET(*)
+
+ ZS=MAX(TSL*ZMH,ZET(2))
+
+ DO 10 K=2,NZ
+ KLEV=K-1
+ IF(ZS.LE.ZET(K)) GO TO 20
+ 10 CONTINUE
+
+ 20 CONTINUE
+ TMES=ZET(KLEV+1)
+
+ RETURN
+ END
+
+ program pr47614
+ real*8 ar1(10),d1,d2,d3
+ integer i
+
+ d1 = 2.0
+ d2 = 3.0
+ d3 = 3.0
+ do 50 i=1,10
+ ar1(i) = d1
+ d1 = d1 + 2.0
+ 50 continue
+
+ call sfcpar(ar1,10,d2,d3,d1)
+ if (d1.ne.10.0) call abort()
+ end