aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@redhat.com>2000-11-06 20:09:04 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2000-11-06 20:09:04 +0000
commitf34c06e547edb048d9c5be8a2c019027da03da5f (patch)
treec7978d0b02dbf357a24f4f4533ab561007f35730 /gcc
parentf559f30b4b87acccbfa73cfbb9c2c1ff610caed2 (diff)
downloadgcc-f34c06e547edb048d9c5be8a2c019027da03da5f.zip
gcc-f34c06e547edb048d9c5be8a2c019027da03da5f.tar.gz
gcc-f34c06e547edb048d9c5be8a2c019027da03da5f.tar.bz2
reload1.c (eliminate_regs_in_insn): Allow a set to be a PARALLEL with (clobber (match_scratch...)).
* reload1.c (eliminate_regs_in_insn): Allow a set to be a PARALLEL with (clobber (match_scratch...)). From-SVN: r37281
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/reload1.c19
2 files changed, 20 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f24e183..0bf7049 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Mon Nov 6 20:08:13 2000 J"orn Rennecke <amylaar@redhat.com>
+
+ * reload1.c (eliminate_regs_in_insn): Allow a set to be a PARALLEL
+ with (clobber (match_scratch...)).
+
2000-11-06 Neil Booth <neilb@earthling.net>
* c-lex.c (init_c_lex): If cpp_start_read fails, exit with
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 66c98f5..9e985e4 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -2953,13 +2953,24 @@ eliminate_regs_in_insn (insn, replace)
if (offset == 0)
{
- /* We assume here that we don't need a PARALLEL of
- any CLOBBERs for this assignment. There's not
- much we can do if we do need it. */
+ int num_clobbers;
+ /* We assume here that if we need a PARALLEL with
+ CLOBBERs for this assignment, we can do with the
+ MATCH_SCRATCHes that add_clobbers allocates.
+ There's not much we can do if that doesn't work. */
PATTERN (insn) = gen_rtx_SET (VOIDmode,
SET_DEST (old_set),
ep->to_rtx);
- INSN_CODE (insn) = recog (PATTERN (insn), insn, 0);
+ num_clobbers = 0;
+ INSN_CODE (insn) = recog (PATTERN (insn), insn, &num_clobbers);
+ if (num_clobbers)
+ {
+ rtvec vec = rtvec_alloc (num_clobbers + 1);
+
+ vec->elem[0] = PATTERN (insn);
+ PATTERN (insn) = gen_rtx_PARALLEL (VOIDmode, vec);
+ add_clobbers (PATTERN (insn), INSN_CODE (insn));
+ }
if (INSN_CODE (insn) < 0)
abort ();
}