aboutsummaryrefslogtreecommitdiff
path: root/gcc/gensupport.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@arm.com>2015-07-16 13:52:22 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2015-07-16 13:52:22 +0000
commit5d2d3e43b917f87ce4e8378076888dd03e4c7cc2 (patch)
tree9d8586f4a5e07a89b18a2e4fb2c2f801fafb90b8 /gcc/gensupport.c
parentc9f84f2e1d697a8d6a6e696bd26933ca4a858da0 (diff)
downloadgcc-5d2d3e43b917f87ce4e8378076888dd03e4c7cc2.zip
gcc-5d2d3e43b917f87ce4e8378076888dd03e4c7cc2.tar.gz
gcc-5d2d3e43b917f87ce4e8378076888dd03e4c7cc2.tar.bz2
read-md.h (message_with_line, [...]): Delete.
gcc/ * read-md.h (message_with_line, error_with_line): Delete. * read-md.c (message_with_line, error_with_line): Delete. * gensupport.h: Include read-md.h. (md_rtx_info): New structure. (read_md_rtx): Use it. Return a bool success value. * gensupport.c (read_md_rtx): Likewise. * genattr-common.c (gen_attr): Take an md_rtx_info rather than an rtx. (main): Update after interface changes. * genattr.c (gen_attr): Take an md_rtx_info rather than an rtx. (main): Update after interface changes. * genattrtab.c (insn_code_number): Delete. (optimize_attrs): Add a max_insn_code parameter and use it instead of insn_code_number. (gen_attr): Take an md_rtx_info rather than an rtx and lineno. Use *_at rather than *_with_line functions. (gen_insn): Likewise. (gen_delay): Likewise. (gen_insn_reserv): Likewise. (gen_bypass): Take an md_rtx_info rather than an rtx. (main): Update after interface changes. Use a local max_insn_code variable instead of insn_code_number. * genautomata.c (gen_cpu_unit): Take an md_rtx_info rather than an rtx. Use fatal_at rather than fatal. (gen_query_cpu_unit, gen_bypass, gen_excl_set) (gen_presence_absence_set, gen_presence_set, gen_final_presence_set) (gen_absence_set, gen_final_absence_set, gen_automaton) (gen_automata_option, gen_reserv, gen_insn_reserv): Likewise. (main): Update after interface changes. * gencodes.c (gen_insn): Take an md_rtx_info rather than an rtx and code number. (main): Update after interface changes. * genconditions.c (main): Use new read_md_rtx interface. * genconfig.c (gen_insn): Take an md_rtx_info rather than an rtx. (gen_expand, gen_split, gen_peephole, gen_peephole2): Likewise. (main): Update after interface changes. * genemit.c (insn_code_number, insn_index_number): Delete. (gen_insn): Take an md_rtx_info rather than an rtx and lineno. Use fatal_at rather than fatal. (gen_expand): Take an md_rtx_info rather than an rtx. Use fatal_at rather than fatal. (gen_split): Likewise. (main): Update after interface changes. * genextract.c (line_no): Delete. (gen_insn): Take an md_rtx_info rather than an rtx and lineno. Update call to walk_rtx. (VEC_safe_set_locstr): Add an md_rtx_info argument. Use message_at rather than message_with_line. (walk_rtx): Add an md_rtx_info argument. Update call to VEC_safe_set_locstr. (main): Update after interface changes. * genflags.c (gen_insn): Take an md_rtx_info rather than an rtx and lineno. Use error_at rather than separate message_with_line calls and have_error assignments. (main): Update after interface changes. * genmddump.c (main): Use new read_md_rtx interface. * genopinit.c (insn): Take an md_rtx_info rather than an rtx. (main): Update after interface changes. * genoutput.c (next_code_number): Delete. (gen_insn): Take an md_rtx_info rather than an rtx and lineno. (gen_peephole, gen_expand, gen_split): Likewise. (note_constraint): Likewise. Use *_at rather than *_with_line functions. (main): Update after interface changes. * genpeep.c (gen_peephole): Take an md_rtx_info rather than an rtx and lineno. (main): Update after interface changes. * genpreds.c (process_define_predicate): Take an md_rtx_info rather than an rtx and lineno. (process_define_constraint): Likewise. (process_define_register_constraint): Likewise. (main): Update after interface changes. * genrecog.c (next_insn_code, pattern_lineno): Delete. (validate_pattern): Replace top-level rtx with an md_rtx_info. Use *_at rather than *_with_line functions. (match_pattern_2): Likewise. (match_pattern_1, match_pattern): Add an md_rtx_info parameter. (get_peephole2_pattern): Take an md_rtx_info rather than an rtvec. Use *_at rather than *_with_line functions. * gentarget-def.c (add_insn): New function. (main): Use it. Use new read_md_rtx interface. From-SVN: r225883
Diffstat (limited to 'gcc/gensupport.c')
-rw-r--r--gcc/gensupport.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/gcc/gensupport.c b/gcc/gensupport.c
index d387a53..b7681a2 100644
--- a/gcc/gensupport.c
+++ b/gcc/gensupport.c
@@ -2533,14 +2533,11 @@ init_rtx_reader_args (int argc, char **argv)
return init_rtx_reader_args_cb (argc, argv, 0);
}
-/* The entry point for reading a single rtx from an md file. Return
- the rtx, or NULL if the md file has been fully processed.
- Return the line where the rtx was found in LINENO.
- Return the number of code generating rtx'en read since the start
- of the md file in SEQNR. */
+/* Try to read a single rtx from the file. Return true on success,
+ describing it in *INFO. */
-rtx
-read_md_rtx (int *lineno, int *seqnr)
+bool
+read_md_rtx (md_rtx_info *info)
{
struct queue_elem **queue, *elem;
rtx desc;
@@ -2557,14 +2554,13 @@ read_md_rtx (int *lineno, int *seqnr)
else if (other_queue != NULL)
queue = &other_queue;
else
- return NULL_RTX;
+ return false;
elem = *queue;
*queue = elem->next;
- desc = elem->data;
- read_md_filename = elem->loc.filename;
- *lineno = elem->loc.lineno;
- *seqnr = sequence_num;
+ info->def = elem->data;
+ info->loc = elem->loc;
+ info->index = sequence_num;
free (elem);
@@ -2574,6 +2570,7 @@ read_md_rtx (int *lineno, int *seqnr)
elided patterns are never counted by the sequence numbering; it
is the caller's responsibility, when insn_elision is false, not
to use elided pattern numbers for anything. */
+ desc = info->def;
switch (GET_CODE (desc))
{
case DEFINE_INSN:
@@ -2584,9 +2581,9 @@ read_md_rtx (int *lineno, int *seqnr)
else if (insn_elision)
goto discard;
- /* *seqnr is used here so the name table will match caller's
+ /* info->index 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));
+ record_insn_name (info->index, XSTR (desc, 0));
break;
case DEFINE_SPLIT:
@@ -2595,14 +2592,14 @@ read_md_rtx (int *lineno, int *seqnr)
if (maybe_eval_c_test (XSTR (desc, 1)) != 0)
sequence_num++;
else if (insn_elision)
- goto discard;
+ goto discard;
break;
default:
break;
}
- return desc;
+ return true;
}
/* Helper functions for insn elision. */