diff options
author | obrien <obrien@FreeBSD.org> | 2002-02-01 18:16:02 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 2002-02-01 18:16:02 +0000 |
commit | c9ab9ae440a8066b2c2b85b157b1fdadcf09916a (patch) | |
tree | 086d9d6c8fbd4fc8fe4495059332f66bc0f8d12b /contrib/gcc/genpeep.c | |
parent | 2ecfd8bd04b63f335c1ec6295740a4bfd97a4fa6 (diff) | |
download | FreeBSD-src-c9ab9ae440a8066b2c2b85b157b1fdadcf09916a.zip FreeBSD-src-c9ab9ae440a8066b2c2b85b157b1fdadcf09916a.tar.gz |
Enlist the FreeBSD-CURRENT users as testers of what is to become Gcc 3.1.0.
These bits are taken from the FSF anoncvs repo on 1-Feb-2002 08:20 PST.
Diffstat (limited to 'contrib/gcc/genpeep.c')
-rw-r--r-- | contrib/gcc/genpeep.c | 172 |
1 files changed, 53 insertions, 119 deletions
diff --git a/contrib/gcc/genpeep.c b/contrib/gcc/genpeep.c index 65ba963..036f688 100644 --- a/contrib/gcc/genpeep.c +++ b/contrib/gcc/genpeep.c @@ -1,37 +1,31 @@ /* Generate code from machine description to perform peephole optimizations. - Copyright (C) 1987, 89, 92, 97, 98, 1999 Free Software Foundation, Inc. + Copyright (C) 1987, 1989, 1992, 1997, 1998, + 1999, 2000 Free Software Foundation, Inc. -This file is part of GNU CC. +This file is part of GCC. -GNU CC is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. +GCC is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. -GNU CC is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. +GCC is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +along with GCC; see the file COPYING. If not, write to the Free +Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. */ #include "hconfig.h" #include "system.h" #include "rtl.h" -#include "obstack.h" +#include "errors.h" +#include "gensupport.h" -static struct obstack obstack; -struct obstack *rtl_obstack = &obstack; - -#define obstack_chunk_alloc xmalloc -#define obstack_chunk_free free - -/* Define this so we can link with print-rtl.o to get debug_rtx function. */ -char **insn_name_ptr = 0; /* While tree-walking an instruction pattern, we keep a chain of these `struct link's to record how to get down to the @@ -46,10 +40,6 @@ struct link int vecelt; }; -void fatal PVPROTO ((const char *, ...)) - ATTRIBUTE_PRINTF_1 ATTRIBUTE_NORETURN; -void fancy_abort PROTO((void)) ATTRIBUTE_NORETURN; - static int max_opno; /* Number of operands used in current peephole definition. */ @@ -61,10 +51,10 @@ static int n_operands; static int insn_code_number = 0; -static void gen_peephole PROTO((rtx)); -static void match_rtx PROTO((rtx, struct link *, int)); -static void print_path PROTO((struct link *)); -static void print_code PROTO((RTX_CODE)); +static void gen_peephole PARAMS ((rtx)); +static void match_rtx PARAMS ((rtx, struct link *, int)); +static void print_path PARAMS ((struct link *)); +static void print_code PARAMS ((RTX_CODE)); static void gen_peephole (peep) @@ -107,7 +97,7 @@ gen_peephole (peep) /* Walk the insn's pattern, remembering at all times the path down to the walking point. */ - match_rtx (XVECEXP (peep, 0, i), NULL_PTR, insn_code_number); + match_rtx (XVECEXP (peep, 0, i), NULL, insn_code_number); } /* We get this far if the pattern matches. @@ -129,7 +119,7 @@ gen_peephole (peep) printf (" if (want_jump && GET_CODE (ins1) != JUMP_INSN)\n"); printf (" {\n"); printf (" rtx insn2 = emit_jump_insn_before (PATTERN (ins1), ins1);\n"); - printf (" delete_insn (ins1);\n"); + printf (" delete_related_insns (ins1);\n"); printf (" ins1 = ins2;\n"); printf (" }\n"); #endif @@ -156,10 +146,10 @@ match_rtx (x, path, fail_label) struct link *path; int fail_label; { - register RTX_CODE code; - register int i; - register int len; - register char *fmt; + RTX_CODE code; + int i; + int len; + const char *fmt; struct link link; if (x == 0) @@ -374,96 +364,29 @@ static void print_code (code) RTX_CODE code; { - register char *p1; + const char *p1; for (p1 = GET_RTX_NAME (code); *p1; p1++) - { - if (*p1 >= 'a' && *p1 <= 'z') - putchar (*p1 + 'A' - 'a'); - else - putchar (*p1); - } -} - -PTR -xmalloc (size) - size_t size; -{ - register PTR val = (PTR) malloc (size); - - if (val == 0) - fatal ("virtual memory exhausted"); - return val; -} - -PTR -xrealloc (old, size) - PTR old; - size_t size; -{ - register PTR ptr; - if (old) - ptr = (PTR) realloc (old, size); - else - ptr = (PTR) malloc (size); - if (!ptr) - fatal ("virtual memory exhausted"); - return ptr; -} - -void -fatal VPROTO ((const char *format, ...)) -{ -#ifndef ANSI_PROTOTYPES - const char *format; -#endif - va_list ap; - - VA_START (ap, format); - -#ifndef ANSI_PROTOTYPES - format = va_arg (ap, const char *); -#endif - - fprintf (stderr, "genpeep: "); - vfprintf (stderr, format, ap); - va_end (ap); - fprintf (stderr, "\n"); - exit (FATAL_EXIT_CODE); + putchar (TOUPPER(*p1)); } -/* More 'friendly' abort that prints the line and file. - config.h can #define abort fancy_abort if you like that sort of thing. */ +extern int main PARAMS ((int, char **)); -void -fancy_abort () -{ - fatal ("Internal gcc abort."); -} - int main (argc, argv) int argc; char **argv; { rtx desc; - FILE *infile; - register int c; max_opno = -1; - obstack_init (rtl_obstack); + progname = "genpeep"; if (argc <= 1) - fatal ("No input file name."); + fatal ("no input file name"); - infile = fopen (argv[1], "r"); - if (infile == 0) - { - perror (argv[1]); - exit (FATAL_EXIT_CODE); - } - - init_rtl (); + if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) + return (FATAL_EXIT_CODE); printf ("/* Generated automatically by the program `genpeep'\n\ from the machine description file `md'. */\n\n"); @@ -472,12 +395,15 @@ from the machine description file `md'. */\n\n"); printf ("#include \"system.h\"\n"); printf ("#include \"insn-config.h\"\n"); printf ("#include \"rtl.h\"\n"); + printf ("#include \"tm_p.h\"\n"); printf ("#include \"regs.h\"\n"); printf ("#include \"output.h\"\n"); printf ("#include \"real.h\"\n"); printf ("#include \"recog.h\"\n"); printf ("#include \"except.h\"\n\n"); + printf ("#include \"function.h\"\n\n"); + printf ("#ifdef HAVE_peephole\n"); printf ("extern rtx peep_operand[];\n\n"); printf ("#define operands peep_operand\n\n"); @@ -493,20 +419,21 @@ from the machine description file `md'. */\n\n"); while (1) { - c = read_skip_spaces (infile); - if (c == EOF) + int line_no, rtx_number = 0; + + desc = read_md_rtx (&line_no, &rtx_number); + if (desc == NULL) break; - ungetc (c, infile); - desc = read_rtx (infile); - if (GET_CODE (desc) == DEFINE_PEEPHOLE) + if (GET_CODE (desc) == DEFINE_PEEPHOLE) { gen_peephole (desc); insn_code_number++; } if (GET_CODE (desc) == DEFINE_INSN || GET_CODE (desc) == DEFINE_EXPAND - || GET_CODE (desc) == DEFINE_SPLIT) + || GET_CODE (desc) == DEFINE_SPLIT + || GET_CODE (desc) == DEFINE_PEEPHOLE2) { insn_code_number++; } @@ -518,9 +445,16 @@ from the machine description file `md'. */\n\n"); max_opno = 1; printf ("rtx peep_operand[%d];\n", max_opno + 1); + printf ("#endif\n"); fflush (stdout); - exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE); - /* NOTREACHED */ - return 0; + 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 (code) + int code ATTRIBUTE_UNUSED; +{ + return NULL; } |