Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001 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. */
#ifndef GCC_RTL_H
#define GCC_RTL_H
#undef ABS /* Likewise. */
#undef PC /* Likewise. */
-#ifndef TREE_CODE
-union tree_node;
-#endif
-
/* Value used by some passes to "recognize" noop moves as valid instructions.
*/
#define NOOP_MOVE_INSN_CODE INT_MAX
int rtint;
unsigned int rtuint;
const char *rtstr;
- struct rtx_def *rtx;
- struct rtvec_def *rtvec;
+ rtx rtx;
+ rtvec rtvec;
enum machine_mode rttype;
addr_diff_vec_flags rt_addr_diff_vec_flags;
struct cselib_val_struct *rt_cselib;
struct bitmap_head_def *rtbit;
- union tree_node *rttree;
+ tree rttree;
struct basic_block_def *bb;
} rtunion;
/* RTL expression ("rtx"). */
-typedef struct rtx_def
+struct rtx_def
{
/* The kind of expression this is. */
ENUM_BITFIELD(rtx_code) code: 16;
The number of operands and their types are controlled
by the `code' field, according to rtl.def. */
rtunion fld[1];
-} *rtx;
+};
#define NULL_RTX (rtx) 0
for a variable number of things. The principle use is inside
PARALLEL expressions. */
-typedef struct rtvec_def{
+struct rtvec_def {
int num_elem; /* number of elements */
- struct rtx_def *elem[1];
-} *rtvec;
+ rtx elem[1];
+};
#define NULL_RTVEC (rtvec) 0
throw, nor will it execute a non-local goto. */
REG_EH_REGION,
- /* Indicates that a call is actually a call to rethrow, and specifies the
- rethrow symbol for the region the rethrow is targetting. This provides
- a way to generate the non standard flow edges required for a rethrow. */
- REG_EH_RETHROW,
-
/* Used by haifa-sched to save NOTE_INSN notes across scheduling. */
REG_SAVE_NOTE,
/* Indicates that an indirect jump is a non-local goto instead of a
computed goto. */
- REG_NON_LOCAL_GOTO
+ REG_NON_LOCAL_GOTO,
+
+ /* This kind of note is generated at each to `setjmp',
+ and similar functions that can return twice. */
+ REG_SETJMP,
+
+ /* Indicate calls that always returns. */
+ REG_ALWAYS_RETURN
};
/* The base value for branch probability notes. */
off the end of the function body without a return statement. */
NOTE_INSN_FUNCTION_END,
- /* This kind of note is generated just after each call to `setjmp',
- and similar functions that can return twice. */
- NOTE_INSN_SETJMP,
-
/* This marks the point immediately after the last prologue insn. */
NOTE_INSN_PROLOGUE_END,
#define plus_constant(X,C) plus_constant_wide (X, (HOST_WIDE_INT) (C))
/* In builtins.c */
-extern rtx expand_builtin_expect_jump PARAMS ((union tree_node *, rtx, rtx));
+extern rtx expand_builtin_expect_jump PARAMS ((tree, rtx, rtx));
/* In explow.c */
extern void set_stack_check_libfunc PARAMS ((rtx));
extern rtx gen_rtx PARAMS ((enum rtx_code,
enum machine_mode, ...));
extern rtvec gen_rtvec PARAMS ((int, ...));
-
-/* In other files */
-extern rtx rtx_alloc PARAMS ((RTX_CODE));
-extern rtvec rtvec_alloc PARAMS ((int));
extern rtx copy_insn_1 PARAMS ((rtx));
extern rtx copy_insn PARAMS ((rtx));
/* In rtl.c */
+extern rtx rtx_alloc PARAMS ((RTX_CODE));
+extern rtvec rtvec_alloc PARAMS ((int));
extern rtx copy_rtx PARAMS ((rtx));
/* In emit-rtl.c */
HOST_WIDE_INT, int));
extern rtx assign_stack_temp PARAMS ((enum machine_mode,
HOST_WIDE_INT, int));
-extern rtx assign_temp PARAMS ((union tree_node *,
- int, int, int));
+extern rtx assign_temp PARAMS ((tree, int, int, int));
/* In emit-rtl.c */
extern rtx emit_insn_before PARAMS ((rtx, rtx));
extern rtx emit_jump_insn_before PARAMS ((rtx, rtx));
extern void cleanup_barriers PARAMS ((void));
/* In jump.c */
-extern rtx squeeze_notes PARAMS ((rtx, rtx));
+extern void squeeze_notes PARAMS ((rtx *, rtx *));
extern rtx delete_insn PARAMS ((rtx));
extern void delete_jump PARAMS ((rtx));
extern void delete_barrier PARAMS ((rtx));
extern rtx avoid_constant_pool_reference PARAMS ((rtx));
/* In function.c */
-extern rtx gen_mem_addressof PARAMS ((rtx, union tree_node *));
+extern rtx gen_mem_addressof PARAMS ((rtx, tree));
/* In regclass.c */
extern enum machine_mode choose_hard_reg_mode PARAMS ((unsigned int,
extern int reg_referenced_between_p PARAMS ((rtx, rtx, rtx));
extern int reg_set_between_p PARAMS ((rtx, rtx, rtx));
extern int regs_set_between_p PARAMS ((rtx, rtx, rtx));
+extern int commutative_operand_precedence PARAMS ((rtx));
extern int swap_commutative_operands_p PARAMS ((rtx, rtx));
extern int modified_between_p PARAMS ((rtx, rtx, rtx));
extern int no_labels_between_p PARAMS ((rtx, rtx));
extern rtx find_next_ref PARAMS ((rtx, rtx));
-extern rtx output_constant_def PARAMS ((union tree_node *, int));
-extern rtx immed_real_const PARAMS ((union tree_node *));
+extern rtx output_constant_def PARAMS ((tree, int));
+extern rtx immed_real_const PARAMS ((tree));
/* Define a default value for STORE_FLAG_VALUE. */
extern int simplejump_p PARAMS ((rtx));
extern int returnjump_p PARAMS ((rtx));
extern int onlyjump_p PARAMS ((rtx));
+extern int only_sets_cc0_p PARAMS ((rtx));
extern int sets_cc0_p PARAMS ((rtx));
extern int invert_jump_1 PARAMS ((rtx, rtx));
extern int invert_jump PARAMS ((rtx, rtx, int));
LCT_CONST_MAKE_BLOCK = 3,
LCT_PURE_MAKE_BLOCK = 4,
LCT_NORETURN = 5,
- LCT_THROW = 6
+ LCT_THROW = 6,
+ LCT_ALWAYS_RETURN = 7
};
extern void emit_library_call PARAMS ((rtx, enum libcall_type,
#define abort() fancy_abort (__FILE__, __LINE__, __FUNCTION__)
/* In alias.c */
+extern void clear_reg_alias_info PARAMS ((rtx));
extern rtx canon_rtx PARAMS ((rtx));
extern int true_dependence PARAMS ((rtx, enum machine_mode, rtx,
int (*)(rtx, int)));
/* In predict.c */
extern void invert_br_probabilities PARAMS ((rtx));
+extern bool expensive_function_p PARAMS ((int));
#endif /* ! GCC_RTL_H */