Commit e30ce0a3 by Jeff Law Committed by Jeff Law

reorg.c (relax_delay_slots): Create a new variable to hold the temporary target…

reorg.c (relax_delay_slots): Create a new variable to hold the temporary target rather than clobbering...

	* reorg.c (relax_delay_slots): Create a new variable to hold
	the temporary target rather than clobbering TARGET_LABEL.

	* gcc.target/mips/reorgbug-1.c: New test.

From-SVN: r248067
parent cc9d8f3b
2017-05-15 Jeff Law <law@redhat.com>
* reorg.c (relax_delay_slots): Create a new variable to hold
the temporary target rather than clobbering TARGET_LABEL.
* config/tilegx/tilegx.c (tilegx_expand_unaligned_load): Add
missing argument to extract_bit_field call.
* config/tilepro/tilepro.c (tilepro_expand_unaligned_load): Likewise.
......
......@@ -3351,16 +3351,16 @@ relax_delay_slots (rtx_insn *first)
&& simplejump_or_return_p (trial_seq->insn (0))
&& redundant_insn (trial_seq->insn (1), insn, vNULL))
{
target_label = JUMP_LABEL (trial_seq->insn (0));
if (ANY_RETURN_P (target_label))
target_label = find_end_label (target_label);
rtx temp_label = JUMP_LABEL (trial_seq->insn (0));
if (ANY_RETURN_P (temp_label))
temp_label = find_end_label (temp_label);
if (target_label
if (temp_label
&& redirect_with_delay_slots_safe_p (delay_jump_insn,
target_label, insn))
temp_label, insn))
{
update_block (trial_seq->insn (1), insn);
reorg_redirect_jump (delay_jump_insn, target_label);
reorg_redirect_jump (delay_jump_insn, temp_label);
next = insn;
continue;
}
......
2017-05-15 Jeff Law <law@redhat.com>
* gcc.target/mips/reorgbug-1.c: New test.
2017-05-15 Pierre-Marie de Rodat <derodat@adacore.com>
* gnat.dg/specs/pack13.ads: New test.
......
/* { dg-options "-O2 -msoft-float -mips2" } */
typedef long int __int32_t;
typedef long unsigned int __uint32_t;
typedef union
{
double value;
struct
{
__uint32_t msw;
__uint32_t lsw;
}
parts;
}
ieee_double_shape_type;
double
__ieee754_fmod (double x, double y, int z, int xx)
{
__int32_t n, hx, hy, hz, ix, iy, sx, i;
__uint32_t lx, ly, lz;
ieee_double_shape_type ew_u;
ew_u.value = (x);
(lx) = ew_u.parts.lsw;
ew_u.value = (y);
(hy) = ew_u.parts.msw;
(ly) = ew_u.parts.lsw;
if (hy == 0 || hx >= 0x7ff00000)
return (x * y);
if (z)
{
if ((hx < hy) || (lx < ly))
return x;
lz = lx - ly;
lx = lz + lz;
}
ieee_double_shape_type iw_u;
iw_u.parts.lsw = (lx);
return iw_u.value;
}
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