OSDN Git Service

* optabs.h (OTI_flodiv, flodiv_optab): Kill.
[pf3gnuchains/gcc-fork.git] / gcc / recog.h
index 01c1d0a..6b4c90a 100644 (file)
@@ -1,5 +1,6 @@
 /* Declarations for interface to insn recognizer and insn-output.c.
-   Copyright (C) 1987, 96-99, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1987, 1996, 1997, 1998, 1999, 2000, 2001
+   Free Software Foundation, Inc.
 
 This file is part of GNU CC.
 
@@ -20,6 +21,8 @@ Boston, MA 02111-1307, USA.  */
 
 /* Random number that should be large enough for all purposes.  */
 #define MAX_RECOG_ALTERNATIVES 30
+#define recog_memoized(I) (INSN_CODE (I) >= 0 \
+                          ? INSN_CODE (I) : recog_memoized_1 (I))
 
 /* Types of operands.  */
 enum op_type {
@@ -60,6 +63,8 @@ struct operand_alternative
   unsigned int decmem_ok:1;
   /* Nonzero if '>' was found in the constraint string.  */
   unsigned int incmem_ok:1;
+  /* Nonzero if 'p' was found in the constraint string.  */
+  unsigned int is_address:1;
   /* Nonzero if 'X' was found in the constraint string, or if the constraint
      string for this alternative was empty.  */
   unsigned int anything_ok:1;
@@ -68,16 +73,19 @@ struct operand_alternative
 
 extern void init_recog                 PARAMS ((void));
 extern void init_recog_no_volatile     PARAMS ((void));
-extern int recog_memoized              PARAMS ((rtx));
+extern int recog_memoized_1            PARAMS ((rtx));
 extern int check_asm_operands          PARAMS ((rtx));
 extern int asm_operand_ok              PARAMS ((rtx, const char *));
 extern int validate_change             PARAMS ((rtx, rtx *, rtx, int));
+extern int insn_invalid_p              PARAMS ((rtx));
 extern int apply_change_group          PARAMS ((void));
 extern int num_validated_changes       PARAMS ((void));
 extern void cancel_changes             PARAMS ((int));
 extern int constrain_operands          PARAMS ((int));
+extern int constrain_operands_cached   PARAMS ((int));
 extern int memory_address_p            PARAMS ((enum machine_mode, rtx));
 extern int strict_memory_address_p     PARAMS ((enum machine_mode, rtx));
+extern int validate_replace_rtx_subexp PARAMS ((rtx, rtx, rtx, rtx *));
 extern int validate_replace_rtx                PARAMS ((rtx, rtx, rtx));
 extern void validate_replace_rtx_group PARAMS ((rtx, rtx, rtx));
 extern int validate_replace_src                PARAMS ((rtx, rtx, rtx));
@@ -112,12 +120,22 @@ extern int mode_dependent_address_p       PARAMS ((rtx));
 
 extern int recog                       PARAMS ((rtx, rtx, int *));
 extern void add_clobbers               PARAMS ((rtx, int));
+extern int added_clobbers_hard_reg_p   PARAMS ((int));
 extern void insn_extract               PARAMS ((rtx));
 extern void extract_insn               PARAMS ((rtx));
+extern void extract_constrain_insn_cached PARAMS ((rtx));
+extern void extract_insn_cached                PARAMS ((rtx));
 extern void preprocess_constraints     PARAMS ((void));
-extern rtx recog_next_insn             PARAMS ((rtx, int));
+extern rtx peep2_next_insn             PARAMS ((int));
+extern int peep2_regno_dead_p          PARAMS ((int, int));
+extern int peep2_reg_dead_p            PARAMS ((int, rtx));
+#ifdef CLEAR_HARD_REG_SET
+extern rtx peep2_find_free_register    PARAMS ((int, int, const char *,
+                                                enum machine_mode,
+                                                HARD_REG_SET *));
+#endif
 extern void peephole2_optimize         PARAMS ((FILE *));
-extern rtx peephole2_insns             PARAMS ((rtx, rtx, rtx *));
+extern rtx peephole2_insns             PARAMS ((rtx, rtx, int *));
 
 /* Nonzero means volatile operands are recognized.  */
 extern int volatile_ok;
@@ -177,6 +195,9 @@ struct recog_data
 
   /* The number of alternatives in the constraints for the insn.  */
   char n_alternatives;
+
+  /* In case we are caching, hold insn data was generated for.  */
+  rtx insn;
 };
 
 extern struct recog_data recog_data;
@@ -185,20 +206,12 @@ extern struct recog_data recog_data;
    Set up by preprocess_constraints.  */
 extern struct operand_alternative recog_op_alt[MAX_RECOG_OPERANDS][MAX_RECOG_ALTERNATIVES];
 
-/* Access the output function for CODE.  */
-
-#define OUT_FCN(CODE) (*insn_data[(int) (CODE)].outfun)
-
 /* A table defined in insn-output.c that give information about
    each insn-code value.  */
 
 typedef int (*insn_operand_predicate_fn) PARAMS ((rtx, enum machine_mode));
 typedef const char * (*insn_output_fn) PARAMS ((rtx *, rtx));
-#ifndef NO_MD_PROTOTYPES
 typedef rtx (*insn_gen_fn) PARAMS ((rtx, ...));
-#else
-typedef rtx (*insn_gen_fn) ();
-#endif
 
 struct insn_operand_data
 {
@@ -206,7 +219,7 @@ struct insn_operand_data
 
   const char *constraint;
 
-  enum machine_mode mode;
+  ENUM_BITFIELD(machine_mode) mode : 16;
 
   char strict_low;