summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog15
-rw-r--r--gcc/Makefile.in33
-rw-r--r--gcc/genattr.c7
-rw-r--r--gcc/genattrtab.c7
-rw-r--r--gcc/gencodes.c8
-rw-r--r--gcc/genconfig.c7
-rw-r--r--gcc/genemit.c7
-rw-r--r--gcc/genextract.c52
-rw-r--r--gcc/genflags.c7
-rw-r--r--gcc/genopinit.c7
-rw-r--r--gcc/genoutput.c22
-rw-r--r--gcc/genpeep.c7
-rw-r--r--gcc/genpreds.c7
-rw-r--r--gcc/genrecog.c52
-rw-r--r--gcc/gensupport.c52
15 files changed, 79 insertions, 211 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6b723cc965b..b67c0339b6c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,20 @@
2006-01-22 Zack Weinberg <zackw@panix.com>
+ * gensupport.c: Define get_insn_name and record_insn_name here.
+ (read_md_rtx): Call record_insn_name as appropriate.
+ * genattr.c, genattrtab.c, gencodes.c, genconfig.c, genemit.c
+ * genextract.c, genflags.c, genopinit.c, genoutput.c, genpeep.c
+ * genpreds.c, genrecog.c: Don't define get_insn_name nor
+ record_insn_name.
+ * Makefile.in (BUILD_SUPPORT, BUILD_PRINT): Fold into BUILD_RTL.
+ (BUILD_VARRAY): Delete.
+ (genprognormal): Rename genprogmd. Fold in all programs from
+ genprognoprint; also attrtab.
+ (build/genattrtab): Just mention genautomata.o and varray.o.
+ Reorganize a bit, add comments to make the categories clearer.
+
+2006-01-22 Zack Weinberg <zackw@panix.com>
+
* genconditions.c (condition_table, add_condition): Delete.
(write_conditions): Don't emit n_insn_conditions nor
insn_elision_unavailable. Issue the gcc version #ifdef here,
diff --git a/gcc/Makefile.in b/gcc/Makefile.in
index c6eec9832c1..6d25f9001c1 100644
--- a/gcc/Makefile.in
+++ b/gcc/Makefile.in
@@ -839,11 +839,8 @@ LDEXP_LIB = @LDEXP_LIB@
BUILD_LIBS = $(BUILD_LIBIBERTY)
BUILD_RTL = build/rtl.o build/read-rtl.o build/ggc-none.o \
- build/min-insn-modes.o
-BUILD_SUPPORT = build/gensupport.o
-BUILD_PRINT = build/print-rtl.o
+ build/min-insn-modes.o build/gensupport.o build/print-rtl.o
BUILD_ERRORS = build/errors.o
-BUILD_VARRAY = build/varray.o
# Specify the directories to be searched for header files.
# Both . and srcdir are used, in that order,
@@ -2964,29 +2961,19 @@ build/gen%$(build_exeext): build/gen%.o $(BUILD_LIBDEPS)
$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
$(filter-out $(BUILD_LIBDEPS), $^) $(BUILD_LIBS)
-# All these programs have the same additional dependency set.
-genprognormal = attr codes config emit extract flags opinit output peep recog \
- preds
-$(genprognormal:%=build/gen%$(build_exeext)): $(BUILD_RTL) $(BUILD_SUPPORT) \
- $(BUILD_PRINT) $(BUILD_ERRORS)
-
-# These don't have the glue to link with print-rtl.o.
-genprognoprint = mddeps constants conditions
-$(genprognoprint:%=build/gen%$(build_exeext)): $(BUILD_RTL) $(BUILD_SUPPORT) \
- $(BUILD_ERRORS)
+# All these programs use the MD reader ($(BUILD_RTL)).
+genprogmd = attr attrtab codes conditions config constants emit extract \
+ flags mddeps opinit output peep preds recog
+$(genprogmd:%=build/gen%$(build_exeext)): $(BUILD_RTL) $(BUILD_ERRORS)
+# These programs need files over and above what they get from the above list.
+build/genextract$(build_exeext) : build/vec.o
+build/genattrtab$(build_exeext) : build/genautomata.o build/varray.o
+build/genattrtab$(build_exeext) : BUILD_LIBS += -lm
+# These programs are not linked with the MD reader.
build/gengenrtl$(build_exeext) : $(BUILD_ERRORS)
build/genmodes$(build_exeext) : $(BUILD_ERRORS)
-build/genextract$(build_exeext): build/vec.o
-
-# These programs are made from more than one source file.
-# The primary source file comes from the pattern rule above.
-build/genattrtab$(build_exeext) : build/genautomata.o \
- $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) $(BUILD_ERRORS) \
- $(BUILD_VARRAY)
-build/genattrtab$(build_exeext) : BUILD_LIBS += -lm
-
build/gengtype$(build_exeext) : build/gengtype-lex.o \
build/gengtype-yacc.o $(BUILD_ERRORS)
diff --git a/gcc/genattr.c b/gcc/genattr.c
index 0e039e7a4b2..7d6d50fffb0 100644
--- a/gcc/genattr.c
+++ b/gcc/genattr.c
@@ -286,10 +286,3 @@ main (int argc, char **argv)
return SUCCESS_EXIT_CODE;
}
-
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-const char *
-get_insn_name (int code ATTRIBUTE_UNUSED)
-{
- return NULL;
-}
diff --git a/gcc/genattrtab.c b/gcc/genattrtab.c
index 359ddddae10..41dda6bb5da 100644
--- a/gcc/genattrtab.c
+++ b/gcc/genattrtab.c
@@ -4626,10 +4626,3 @@ from the machine description file `md'. */\n\n");
fflush (stdout);
return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
}
-
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-const char *
-get_insn_name (int code ATTRIBUTE_UNUSED)
-{
- return NULL;
-}
diff --git a/gcc/gencodes.c b/gcc/gencodes.c
index adfca88e94f..27a68ad4a26 100644
--- a/gcc/gencodes.c
+++ b/gcc/gencodes.c
@@ -96,11 +96,3 @@ enum insn_code {");
return SUCCESS_EXIT_CODE;
}
-
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-
-const char *
-get_insn_name (int code ATTRIBUTE_UNUSED)
-{
- return NULL;
-}
diff --git a/gcc/genconfig.c b/gcc/genconfig.c
index b92cd2fed9f..93913151084 100644
--- a/gcc/genconfig.c
+++ b/gcc/genconfig.c
@@ -364,10 +364,3 @@ main (int argc, char **argv)
return SUCCESS_EXIT_CODE;
}
-
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-const char *
-get_insn_name (int ARG_UNUSED (code))
-{
- return NULL;
-}
diff --git a/gcc/genemit.c b/gcc/genemit.c
index 691e42c5dd1..e9773082f9e 100644
--- a/gcc/genemit.c
+++ b/gcc/genemit.c
@@ -894,10 +894,3 @@ from the machine description file `md'. */\n\n");
fflush (stdout);
return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
}
-
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-const char *
-get_insn_name (int code ATTRIBUTE_UNUSED)
-{
- return NULL;
-}
diff --git a/gcc/genextract.c b/gcc/genextract.c
index 1fd684228cf..319a0b0bfa9 100644
--- a/gcc/genextract.c
+++ b/gcc/genextract.c
@@ -86,7 +86,6 @@ struct accum_extract
/* Forward declarations. */
static void walk_rtx (rtx, struct accum_extract *);
-static void record_insn_name (int, const char *);
static void
gen_insn (rtx insn, int insn_code_number)
@@ -416,10 +415,7 @@ main (int argc, char **argv)
while ((desc = read_md_rtx (&line_no, &insn_code_number)) != NULL)
{
if (GET_CODE (desc) == DEFINE_INSN)
- {
- record_insn_name (insn_code_number, XSTR (desc, 0));
- gen_insn (desc, insn_code_number);
- }
+ gen_insn (desc, insn_code_number);
else if (GET_CODE (desc) == DEFINE_PEEPHOLE)
{
@@ -493,49 +489,3 @@ main (int argc, char **argv)
fflush (stdout);
return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
}
-
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-
-/* Holds an array of names indexed by insn_code_number. */
-static char **insn_name_ptr = 0;
-static int insn_name_ptr_size = 0;
-
-const char *
-get_insn_name (int code ATTRIBUTE_UNUSED)
-{
- if (code < insn_name_ptr_size)
- return insn_name_ptr[code];
- else
- return NULL;
-}
-
-static void
-record_insn_name (int code, const char *name)
-{
- static const char *last_real_name = "insn";
- static int last_real_code = 0;
- char *new;
-
- if (insn_name_ptr_size <= code)
- {
- int new_size;
- new_size = (insn_name_ptr_size ? insn_name_ptr_size * 2 : 512);
- insn_name_ptr = xrealloc (insn_name_ptr, sizeof(char *) * new_size);
- memset (insn_name_ptr + insn_name_ptr_size, 0,
- sizeof(char *) * (new_size - insn_name_ptr_size));
- insn_name_ptr_size = new_size;
- }
-
- if (!name || name[0] == '\0')
- {
- new = xmalloc (strlen (last_real_name) + 10);
- sprintf (new, "%s+%d", last_real_name, code - last_real_code);
- }
- else
- {
- last_real_name = new = xstrdup (name);
- last_real_code = code;
- }
-
- insn_name_ptr[code] = new;
-}
diff --git a/gcc/genflags.c b/gcc/genflags.c
index 075a355ee72..30e9c7e103a 100644
--- a/gcc/genflags.c
+++ b/gcc/genflags.c
@@ -279,10 +279,3 @@ main (int argc, char **argv)
return SUCCESS_EXIT_CODE;
}
-
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-const char *
-get_insn_name (int ARG_UNUSED (code))
-{
- return NULL;
-}
diff --git a/gcc/genopinit.c b/gcc/genopinit.c
index d9582202b3b..c9cea085852 100644
--- a/gcc/genopinit.c
+++ b/gcc/genopinit.c
@@ -453,10 +453,3 @@ from the machine description file `md'. */\n\n");
fflush (stdout);
return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
}
-
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-const char *
-get_insn_name (int code ATTRIBUTE_UNUSED)
-{
- return NULL;
-}
diff --git a/gcc/genoutput.c b/gcc/genoutput.c
index e94e20f3d16..4a739042599 100644
--- a/gcc/genoutput.c
+++ b/gcc/genoutput.c
@@ -192,28 +192,6 @@ static void gen_split (rtx, int);
static void check_constraint_len (void);
static int constraint_len (const char *, int);
-const char *
-get_insn_name (int index)
-{
- static char buf[100];
-
- struct data *i, *last_named = NULL;
- for (i = idata; i ; i = i->next)
- {
- if (i->index_number == index)
- return i->name;
- if (i->name)
- last_named = i;
- }
-
- if (last_named)
- sprintf(buf, "%s+%d", last_named->name, index - last_named->index_number);
- else
- sprintf(buf, "insn %d", index);
-
- return buf;
-}
-
static void
output_prologue (void)
{
diff --git a/gcc/genpeep.c b/gcc/genpeep.c
index 89da38f1b3b..ad4b5a11351 100644
--- a/gcc/genpeep.c
+++ b/gcc/genpeep.c
@@ -426,10 +426,3 @@ from the machine description file `md'. */\n\n");
fflush (stdout);
return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
}
-
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-const char *
-get_insn_name (int code ATTRIBUTE_UNUSED)
-{
- return NULL;
-}
diff --git a/gcc/genpreds.c b/gcc/genpreds.c
index dd044f771e4..6dbe7d4b920 100644
--- a/gcc/genpreds.c
+++ b/gcc/genpreds.c
@@ -492,10 +492,3 @@ main (int argc, char **argv)
return SUCCESS_EXIT_CODE;
}
-
-/* Dummy for debugging purposes. */
-const char *
-get_insn_name (int code ATTRIBUTE_UNUSED)
-{
- return 0;
-}
diff --git a/gcc/genrecog.c b/gcc/genrecog.c
index 82248482de0..cb86849e936 100644
--- a/gcc/genrecog.c
+++ b/gcc/genrecog.c
@@ -61,10 +61,6 @@
#define OUTPUT_LABEL(INDENT_STRING, LABEL_NUMBER) \
printf("%sL%d: ATTRIBUTE_UNUSED_LABEL\n", (INDENT_STRING), (LABEL_NUMBER))
-/* Holds an array of names indexed by insn_code_number. */
-static char **insn_name_ptr = 0;
-static int insn_name_ptr_size = 0;
-
/* A listhead of decision trees. The alternatives to a node are kept
in a doubly-linked list so we can easily add nodes to the proper
place when merging. */
@@ -473,9 +469,6 @@ static struct decision_head make_insn_sequence
static void process_tree
(struct decision_head *, enum routine_type);
-static void record_insn_name
- (int, const char *);
-
static void debug_decision_0
(struct decision *, int, int);
static void debug_decision_1
@@ -2189,7 +2182,7 @@ write_action (struct decision *p, struct decision_test *test,
indent, test->u.insn.num_clobbers_to_add);
printf ("%sreturn %d; /* %s */\n", indent,
test->u.insn.code_number,
- insn_name_ptr[test->u.insn.code_number]);
+ get_insn_name (test->u.insn.code_number));
break;
case SPLIT:
@@ -2548,8 +2541,6 @@ make_insn_sequence (rtx insn, enum routine_type type)
/* We should never see an insn whose C test is false at compile time. */
gcc_assert (truth);
- record_insn_name (next_insn_code, (type == RECOG ? XSTR (insn, 0) : NULL));
-
c_test_pos[0] = '\0';
if (type == PEEPHOLE2)
{
@@ -2798,47 +2789,6 @@ main (int argc, char **argv)
return (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
}
-/* Define this so we can link with print-rtl.o to get debug_rtx function. */
-const char *
-get_insn_name (int code)
-{
- if (code < insn_name_ptr_size)
- return insn_name_ptr[code];
- else
- return NULL;
-}
-
-static void
-record_insn_name (int code, const char *name)
-{
- static const char *last_real_name = "insn";
- static int last_real_code = 0;
- char *new;
-
- if (insn_name_ptr_size <= code)
- {
- int new_size;
- new_size = (insn_name_ptr_size ? insn_name_ptr_size * 2 : 512);
- insn_name_ptr = xrealloc (insn_name_ptr, sizeof(char *) * new_size);
- memset (insn_name_ptr + insn_name_ptr_size, 0,
- sizeof(char *) * (new_size - insn_name_ptr_size));
- insn_name_ptr_size = new_size;
- }
-
- if (!name || name[0] == '\0')
- {
- new = xmalloc (strlen (last_real_name) + 10);
- sprintf (new, "%s+%d", last_real_name, code - last_real_code);
- }
- else
- {
- last_real_name = new = xstrdup (name);
- last_real_code = code;
- }
-
- insn_name_ptr[code] = new;
-}
-
static void
debug_decision_2 (struct decision_test *test)
{
diff --git a/gcc/gensupport.c b/gcc/gensupport.c
index 94d27aca975..bbac33a2c88 100644
--- a/gcc/gensupport.c
+++ b/gcc/gensupport.c
@@ -118,6 +118,7 @@ static void process_define_cond_exec (void);
static void process_include (rtx, int);
static char *save_string (const char *, int);
static void init_predicate_table (void);
+static void record_insn_name (int, const char *);
void
message_with_line (int lineno, const char *msg, ...)
@@ -1104,6 +1105,10 @@ read_md_rtx (int *lineno, int *seqnr)
sequence_num++;
else if (insn_elision)
goto discard;
+
+ /* *seqnr is used here so the name table will match caller's
+ idea of insn numbering, whether or not elision is active. */
+ record_insn_name (*seqnr, XSTR (desc, 0));
break;
case DEFINE_SPLIT:
@@ -1373,3 +1378,50 @@ init_predicate_table (void)
add_predicate (pred);
}
}
+
+/* These functions allow linkage with print-rtl.c. Also, some generators
+ like to annotate their output with insn names. */
+
+/* Holds an array of names indexed by insn_code_number. */
+static char **insn_name_ptr = 0;
+static int insn_name_ptr_size = 0;
+
+const char *
+get_insn_name (int code)
+{
+ if (code < insn_name_ptr_size)
+ return insn_name_ptr[code];
+ else
+ return NULL;
+}
+
+static void
+record_insn_name (int code, const char *name)
+{
+ static const char *last_real_name = "insn";
+ static int last_real_code = 0;
+ char *new;
+
+ if (insn_name_ptr_size <= code)
+ {
+ int new_size;
+ new_size = (insn_name_ptr_size ? insn_name_ptr_size * 2 : 512);
+ insn_name_ptr = xrealloc (insn_name_ptr, sizeof(char *) * new_size);
+ memset (insn_name_ptr + insn_name_ptr_size, 0,
+ sizeof(char *) * (new_size - insn_name_ptr_size));
+ insn_name_ptr_size = new_size;
+ }
+
+ if (!name || name[0] == '\0')
+ {
+ new = xmalloc (strlen (last_real_name) + 10);
+ sprintf (new, "%s+%d", last_real_name, code - last_real_code);
+ }
+ else
+ {
+ last_real_name = new = xstrdup (name);
+ last_real_code = code;
+ }
+
+ insn_name_ptr[code] = new;
+}