OSDN Git Service

g++.dg/lookup/exception1.C: New test.
[pf3gnuchains/gcc-fork.git] / gcc / rtl.h
index 9aada82..3cab166 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -174,8 +174,9 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"),
      1 in an INSN, JUMP_INSN, or CALL_INSN if insn is in a delay slot and
      from the target of a branch.  Valid from reorg until end of compilation;
      cleared before used.
-     1 in an INSN or related rtx if this insn is dead code.  Valid only during
-     dead-code elimination phase; cleared before use.  */
+     1 in an INSN, JUMP_INSN or CALL_INSN or related rtx if this insn is
+     dead code.  Valid only during dead-code elimination phase; cleared
+     before use.  */
   unsigned int in_struct : 1;
   /* At the end of RTL generation, 1 if this rtx is used.  This is used for
      copying shared structure.  See `unshare_all_rtl'.
@@ -185,7 +186,7 @@ struct rtx_def GTY((chain_next ("RTX_NEXT (&%h)"),
      has used it as the function.  */
   unsigned int used : 1;
   /* Nonzero if this rtx came from procedure integration.
-     1 in a REG means this reg refers to the return value
+     1 in a REG or PARALLEL means this rtx refers to the return value
      of the current function.
      1 in a SYMBOL_REF if the symbol is weak.  */
   unsigned integrated : 1;
@@ -578,7 +579,7 @@ do {                                \
 /* 1 if RTX is an insn that is dead code.  Valid only for dead-code
    elimination phase.  */
 #define INSN_DEAD_CODE_P(RTX)                                          \
-  (RTL_FLAG_CHECK1("INSN_DEAD_CODE_P", (RTX), INSN)->in_struct)
+  (RTL_FLAG_CHECK3("INSN_DEAD_CODE_P", (RTX), INSN, CALL_INSN, JUMP_INSN)->in_struct)
 
 /* 1 if RTX is an insn in a delay slot and is from the target of the branch.
    If the branch insn has INSN_ANNULLED_BRANCH_P set, this insn should only be
@@ -988,9 +989,10 @@ enum label_kind
 #define REGNO(RTX) XCUINT (RTX, 0, REG)
 #define ORIGINAL_REGNO(RTX) X0UINT (RTX, 1)
 
-/* 1 if RTX is a reg that is the current function's return value.  */
+/* 1 if RTX is a reg or parallel that is the current function's return
+   value.  */
 #define REG_FUNCTION_VALUE_P(RTX)                                      \
-  (RTL_FLAG_CHECK1("REG_FUNCTION_VALUE_P", (RTX), REG)->integrated)
+  (RTL_FLAG_CHECK2("REG_FUNCTION_VALUE_P", (RTX), REG, PARALLEL)->integrated)
 
 /* 1 if RTX is a reg that corresponds to a variable declared by the user.  */
 #define REG_USERVAR_P(RTX)                                             \
@@ -1577,6 +1579,7 @@ extern rtx set_unique_reg_note            PARAMS ((rtx, enum reg_note, rtx));
 #define single_set_1(I) single_set_2 (I, PATTERN (I))
 
 extern int rtx_addr_can_trap_p         PARAMS ((rtx));
+extern bool nonzero_address_p          PARAMS ((rtx));
 extern int rtx_unstable_p              PARAMS ((rtx));
 extern int rtx_varies_p                        PARAMS ((rtx, int));
 extern int rtx_addr_varies_p           PARAMS ((rtx, int));
@@ -1836,7 +1839,7 @@ extern rtx gen_lowpart_SUBREG PARAMS ((enum machine_mode, rtx));
 #define VIRTUAL_OUTGOING_ARGS_REGNUM   ((FIRST_VIRTUAL_REGISTER) + 3)
 
 /* This points to the Canonical Frame Address of the function.  This
-   should corrospond to the CFA produced by INCOMING_FRAME_SP_OFFSET,
+   should correspond to the CFA produced by INCOMING_FRAME_SP_OFFSET,
    but is calculated relative to the arg pointer for simplicity; the
    frame pointer nor stack pointer are necessarily fixed relative to
    the CFA until after reload.  */
@@ -2092,6 +2095,7 @@ extern int global_alloc                   PARAMS ((FILE *));
 extern void dump_global_regs           PARAMS ((FILE *));
 #endif
 #ifdef HARD_CONST
+/* Yes, this ifdef is silly, but HARD_REG_SET is not always defined.  */
 extern void retry_global_alloc         PARAMS ((int, HARD_REG_SET));
 #endif
 extern void build_insn_chain           PARAMS ((rtx));
@@ -2109,6 +2113,14 @@ extern void regclass                     PARAMS ((rtx, int, FILE *));
 extern void reg_scan                   PARAMS ((rtx, unsigned int, int));
 extern void reg_scan_update            PARAMS ((rtx, rtx, unsigned int));
 extern void fix_register               PARAMS ((const char *, int, int));
+#ifdef HARD_CONST
+extern void cannot_change_mode_set_regs PARAMS ((HARD_REG_SET *,
+                                                enum machine_mode,
+                                                unsigned int));
+#endif
+extern bool invalid_mode_change_p      PARAMS ((unsigned int,
+                                                enum reg_class,
+                                                enum machine_mode));
 
 extern int delete_null_pointer_checks  PARAMS ((rtx));
 
@@ -2134,7 +2146,7 @@ extern int function_invariant_p           PARAMS ((rtx));
 extern void init_branch_prob           PARAMS ((const char *));
 extern void branch_prob                        PARAMS ((void));
 extern void end_branch_prob            PARAMS ((void));
-extern void output_func_start_profiler PARAMS ((void));
+extern void create_profiler            PARAMS ((void));
 
 /* In reg-stack.c */
 #ifdef BUFSIZ
@@ -2269,4 +2281,38 @@ extern void invert_br_probabilities      PARAMS ((rtx));
 extern bool expensive_function_p       PARAMS ((int));
 /* In tracer.c */
 extern void tracer                     PARAMS ((void));
+
+/* In calls.c */
+
+/* Nonzero if this is a call to a `const' function.  */
+#define ECF_CONST              1
+/* Nonzero if this is a call to a `volatile' function.  */
+#define ECF_NORETURN           2
+/* Nonzero if this is a call to malloc or a related function.  */
+#define ECF_MALLOC             4
+/* Nonzero if it is plausible that this is a call to alloca.  */
+#define ECF_MAY_BE_ALLOCA      8
+/* Nonzero if this is a call to a function that won't throw an exception.  */
+#define ECF_NOTHROW            16
+/* Nonzero if this is a call to setjmp or a related function.  */
+#define ECF_RETURNS_TWICE      32
+/* Nonzero if this is a call to `longjmp'.  */
+#define ECF_LONGJMP            64
+/* Nonzero if this is a syscall that makes a new process in the image of
+   the current one.  */
+#define ECF_FORK_OR_EXEC       128
+#define ECF_SIBCALL            256
+/* Nonzero if this is a call to "pure" function (like const function,
+   but may read memory.  */
+#define ECF_PURE               512
+/* Nonzero if this is a call to a function that returns with the stack
+   pointer depressed.  */
+#define ECF_SP_DEPRESSED       1024
+/* Nonzero if this call is known to always return.  */
+#define ECF_ALWAYS_RETURN      2048
+/* Create libcall block around the call.  */
+#define ECF_LIBCALL_BLOCK      4096
+
+extern int flags_from_decl_or_type             PARAMS ((tree));
+
 #endif /* ! GCC_RTL_H */