mn10300.md (cmpsi): Tell reload to disregard the first alternative.
authorAlexandre Oliva <aoliva@redhat.com>
Sat, 14 Apr 2001 11:09:21 +0000 (11:09 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Sat, 14 Apr 2001 11:09:21 +0000 (11:09 +0000)
* config/mn10300/mn10300.md (cmpsi): Tell reload to disregard the
first alternative.

From-SVN: r41355

gcc/ChangeLog
gcc/config/mn10300/mn10300.md

index 699056450d3b9ed43c14e3d4648f2b3e5a63ca77..17451eff5bcd645002b0862b8bf5ec0eecee7247 100644 (file)
@@ -1,3 +1,8 @@
+2001-04-14  Alexandre Oliva  <aoliva@redhat.com>
+
+       * config/mn10300/mn10300.md (cmpsi): Tell reload to disregard the
+       first alternative.
+
 2001-04-14  Alan Modra  <amodra@one.net.au>
 
        * pa.c (force_mode): New function.
index 4f32cd489d0b0f4091b4c82c06e25f7ad03018a3..7050f7adc9f85827a15fb2f0ee2f5326a8c77663 100644 (file)
 ;; but will have the proper effect on cc0.  Using d0 is arbitrary; any
 ;; data register would work.)
 
+;; Even though the first alternative would be preferrable if it can
+;; possibly match, reload must not be given the opportunity to attempt
+;; to use it.  It assumes that such matches can only occur when one of
+;; the operands is used for input and the other for output.  Since
+;; this is not the case, it abort()s.  Indeed, such a reload cannot be
+;; possibly satisfied, so just mark the alternative with a `!', so
+;; that it is not considered by reload.
+
 (define_insn "cmpsi"
   [(set (cc0)
-       (compare (match_operand:SI 0 "register_operand" "*d*a*x,dax")
+       (compare (match_operand:SI 0 "register_operand" "!*d*a*x,dax")
                 (match_operand:SI 1 "nonmemory_operand" "*0,daxi")))]
   ""
   "@