diff options
author | bonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-03 08:35:33 +0000 |
---|---|---|
committer | bonzini <bonzini@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-03-03 08:35:33 +0000 |
commit | 6720e96c010817b0078e02afb7017d0e476a9bc3 (patch) | |
tree | 79c63a2ca1f9598f1822ace38905a1fe19aeb364 /gcc/rtl.h | |
parent | 134014561bfc102c2a13cf4e95c90bfe6c532166 (diff) | |
download | ppe42-gcc-6720e96c010817b0078e02afb7017d0e476a9bc3.tar.gz ppe42-gcc-6720e96c010817b0078e02afb7017d0e476a9bc3.zip |
2004-02-07 Paolo Bonzini <bonzini@gnu.org>
* alias.c (rtx_equal_for_memref_p): Use predicates
to test rtx classes and new rtx class codes, possibly
splitting conditionals that tested against '<' and 'o'.
* caller-save.c (save_call_clobbered_regs): Likewise.
* combine.c (contains_muldiv, find_split_point, subst,
combine_simplify_rtx, simplify_if_then_else,
simplify_set, simplify_logical, expand_compound_operation,
make_compound_operation, if_then_else_cond, known_cond,
apply_distributive_law, cached_nonzero_bits,
cached_num_sign_bit_copies, simplify_shift_const,
gen_binary, simplify_comparison, update_table_tick,
record_value_for_reg, get_lsat_value_validate): Likewise.
* cse.c (mention_regs, find_best_addr, find_comparison_args,
fold_rtx, cse_insn, invalidate_memory, cse_basic_block):
Likewise.
* emit-rtl.c (copy_insn_1): Likewise.
* expr.c (force_operand): Likewise.
* final.c (final_scan_insn, get_mem_expr_from_op): Likewise.
* flow.c (notice_stack_pointer_modification_1,
invalidate_mems_from_autoinc, ior_reg_cond, not_reg_cond,
and_reg_cond, elim_reg_cond): Likewise.
* function.c (update_epilogue_consts): Likewise.
* genattrtab.c (attr_rtx_1): Likewise.
* genopinit.c (gen_insn): Likewise.
* integrate.c (subst_constants): Likewise.
* jump.c (reversed_comparison_code_parts,
reversed_comparison_code, delete_related_insns,
rtx_renumbered_equal_p): Likewise.
* local-alloc.c (block_alloc): Likewise.
* loop.c (rtx_equal_for_prefetch_p, maybe_eliminate_biv,
canonicalize_condition): Likewise.
* loop-iv.c (simplify_using_conditions, iv_number_of_iterations):
Likewise.
* optabs.c (add_equal_node, expand_binop): Likewise.
* predict.c (estimate_probability): Likewise.
* ra-debug.c (ra_print_rtx_2op, ra_print_rtx): Likewise.
* recog.c (validate_replace_rtx_1, comparison_operator,
offsettable_address_p, constrain_operands): Likewise.
* reg-stack.c (swap_rtx_condition_1, subst_stack_regs_pat):
Likewise.
* regclass.c (scan_one_insn): Likewise.
* regmove.c (stable_and_no_regs_but_for_p): Likewise.
* regrename.c (kill_autoinc_value): Likewise.
* reload.c (find_reusable_reload, find_reloads,
reg_overlap_mentioned_for_reload_p): Likewise.
* reload1.c (gen_reload, delete_address_reloads_1): Likewise.
* rtl.c (copy_rtx): Likewise.
* rtl.h (CONSTANT_P, INSN_P): Likewise.
* rtlanal.c (commutative_operand_precedence): Likewise.
* sched-deps.c (conditions_mutex_p): Likewise.
* sched-rgn.c (is_cfg_nonregular): Likewise.
* simplify-rtx.c (simplify_gen_binary,
simplify_gen_relational, simplify_replace_rtx,
simplify_unary_operation, simplify_binary_operation,
simplify_ternary_operation, simplify_rtx): Likewise.
* unroll.c (reg_dead_after_loop): Likewise.
* config/alpha/alpha.c (alpha_swapped_comparison_operator,
print_operand): Likewise.
* config/arc/arc.c (proper_comparison_operator): Likewise.
* config/arm/arm.c (arm_arm_address_cost, arm_select_cc_mode):
Likewise.
* config/avr/avr.c (_reg_unused_after): Likewise.
* config/frv/frv.c (frv_ifcvt_modify_tests,
frv_ifcvt_modify_insn, frv_pack_insn): Likewise.
* config/i386/i386.c (ix86_comparison_operator,
ix86_carry_flag_operator, fcmov_comparison_operator,
arith_or_logical_operator, print_operand,
ix86_expand_binary_operator, ix86_binary_operator_ok):
Likewise.
* config/i386/i386.md: Likewise.
* config/ia64/ia64.c (not_postinc_memory_operand,
ia64_print_operand, update_set_flags, errata_emit_nops):
Likewise.
* config/ia64/ia64.h (PREFERRED_RELOAD_CLASS,
CONSTRAINT_OK_FOR_S): Likewise.
* config/ip2k/ip2k.c (mdr_resequence_xy_yx,
mdr_try_move_dp_reload, ip2k_check_can_adjust_stack_ref,
ip2k_xexp_not_uses_reg_for_mem, ip2k_xexp_not_uses_reg_p,
ip2k_composite_xexp_not_uses_reg_p, ip2k_unary_operator):
Likewise.
* config/iq2000/iq2000.c (cmp_op, symbolic_expression_p,
eqne_comparison_operator, signed_comparison_operator):
Likewise.
* config/mips/mips.c (cmp_op, symbolic_expression_p):
Likewise.
* config/mmix/mmix (mmix_foldable_comparison_operator,
mmix_comparison_operator): Likewise.
* config/pa/pa.c (hppa_legitimize_address): Likewise.
* config/rs6000/rs6000.c (stmw_operation,
branch_comparison_operator, trap_comparison_operator,
ccr_bit): Likewise.
* config/rs6000/rs6000.h (SELECT_CC_MODE): Likewise.
* config/s390/s390.c (s390_alc_comparison,
s390_slb_comparison):L Likewise.
* config/sh/sh.c (gen_block_redirect, reg_unused_after):
Likewise.
* config/sparc/sparc.c (eq_or_neq, normal_comp_operator,
noov_compare_op, noov_compare64_op, v9_regcmp_op,
emit_hard_tfmode_operation, reg_unused_after)
* doc/md.texi, doc/rtl.texi: Likewise.
* ra-debug.c: Add 2004 to list of copyright years.
* unroll.c: Likewise.
* combine.c (simplify_logical): Remove dummy test,
(apply_distributive_law): Fix typo in comment.
GET_CODE (x) == AND so x is a commutative binary op.
* jump.c (delete_related_insns): simplify loop
condition, move testing of RTX codes inside the loop.
(rtx_renumbered_equal_p): do not use RTX_CODE.
* rtl.c (rtx_class): Declare as enum rtx_class.
* rtl.def (EQ, NE, UNEQ, LTGT, UNORDERED, ORDERED):
Move to RTX_COMM_COMPARE class.
(HIGH, SYMBOL_REF, LABEL_REF, CONST, CONST_INT, CONST_DOUBLE):
Move to RTX_CONST_OBJ class.
* rtl.h (enum rtx_class): New declaration,
(RTX_OBJ_MASK, RTX_OBJ_RESULT, RTX_COMPARE_MASK,
RTX_COMPARE_RESULT, RTX_ARITHMETIC_MASK, RTX_ARITHMETIC_RESULT,
RTX_BINARY_MASK, RTX_BINARY_RESULT, RTX_COMMUTATIVE_MASK,
RTX_COMMUTATIVE_RESULT, RTX_NON_COMMUTATIVE_RESULT,
RTX_EXPR_FIRST, RTX_EXPR_LAST, UNARY_P, BINARY_P,
ARITHMETIC_P, COMMUTATIVE_ARITHMETIC_P, COMPARISON_P,
SWAPPABLE_OPERANDS_P, NON_COMMUTATIVE_P, COMMUTATIVE_P,
OBJECT_P): New macros.
* config/sparc/sparc.c (noov_compare_op): Remove register
from parameter.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78824 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/rtl.h')
-rw-r--r-- | gcc/rtl.h | 107 |
1 files changed, 100 insertions, 7 deletions
diff --git a/gcc/rtl.h b/gcc/rtl.h index c2384fd93b2..3cec0c466fb 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -52,6 +52,48 @@ enum rtx_code { #define NUM_RTX_CODE ((int) LAST_AND_UNUSED_RTX_CODE) /* The cast here, saves many elsewhere. */ +/* Register Transfer Language EXPRESSIONS CODE CLASSES */ + +enum rtx_class { + /* We check bit 0-1 of some rtx class codes in the predicates below. */ + + /* Bit 0 = comparison if 0, arithmetic is 1 + Bit 1 = 1 if commutative. */ + RTX_COMPARE, /* 0 */ + RTX_COMM_COMPARE, + RTX_BIN_ARITH, + RTX_COMM_ARITH, + + /* Must follow the four preceding values. */ + RTX_UNARY, /* 4 */ + + RTX_EXTRA, + RTX_MATCH, + RTX_INSN, + + /* Bit 0 = 1 if constant. */ + RTX_OBJ, /* 8 */ + RTX_CONST_OBJ, + + RTX_TERNARY, + RTX_BITFIELD_OPS, + RTX_AUTOINC +}; + +#define RTX_OBJ_MASK (~1) +#define RTX_OBJ_RESULT (RTX_OBJ & RTX_OBJ_MASK) +#define RTX_COMPARE_MASK (~1) +#define RTX_COMPARE_RESULT (RTX_COMPARE & RTX_COMPARE_MASK) +#define RTX_ARITHMETIC_MASK (~1) +#define RTX_ARITHMETIC_RESULT (RTX_COMM_ARITH & RTX_ARITHMETIC_MASK) +#define RTX_BINARY_MASK (~3) +#define RTX_BINARY_RESULT (RTX_COMPARE & RTX_BINARY_MASK) +#define RTX_COMMUTATIVE_MASK (~2) +#define RTX_COMMUTATIVE_RESULT (RTX_COMM_COMPARE & RTX_COMMUTATIVE_MASK) +#define RTX_NON_COMMUTATIVE_RESULT (RTX_COMPARE & RTX_COMMUTATIVE_MASK) +#define RTX_EXPR_FIRST (RTX_COMPARE) +#define RTX_EXPR_LAST (RTX_UNARY) + extern const unsigned char rtx_length[NUM_RTX_CODE]; #define GET_RTX_LENGTH(CODE) (rtx_length[(int) (CODE)]) @@ -61,7 +103,7 @@ extern const char * const rtx_name[NUM_RTX_CODE]; extern const char * const rtx_format[NUM_RTX_CODE]; #define GET_RTX_FORMAT(CODE) (rtx_format[(int) (CODE)]) -extern const char rtx_class[NUM_RTX_CODE]; +extern const enum rtx_class rtx_class[NUM_RTX_CODE]; #define GET_RTX_CLASS(CODE) (rtx_class[(int) (CODE)]) extern const unsigned char rtx_size[NUM_RTX_CODE]; @@ -288,15 +330,69 @@ struct rtvec_def GTY(()) { (JUMP_P (INSN) && (GET_CODE (PATTERN (INSN)) == ADDR_VEC || \ GET_CODE (PATTERN (INSN)) == ADDR_DIFF_VEC)) + +/* 1 if X is an insn. */ +#define INSN_P(X) \ + (GET_RTX_CLASS (GET_CODE(X)) == RTX_INSN) + +/* 1 if X is a unary operator. */ + +#define UNARY_P(X) \ + (GET_RTX_CLASS (GET_CODE (X)) == RTX_UNARY) + +/* 1 if X is a binary operator. */ + +#define BINARY_P(X) \ + ((GET_RTX_CLASS (GET_CODE (X)) & RTX_BINARY_MASK) == RTX_BINARY_RESULT) + +/* 1 if X is an arithmetic operator. */ + +#define ARITHMETIC_P(X) \ + ((GET_RTX_CLASS (GET_CODE (X)) & RTX_ARITHMETIC_MASK) \ + == RTX_ARITHMETIC_RESULT) + +/* 1 if X is an arithmetic operator. */ + +#define COMMUTATIVE_ARITH_P(X) \ + (GET_RTX_CLASS (GET_CODE (X)) == RTX_COMM_ARITH) + +/* 1 if X is a commutative arithmetic operator or a comparison operator. + These two are sometimes selected together because it is possible to + swap the two operands. */ + +#define SWAPPABLE_OPERANDS_P(X) \ + ((1 << GET_RTX_CLASS (GET_CODE (X))) \ + & ((1 << RTX_COMM_ARITH) | (1 << RTX_COMM_COMPARE) \ + | (1 << RTX_COMPARE))) + +/* 1 if X is a non-commutative operator. */ + +#define NON_COMMUTATIVE_P(X) \ + ((GET_RTX_CLASS (GET_CODE (X)) & RTX_COMMUTATIVE_MASK) \ + == RTX_NON_COMMUTATIVE_RESULT) + +/* 1 if X is a commutative operator on integers. */ + +#define COMMUTATIVE_P(X) \ + ((GET_RTX_CLASS (GET_CODE (X)) & RTX_COMMUTATIVE_MASK) \ + == RTX_COMMUTATIVE_RESULT) + +/* 1 if X is a relational operator. */ + +#define COMPARISON_P(X) \ + ((GET_RTX_CLASS (GET_CODE (X)) & RTX_COMPARE_MASK) == RTX_COMPARE_RESULT) + /* 1 if X is a constant value that is an integer. */ #define CONSTANT_P(X) \ - (GET_CODE (X) == LABEL_REF || GET_CODE (X) == SYMBOL_REF \ - || GET_CODE (X) == CONST_INT || GET_CODE (X) == CONST_DOUBLE \ - || GET_CODE (X) == CONST || GET_CODE (X) == HIGH \ + (GET_RTX_CLASS (GET_CODE (X)) == RTX_CONST_OBJ \ || GET_CODE (X) == CONST_VECTOR \ || GET_CODE (X) == CONSTANT_P_RTX) +/* 1 if X can be used to represent an object. */ +#define OBJECT_P(X) \ + ((GET_RTX_CLASS (GET_CODE (X)) & RTX_OBJ_MASK) == RTX_OBJ_RESULT) + /* General accessor macros for accessing the fields of an rtx. */ #if defined ENABLE_RTL_CHECKING && (GCC_VERSION >= 2007) @@ -555,9 +651,6 @@ do { \ /* ACCESS MACROS for particular fields of insns. */ -/* Determines whether X is an insn. */ -#define INSN_P(X) (GET_RTX_CLASS (GET_CODE(X)) == 'i') - /* Holds a unique number for each insn. These are not necessarily sequentially increasing. */ #define INSN_UID(INSN) XINT (INSN, 0) |