re PR middle-end/37053 (ICE in reload_cse_simplify_operands, at postreload.c:395)
authorUlrich Weigand <uweigand@de.ibm.com>
Mon, 10 Aug 2009 15:34:09 +0000 (15:34 +0000)
committerUlrich Weigand <uweigand@gcc.gnu.org>
Mon, 10 Aug 2009 15:34:09 +0000 (15:34 +0000)
PR target/37053
* reload1.c (reload_as_needed): Use cancel_changes to completely
undo a failed replacement attempt.

From-SVN: r150626

gcc/ChangeLog
gcc/reload1.c

index 30cd143..67d98a7 100644 (file)
@@ -1,3 +1,9 @@
+2009-08-10  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       PR target/37053
+       * reload1.c (reload_as_needed): Use cancel_changes to completely
+       undo a failed replacement attempt.
+
 2009-08-10  Richard Guenther  <rguenther@suse.de>
 
        PR middle-end/41006
index 6b6da1b..41b436b 100644 (file)
@@ -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;
                        }