diff options
author | Jeffrey A Law <law@cygnus.com> | 1998-12-30 23:14:25 +0000 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1998-12-30 16:14:25 -0700 |
commit | f67c2384cb78c7f241aa3e9ef10e06c916363f9a (patch) | |
tree | 713dde59b8605269ed312043a8514901690d5d5c /gcc/reload1.c | |
parent | f203c52060870af5098bbdc24cfc6f3a855dc057 (diff) | |
download | gcc-f67c2384cb78c7f241aa3e9ef10e06c916363f9a.zip gcc-f67c2384cb78c7f241aa3e9ef10e06c916363f9a.tar.gz gcc-f67c2384cb78c7f241aa3e9ef10e06c916363f9a.tar.bz2 |
reload1.c (reload_as_needed): Verify that the insn satisfies its constraints after replacing a register...
* reload1.c (reload_as_needed): Verify that the insn satisfies its
constraints after replacing a register address with an autoincrement
address for reload inheritance purposes.
From-SVN: r24449
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r-- | gcc/reload1.c | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c index 39da06d..3e5f898 100644 --- a/gcc/reload1.c +++ b/gcc/reload1.c @@ -4333,9 +4333,31 @@ reload_as_needed (live_known) if (! n) continue; if (n == 1) - n = validate_replace_rtx (reload_reg, - gen_rtx (code, mode, - reload_reg), p); + { + n = validate_replace_rtx (reload_reg, + gen_rtx (code, mode, + reload_reg), + p); + + /* We must also verify that the constraints + are met after the replacement. */ + extract_insn (p); + if (n) + n = constrain_operands (1); + else + break; + + /* If the constraints were not met, then + undo the replacement. */ + if (!n) + { + validate_replace_rtx (gen_rtx (code, mode, + reload_reg), + reload_reg, p); + break; + } + + } break; } if (n == 1) |