From: J"orn Rennecke Date: Mon, 6 Nov 2000 20:09:04 +0000 (+0000) Subject: reload1.c (eliminate_regs_in_insn): Allow a set to be a PARALLEL with (clobber (match... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f34c06e547edb048d9c5be8a2c019027da03da5f;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f24e1838027..0bf70491b09 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Mon Nov 6 20:08:13 2000 J"orn Rennecke + + * reload1.c (eliminate_regs_in_insn): Allow a set to be a PARALLEL + with (clobber (match_scratch...)). + 2000-11-06 Neil Booth * c-lex.c (init_c_lex): If cpp_start_read fails, exit with diff --git a/gcc/reload1.c b/gcc/reload1.c index 66c98f54595..9e985e445b2 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 (); }