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 | |
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')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/reload1.c | 28 |
2 files changed, 29 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2f80253..b5bdd36 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ Wed Dec 30 23:38:55 1998 Jeffrey A Law (law@cygnus.com) + * 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. + * i386.md (doubleword shifts): Avoid namespace pollution. Wed Dec 30 23:00:28 1998 David O'Brien <obrien@NUXI.com> 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) |