X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Frecog.h;h=f2b1f6e44048c3142d4ebd2fb2b52a39fab9119b;hb=8d40ea4504ee85e1a6b73103edb1776141d5d22e;hp=e8b25e65ce1f3bb663d2a6df35d58038ccdac6a6;hpb=f5ab938764f423d8c01bfd9e9682af87e6be42e7;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/recog.h b/gcc/recog.h index e8b25e65ce1..f2b1f6e4404 100644 --- a/gcc/recog.h +++ b/gcc/recog.h @@ -1,12 +1,12 @@ /* Declarations for interface to insn recognizer and insn-output.c. - Copyright (C) 1987, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 - Free Software Foundation, Inc. + Copyright (C) 1987, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, + 2005, 2006, 2007, 2008, 2009 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 +15,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 +. */ /* Random number that should be large enough for all purposes. */ #define MAX_RECOG_ALTERNATIVES 30 @@ -51,7 +50,8 @@ struct operand_alternative /* Nonzero if '&' was found in the constraint string. */ unsigned int earlyclobber:1; - /* Nonzero if 'm' was found in the constraint string. */ + /* Nonzero if TARGET_MEM_CONSTRAINT was found in the constraint + string. */ unsigned int memory_ok:1; /* Nonzero if 'o' was found in the constraint string. */ unsigned int offmem_ok:1; @@ -72,10 +72,12 @@ struct operand_alternative extern void init_recog (void); extern void init_recog_no_volatile (void); extern int check_asm_operands (rtx); -extern int asm_operand_ok (rtx, const char *); -extern int validate_change (rtx, rtx *, rtx, int); -extern int validate_change_maybe_volatile (rtx, rtx *, rtx); +extern int asm_operand_ok (rtx, const char *, const char **); +extern bool validate_change (rtx, rtx *, rtx, bool); +extern bool validate_unshare_change (rtx, rtx *, rtx, bool); +extern bool canonicalize_change_group (rtx insn, rtx x); extern int insn_invalid_p (rtx); +extern int verify_changes (int); extern void confirm_change_group (void); extern int apply_change_group (void); extern int num_validated_changes (void); @@ -84,16 +86,17 @@ extern int constrain_operands (int); extern int constrain_operands_cached (int); extern int memory_address_p (enum machine_mode, rtx); extern int strict_memory_address_p (enum machine_mode, rtx); -extern int validate_replace_rtx_subexp (rtx, rtx, rtx, rtx *); extern int validate_replace_rtx (rtx, rtx, rtx); +extern int validate_replace_rtx_part (rtx, rtx, rtx *, rtx); +extern int validate_replace_rtx_part_nosimplify (rtx, rtx, rtx *, rtx); extern void validate_replace_rtx_group (rtx, rtx, rtx); extern void validate_replace_src_group (rtx, rtx, rtx); +extern bool validate_simplify_insn (rtx insn); extern int num_changes_pending (void); #ifdef HAVE_cc0 extern int next_insn_tests_no_inequality (rtx); #endif extern int reg_fits_class_p (rtx, enum reg_class, int, enum machine_mode); -extern rtx *find_single_use (rtx, rtx, rtx *); extern int offsettable_memref_p (rtx); extern int offsettable_nonstrict_memref_p (rtx); @@ -118,7 +121,6 @@ extern int peep2_reg_dead_p (int, rtx); extern rtx peep2_find_free_register (int, int, const char *, enum machine_mode, HARD_REG_SET *); #endif -extern void peephole2_optimize (FILE *); extern rtx peephole2_insns (rtx, rtx, int *); extern int store_data_bypass_p (rtx, rtx); @@ -132,7 +134,7 @@ extern int if_test_bypass_p (rtx, rtx); This function is the normal interface to instruction recognition. The automatically-generated function `recog' is normally called - through this one. (The only exception is in combine.c.) */ + through this one. */ static inline int recog_memoized (rtx insn) @@ -143,6 +145,19 @@ recog_memoized (rtx insn) } #endif +/* Skip chars until the next ',' or the end of the string. This is + useful to skip alternatives in a constraint string. */ +static inline const char * +skip_alternative (const char *p) +{ + const char *r = p; + while (*r != '\0' && *r != ',') + r++; + if (*r == ',') + r++; + return r; +} + /* Nonzero means volatile operands are recognized. */ extern int volatile_ok; @@ -202,6 +217,12 @@ struct recog_data /* The number of alternatives in the constraints for the insn. */ char n_alternatives; + /* Specifies whether an insn alternative is enabled using the + `enabled' attribute in the insn pattern definition. For back + ends not using the `enabled' attribute the array fields are + always set to `true' in expand_insn. */ + bool alternative_enabled_p [MAX_RECOG_ALTERNATIVES]; + /* In case we are caching, hold insn data was generated for. */ rtx insn; }; @@ -265,3 +286,4 @@ struct insn_data }; extern const struct insn_data insn_data[]; +extern int peep2_current_count;