diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2014-06-04 17:34:40 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2014-06-04 17:34:40 +0000 |
commit | 1145837df5c8c6c7664551878d216671ecf8ef6e (patch) | |
tree | d9fb5507a542d8ccc1d218346a802396dd5c276c /gcc/recog.h | |
parent | 5f2e0797aeb67a52d1b71859e054f55d1cd24ec7 (diff) | |
download | gcc-1145837df5c8c6c7664551878d216671ecf8ef6e.zip gcc-1145837df5c8c6c7664551878d216671ecf8ef6e.tar.gz gcc-1145837df5c8c6c7664551878d216671ecf8ef6e.tar.bz2 |
recog.h (operand_alternative): Convert reg_class, reject, matched and matches into bitfields.
gcc/
* recog.h (operand_alternative): Convert reg_class, reject,
matched and matches into bitfields.
(preprocess_constraints): New overload.
(preprocess_insn_constraints): New function.
(preprocess_constraints): Take the insn as parameter.
(recog_op_alt): Change into a pointer.
(target_recog): Add x_op_alt.
* recog.c (asm_op_alt): New variable.
(recog_op_alt): Change into a pointer.
(preprocess_constraints): New overload, replacing the old function
definition with one that doesn't use global state.
(preprocess_insn_constraints): New function.
(preprocess_constraints): Use them. Take the insn as parameter.
Use asm_op_alt for asms.
(recog_init): Free existing x_op_alt entries.
* ira-lives.c (check_and_make_def_conflict): Make operand_alternative
pointer const.
(make_early_clobber_and_input_conflicts): Likewise.
(process_bb_node_lives): Pass the insn to process_constraints.
* reg-stack.c (check_asm_stack_operands): Likewise.
(subst_asm_stack_regs): Likewise.
* regcprop.c (copyprop_hardreg_forward_1): Likewise.
* regrename.c (build_def_use): Likewise.
* sched-deps.c (sched_analyze_insn): Likewise.
* sel-sched.c (get_reg_class, implicit_clobber_conflict_p): Likewise.
* config/arm/arm.c (xscale_sched_adjust_cost): Likewise.
(note_invalid_constants): Likewise.
* config/i386/i386.c (ix86_legitimate_combined_insn): Likewise.
(ix86_legitimate_combined_insn): Make operand_alternative pointer
const.
From-SVN: r211240
Diffstat (limited to 'gcc/recog.h')
-rw-r--r-- | gcc/recog.h | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/gcc/recog.h b/gcc/recog.h index 3dae18b..2017c85 100644 --- a/gcc/recog.h +++ b/gcc/recog.h @@ -46,18 +46,18 @@ struct operand_alternative const char *constraint; /* The register class valid for this alternative (possibly NO_REGS). */ - enum reg_class cl; + ENUM_BITFIELD (reg_class) cl : 16; /* "Badness" of this alternative, computed from number of '?' and '!' characters in the constraint string. */ - unsigned int reject; + unsigned int reject : 16; /* -1 if no matching constraint was found, or an operand number. */ - int matches; + int matches : 8; /* The same information, but reversed: -1 if this operand is not matched by any other, or the operand number of the operand that matches this one. */ - int matched; + int matched : 8; /* Nonzero if '&' was found in the constraint string. */ unsigned int earlyclobber:1; @@ -77,6 +77,8 @@ struct operand_alternative /* Nonzero if 'X' was found in the constraint string, or if the constraint string for this alternative was empty. */ unsigned int anything_ok:1; + + unsigned int unused : 8; }; /* Return the class for operand I of alternative ALT, taking matching @@ -142,7 +144,10 @@ extern void insn_extract (rtx); extern void extract_insn (rtx); extern void extract_constrain_insn_cached (rtx); extern void extract_insn_cached (rtx); -extern void preprocess_constraints (void); +extern void preprocess_constraints (int, int, const char **, + operand_alternative *); +extern const operand_alternative *preprocess_insn_constraints (int); +extern void preprocess_constraints (rtx); extern rtx peep2_next_insn (int); extern int peep2_regno_dead_p (int, int); extern int peep2_reg_dead_p (int, rtx); @@ -264,8 +269,7 @@ struct recog_data_d extern struct recog_data_d recog_data; -extern struct operand_alternative recog_op_alt[MAX_RECOG_OPERANDS - * MAX_RECOG_ALTERNATIVES]; +extern const operand_alternative *recog_op_alt; /* Return a pointer to an array in which index OP describes the constraints on operand OP of the current instruction alternative (which_alternative). @@ -396,6 +400,7 @@ extern int peep2_current_count; struct target_recog { bool x_initialized; alternative_mask x_enabled_alternatives[LAST_INSN_CODE]; + operand_alternative *x_op_alt[LAST_INSN_CODE]; }; extern struct target_recog default_target_recog; |