]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/50566 ([avr]: Add support for better logging similar to -mdeb)
authorGeorg-Johann Lay <avr@gjlay.de>
Fri, 30 Sep 2011 15:15:23 +0000 (15:15 +0000)
committerGeorg-Johann Lay <gjl@gcc.gnu.org>
Fri, 30 Sep 2011 15:15:23 +0000 (15:15 +0000)
PR target/50566
* config/avr/avr-protos.h (avr_log_t): New field address_cost.
* config/avr/avr.c (avr_address_cost): Use it.
* config/avr/avr-log.c (avr_log_set_avr_log): Initialize it.
(avr_log_vadump): Unknown %-codes finish printing.

From-SVN: r179391

gcc/ChangeLog
gcc/config/avr/avr-log.c
gcc/config/avr/avr-protos.h
gcc/config/avr/avr.c

index c0159e80d1f93fb4ceb00f2bb7a62277cf578839..3201f3fdaed1b9d96c81c3e903d1f7484d9e7dcd 100644 (file)
@@ -1,3 +1,11 @@
+2011-09-30  Georg-Johann Lay  <avr@gjlay.de>
+
+       PR target/50566
+       * config/avr/avr-protos.h (avr_log_t): New field address_cost.
+       * config/avr/avr.c (avr_address_cost): Use it.
+       * config/avr/avr-log.c (avr_log_set_avr_log): Initialize it.
+       (avr_log_vadump): Unknown %-codes finish printing.
+
 2011-09-30  Jakub Jelinek  <jakub@redhat.com>
 
        PR inline-asm/50571
index 7381d1edd392570f2f8b70b9948b245a3bdc5912..cdeb6690fde004316413b335af451d976878b6a8 100644 (file)
@@ -283,7 +283,12 @@ avr_log_vadump (FILE *file, const char *fmt, va_list ap)
               abort();
               
             default:
-              fputc (*(fmt-1), file);
+              /* Unknown %-code: Stop printing */
+              
+              fprintf (file, "??? %%%c ???%s\n", *(fmt-1), fmt);
+              fmt = "";
+              
+              break;
             }
           break; /* % */
         }
@@ -318,6 +323,7 @@ avr_log_set_avr_log (void)
       SET_DUMP_DETAIL (legitimize_address);
       SET_DUMP_DETAIL (legitimize_reload_address);
       SET_DUMP_DETAIL (constraints);
+      SET_DUMP_DETAIL (address_cost);
 
 #undef SET_DUMP_DETAIL
     }
index e34666c66780a56792d8d8c800a3f07333f78886..91e51088917437a7ba83e2401fbb52537936eb05 100644 (file)
@@ -129,6 +129,7 @@ typedef struct
   unsigned legitimize_address :1;
   unsigned legitimize_reload_address :1;
   unsigned constraints :1;
+  unsigned address_cost :1;
 } avr_log_t;
 
 extern avr_log_t avr_log;
index 7e732b45c771a46b024a608a44c4c0cd949b0218..55fbae4649e9196e476d5e99fd6e79ab62064847 100644 (file)
@@ -6573,23 +6573,33 @@ avr_rtx_costs (rtx x, int codearg, int outer_code,
   return done;
 }
 
-/* Calculate the cost of a memory address.  */
+
+/* Implement `TARGET_ADDRESS_COST'.  */
 
 static int
 avr_address_cost (rtx x, bool speed ATTRIBUTE_UNUSED)
 {
+  int cost = 4;
+  
   if (GET_CODE (x) == PLUS
-      && GET_CODE (XEXP (x,1)) == CONST_INT
-      && (REG_P (XEXP (x,0)) || GET_CODE (XEXP (x,0)) == SUBREG)
-      && INTVAL (XEXP (x,1)) >= 61)
-    return 18;
-  if (CONSTANT_ADDRESS_P (x))
+      && CONST_INT_P (XEXP (x, 1))
+      && (REG_P (XEXP (x, 0))
+          || GET_CODE (XEXP (x, 0)) == SUBREG))
     {
-      if (optimize > 0 && io_address_operand (x, QImode))
-       return 2;
-      return 4;
+      if (INTVAL (XEXP (x, 1)) >= 61)
+        cost = 18;
     }
-  return 4;
+  else if (CONSTANT_ADDRESS_P (x))
+    {
+      if (optimize > 0
+          && io_address_operand (x, QImode))
+        cost = 2;
+    }
+
+  if (avr_log.address_cost)
+    avr_edump ("\n%?: %d = %r\n", cost, x);
+  
+  return cost;
 }
 
 /* Test for extra memory constraint 'Q'.