aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2011-09-30 15:15:23 +0000
committerGeorg-Johann Lay <gjl@gcc.gnu.org>2011-09-30 15:15:23 +0000
commitfe780c134a209c1bc665883636d6b068e1abd97b (patch)
treef652d079d4a1031fa67ff8dd0562452d9064b563 /gcc
parent383841506e318ffddda4f29d7e6d8bd9933b7d45 (diff)
downloadgcc-fe780c134a209c1bc665883636d6b068e1abd97b.zip
gcc-fe780c134a209c1bc665883636d6b068e1abd97b.tar.gz
gcc-fe780c134a209c1bc665883636d6b068e1abd97b.tar.bz2
re PR target/50566 ([avr]: Add support for better logging similar to -mdeb)
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/config/avr/avr-log.c8
-rw-r--r--gcc/config/avr/avr-protos.h1
-rw-r--r--gcc/config/avr/avr.c30
4 files changed, 36 insertions, 11 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c0159e8..3201f3f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/avr/avr-log.c b/gcc/config/avr/avr-log.c
index 7381d1e..cdeb669 100644
--- a/gcc/config/avr/avr-log.c
+++ b/gcc/config/avr/avr-log.c
@@ -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
}
diff --git a/gcc/config/avr/avr-protos.h b/gcc/config/avr/avr-protos.h
index e34666c..91e5108 100644
--- a/gcc/config/avr/avr-protos.h
+++ b/gcc/config/avr/avr-protos.h
@@ -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;
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index 7e732b4..55fbae4 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -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'.