aboutsummaryrefslogtreecommitdiff
path: root/gcc/reload1.c
diff options
context:
space:
mode:
authorUlrich Weigand <uweigand@de.ibm.com>2009-08-10 15:34:09 +0000
committerUlrich Weigand <uweigand@gcc.gnu.org>2009-08-10 15:34:09 +0000
commit0159ec792b364e3b675d606ee66700a4c373bd1f (patch)
tree0c5e12fbd47ddfa2d6f82dda681ccb71bdc507a0 /gcc/reload1.c
parentee26a76d35d4d9b328f5fd8a423470363125776e (diff)
downloadgcc-0159ec792b364e3b675d606ee66700a4c373bd1f.zip
gcc-0159ec792b364e3b675d606ee66700a4c373bd1f.tar.gz
gcc-0159ec792b364e3b675d606ee66700a4c373bd1f.tar.bz2
re PR middle-end/37053 (ICE in reload_cse_simplify_operands, at postreload.c:395)
PR target/37053 * reload1.c (reload_as_needed): Use cancel_changes to completely undo a failed replacement attempt. From-SVN: r150626
Diffstat (limited to 'gcc/reload1.c')
-rw-r--r--gcc/reload1.c26
1 files changed, 10 insertions, 16 deletions
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 6b6da1b..41b436b 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -4304,31 +4304,25 @@ reload_as_needed (int live_known)
continue;
if (n == 1)
{
- n = validate_replace_rtx (reload_reg,
- gen_rtx_fmt_e (code,
- mode,
- reload_reg),
- p);
+ rtx replace_reg
+ = gen_rtx_fmt_e (code, mode, reload_reg);
+
+ validate_replace_rtx_group (reload_reg,
+ replace_reg, p);
+ n = verify_changes (0);
/* 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. */
+ undo the replacement, else confirm it. */
if (!n)
- {
- validate_replace_rtx (gen_rtx_fmt_e (code,
- mode,
- reload_reg),
- reload_reg, p);
- break;
- }
-
+ cancel_changes (0);
+ else
+ confirm_change_group ();
}
break;
}