aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2017-05-15 11:21:31 -0600
committerJeff Law <law@gcc.gnu.org>2017-05-15 11:21:31 -0600
commite30ce0a36c89794543381b3699cc23011af4e85c (patch)
tree84821df085894cc6ada5cd4b4bedf59d2e828ce9 /gcc
parentcc9d8f3b46c0fbb515199d067789aaf890b62088 (diff)
downloadgcc-e30ce0a36c89794543381b3699cc23011af4e85c.zip
gcc-e30ce0a36c89794543381b3699cc23011af4e85c.tar.gz
gcc-e30ce0a36c89794543381b3699cc23011af4e85c.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog3
-rw-r--r--gcc/reorg.c12
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.target/mips/reorgbug-1.c39
4 files changed, 52 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 8cceb24..18b6ed5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,8 @@
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.
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 85ef7d6..1a6fd86 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -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;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f198fc6..9fb8c85 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+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.
diff --git a/gcc/testsuite/gcc.target/mips/reorgbug-1.c b/gcc/testsuite/gcc.target/mips/reorgbug-1.c
new file mode 100644
index 0000000..b820a2b
--- /dev/null
+++ b/gcc/testsuite/gcc.target/mips/reorgbug-1.c
@@ -0,0 +1,39 @@
+/* { 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;
+}