reload1.c (reload_as_needed): Verify that the insn satisfies its constraints after...
authorJeffrey A Law <law@cygnus.com>
Wed, 30 Dec 1998 23:14:25 +0000 (23:14 +0000)
committerJeff Law <law@gcc.gnu.org>
Wed, 30 Dec 1998 23:14:25 +0000 (16:14 -0700)
        * 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

gcc/ChangeLog
gcc/reload1.c

index 2f802535a14ea6b58be5d669946eb52faaeccb55..b5bdd3666b0c7170370d9dd4969a0ec12aa9186d 100644 (file)
@@ -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>
index 39da06d6135b35c4199588195357d8c03759a7f3..3e5f898d5a7f3e374df40e4d89c495e493d9db20 100644 (file)
@@ -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)