[PATCH, committed] Fix rtl check error in pdp11

Paul Koning paulkoning@comcast.net
Sat Jul 14 19:17:00 GMT 2018


When building with checking enabled, there were check failures in pdp11_rtx_costs.  This patch fixes two errors.

Committed.

	paul

ChangeLog:

2018-07-14  Paul Koning  <ni1d@arrl.net>

	* config/pdp11/pdp11.c (pdp11_rtx_costs): Bugfixes.

Index: config/pdp11/pdp11.c
===================================================================
--- config/pdp11/pdp11.c	(revision 262604)
+++ config/pdp11/pdp11.c	(working copy)
@@ -1014,6 +1014,7 @@ pdp11_rtx_costs (rtx x, machine_mode mode, int out
   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,6 +1036,14 @@ pdp11_rtx_costs (rtx x, machine_mode mode, int out
       *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
@@ -1041,6 +1050,15 @@ pdp11_rtx_costs (rtx x, machine_mode mode, int out
      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);



More information about the Gcc-patches mailing list