X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fgenpeep.c;h=81bd9df64bbd343d35b502e382e1c53d1d7d1796;hb=a27d5d8c791f3c083dc9d145e352e31c852ac729;hp=5e22ec0b0687b57019618f5e0e679734cdb51b06;hpb=1a97be37b9acd218052a467f7b1a26d3be1154f9;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/genpeep.c b/gcc/genpeep.c index 5e22ec0b068..81bd9df64bb 100644 --- a/gcc/genpeep.c +++ b/gcc/genpeep.c @@ -1,12 +1,11 @@ /* Generate code from machine description to perform peephole optimizations. - Copyright (C) 1987, 1989, 1992, 1997, 1998, - 1999, 2000, 2003 Free Software Foundation, Inc. + Copyright (C) 1987-2013 Free Software Foundation, Inc. This file is part of GCC. 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 +Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY @@ -15,9 +14,8 @@ 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 GCC; 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 COPYING3. If not see +. */ #include "bconfig.h" @@ -48,18 +46,13 @@ static int max_opno; static int n_operands; -/* Peephole optimizations get insn codes just like insn patterns. - Count them so we know the code of the define_peephole we are handling. */ - -static int insn_code_number = 0; - -static void gen_peephole (rtx); +static void gen_peephole (rtx, int); static void match_rtx (rtx, struct link *, int); static void print_path (struct link *); static void print_code (RTX_CODE); static void -gen_peephole (rtx peep) +gen_peephole (rtx peep, int insn_code_number) { int ninsns = XVECLEN (peep, 0); int i; @@ -75,13 +68,13 @@ gen_peephole (rtx peep) printf (" do { insn = NEXT_INSN (insn);\n"); printf (" if (insn == 0) goto L%d; }\n", insn_code_number); - printf (" while (GET_CODE (insn) == NOTE\n"); - printf ("\t || (GET_CODE (insn) == INSN\n"); + printf (" while (NOTE_P (insn)\n"); + printf ("\t || (NONJUMP_INSN_P (insn)\n"); printf ("\t && (GET_CODE (PATTERN (insn)) == USE\n"); printf ("\t\t || GET_CODE (PATTERN (insn)) == CLOBBER)));\n"); - printf (" if (GET_CODE (insn) == CODE_LABEL\n\ - || GET_CODE (insn) == BARRIER)\n goto L%d;\n", + printf (" if (LABEL_P (insn)\n\ + || BARRIER_P (insn))\n goto L%d;\n", insn_code_number); } @@ -232,10 +225,6 @@ match_rtx (rtx x, struct link *path, int fail_label) } return; - case ADDRESS: - match_rtx (XEXP (x, 0), path, fail_label); - return; - default: break; } @@ -359,10 +348,7 @@ main (int argc, char **argv) progname = "genpeep"; - if (argc <= 1) - fatal ("no input file name"); - - if (init_md_reader_args (argc, argv) != SUCCESS_EXIT_CODE) + if (!init_rtx_reader_args (argc, argv)) return (FATAL_EXIT_CODE); printf ("/* Generated automatically by the program `genpeep'\n\ @@ -377,45 +363,38 @@ from the machine description file `md'. */\n\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 ("#include \"except.h\"\n"); + printf ("#include \"function.h\"\n"); + printf ("#include \"diagnostic-core.h\"\n"); + printf ("#include \"flags.h\"\n"); + printf ("#include \"tm-constrs.h\"\n\n"); printf ("#ifdef HAVE_peephole\n"); printf ("extern rtx peep_operand[];\n\n"); printf ("#define operands peep_operand\n\n"); - printf ("rtx\npeephole (ins1)\n rtx ins1;\n{\n"); + printf ("rtx\npeephole (rtx ins1)\n{\n"); printf (" rtx insn ATTRIBUTE_UNUSED, x ATTRIBUTE_UNUSED, pat ATTRIBUTE_UNUSED;\n\n"); /* Early out: no peepholes for insns followed by barriers. */ printf (" if (NEXT_INSN (ins1)\n"); - printf (" && GET_CODE (NEXT_INSN (ins1)) == BARRIER)\n"); + printf (" && BARRIER_P (NEXT_INSN (ins1)))\n"); printf (" return 0;\n\n"); /* Read the machine description. */ while (1) { - int line_no, rtx_number = 0; + int line_no; + int insn_code_number; - desc = read_md_rtx (&line_no, &rtx_number); + desc = read_md_rtx (&line_no, &insn_code_number); if (desc == NULL) break; - 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_PEEPHOLE2) - { - insn_code_number++; - } + if (GET_CODE (desc) == DEFINE_PEEPHOLE) + gen_peephole (desc, insn_code_number); } printf (" return 0;\n}\n\n"); @@ -429,10 +408,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; -}