OSDN Git Service

PR target/37053
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 10 Aug 2009 15:34:09 +0000 (15:34 +0000)
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 10 Aug 2009 15:34:09 +0000 (15:34 +0000)
* reload1.c (reload_as_needed): Use cancel_changes to completely
undo a failed replacement attempt.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@150626 138bc75d-0d04-0410-961f-82ee72b054a4

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;
                        }