* config/pdp11/pdp11.c (pdp11_rtx_costs): Bugfixes.
authorPaul Koning <ni1d@arrl.net>
Sat, 14 Jul 2018 19:15:47 +0000 (15:15 -0400)
committerPaul Koning <pkoning@gcc.gnu.org>
Sat, 14 Jul 2018 19:15:47 +0000 (15:15 -0400)
From-SVN: r262659

gcc/ChangeLog
gcc/config/pdp11/pdp11.c

index 14bfd9ea69d1d2a7fd51ee7213e4b941ed710c49..776a3c4434dabffae4210a5f282077dc4bf0633c 100644 (file)
@@ -1,3 +1,7 @@
+2018-07-14  Paul Koning  <ni1d@arrl.net>
+
+       * config/pdp11/pdp11.c (pdp11_rtx_costs): Bugfixes.
+
 2018-07-13  Jan Hubicka  <hubicka@ucw.cz>
 
        * lto-streamer-out.c (copy_function_or_variable): Dump info about
index 834c4ea7518edad2ae60b709eaaf32198eeeffc7..1bcdaed79dc9b8a89bae75e8ce9c3bc1fdd89e81 100644 (file)
@@ -1014,6 +1014,7 @@ pdp11_rtx_costs (rtx x, machine_mode mode, int outer_code,
   const int code = GET_CODE (x);
   const int asize = (mode == QImode) ? 2 : GET_MODE_SIZE (mode);
   rtx src, dest;
+  const char *fmt;
   
   switch (code)
     {
@@ -1035,12 +1036,29 @@ pdp11_rtx_costs (rtx x, machine_mode mode, int outer_code,
       *total = pdp11_addr_cost (x, mode, ADDR_SPACE_GENERIC, speed);
       return true;
     }
+  if (GET_RTX_LENGTH (code) == 0)
+    {
+      if (speed)
+       *total = 0;
+      else
+       *total = 2;
+      return true;
+    }
 
   /* Pick up source and dest.  We don't necessarily use the standard
      recursion in rtx_costs to figure the cost, because that would
      count the destination operand twice for three-operand insns.
      Also, this way we can catch special cases like move of zero, or
      add one.  */
+  fmt = GET_RTX_FORMAT (code);
+  if (fmt[0] != 'e' || (GET_RTX_LENGTH (code) > 1 && fmt[1] != 'e'))
+    {
+      if (speed)
+       *total = 0;
+      else
+       *total = 2;
+      return true;
+    }
   if (GET_RTX_LENGTH (code) > 1)
     src = XEXP (x, 1);
   dest = XEXP (x, 0);