mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-27 13:54:19 +08:00
recog.h (extract_constrain_insn): Declare.
gcc/ * recog.h (extract_constrain_insn): Declare. * recog.c (extract_constrain_insn): New function. * lra.c (check_rtl): Use it. * postreload.c (reload_cse_simplify_operands): Likewise. * 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. * sel-sched.c (get_reg_class): Likewise. * config/arm/arm.c (note_invalid_constants): Likewise. * config/s390/predicates.md (execute_operation): Likewise. From-SVN: r216553
This commit is contained in:
parent
d95a270347
commit
75d25a02fc
@ -1,3 +1,17 @@
|
||||
2014-10-22 Richard Sandiford <richard.sandiford@arm.com>
|
||||
|
||||
* recog.h (extract_constrain_insn): Declare.
|
||||
* recog.c (extract_constrain_insn): New function.
|
||||
* lra.c (check_rtl): Use it.
|
||||
* postreload.c (reload_cse_simplify_operands): Likewise.
|
||||
* 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.
|
||||
* sel-sched.c (get_reg_class): Likewise.
|
||||
* config/arm/arm.c (note_invalid_constants): Likewise.
|
||||
* config/s390/predicates.md (execute_operation): Likewise.
|
||||
|
||||
2014-10-22 Jakub Jelinek <jakub@redhat.com>
|
||||
Yury Gribov <y.gribov@samsung.com>
|
||||
|
||||
|
@ -17027,10 +17027,7 @@ note_invalid_constants (rtx_insn *insn, HOST_WIDE_INT address, int do_pushes)
|
||||
{
|
||||
int opno;
|
||||
|
||||
extract_insn (insn);
|
||||
|
||||
if (!constrain_operands (1))
|
||||
fatal_insn_not_found (insn);
|
||||
extract_constrain_insn (insn);
|
||||
|
||||
if (recog_data.n_alternatives == 0)
|
||||
return;
|
||||
|
@ -406,8 +406,7 @@
|
||||
if (icode < 0)
|
||||
return false;
|
||||
|
||||
extract_insn (insn);
|
||||
constrain_operands (1);
|
||||
extract_constrain_insn (insn);
|
||||
|
||||
return which_alternative >= 0;
|
||||
})
|
||||
|
@ -1923,8 +1923,9 @@ check_rtl (bool final_p)
|
||||
{
|
||||
if (final_p)
|
||||
{
|
||||
extract_insn (insn);
|
||||
lra_assert (constrain_operands (1));
|
||||
#ifdef ENABLED_CHECKING
|
||||
extract_constrain_insn (insn);
|
||||
#endif
|
||||
continue;
|
||||
}
|
||||
/* LRA code is based on assumption that all addresses can be
|
||||
|
@ -405,15 +405,11 @@ reload_cse_simplify_operands (rtx_insn *insn, rtx testreg)
|
||||
/* Array of alternatives, sorted in order of decreasing desirability. */
|
||||
int *alternative_order;
|
||||
|
||||
extract_insn (insn);
|
||||
extract_constrain_insn (insn);
|
||||
|
||||
if (recog_data.n_alternatives == 0 || recog_data.n_operands == 0)
|
||||
return 0;
|
||||
|
||||
/* Figure out which alternative currently matches. */
|
||||
if (! constrain_operands (1))
|
||||
fatal_insn_not_found (insn);
|
||||
|
||||
alternative_reject = XALLOCAVEC (int, recog_data.n_alternatives);
|
||||
alternative_nregs = XALLOCAVEC (int, recog_data.n_alternatives);
|
||||
alternative_order = XALLOCAVEC (int, recog_data.n_alternatives);
|
||||
|
11
gcc/recog.c
11
gcc/recog.c
@ -2115,6 +2115,17 @@ extract_insn_cached (rtx_insn *insn)
|
||||
recog_data.insn = insn;
|
||||
}
|
||||
|
||||
/* Do uncached extract_insn, constrain_operands and complain about failures.
|
||||
This should be used when extracting a pre-existing constrained instruction
|
||||
if the caller wants to know which alternative was chosen. */
|
||||
void
|
||||
extract_constrain_insn (rtx_insn *insn)
|
||||
{
|
||||
extract_insn (insn);
|
||||
if (!constrain_operands (reload_completed))
|
||||
fatal_insn_not_found (insn);
|
||||
}
|
||||
|
||||
/* Do cached extract_insn, constrain_operands and complain about failures.
|
||||
Used by insn_attrtab. */
|
||||
void
|
||||
|
@ -134,6 +134,7 @@ extern void add_clobbers (rtx, int);
|
||||
extern int added_clobbers_hard_reg_p (int);
|
||||
extern void insn_extract (rtx_insn *);
|
||||
extern void extract_insn (rtx_insn *);
|
||||
extern void extract_constrain_insn (rtx_insn *insn);
|
||||
extern void extract_constrain_insn_cached (rtx_insn *);
|
||||
extern void extract_insn_cached (rtx_insn *);
|
||||
extern void preprocess_constraints (int, int, const char **,
|
||||
|
@ -474,8 +474,7 @@ check_asm_stack_operands (rtx_insn *insn)
|
||||
|
||||
/* Find out what the constraints require. If no constraint
|
||||
alternative matches, this asm is malformed. */
|
||||
extract_insn (insn);
|
||||
constrain_operands (1);
|
||||
extract_constrain_insn (insn);
|
||||
|
||||
preprocess_constraints (insn);
|
||||
|
||||
@ -2021,8 +2020,7 @@ subst_asm_stack_regs (rtx_insn *insn, stack_ptr regstack)
|
||||
/* Find out what the constraints required. If no constraint
|
||||
alternative matches, that is a compiler bug: we should have caught
|
||||
such an insn in check_asm_stack_operands. */
|
||||
extract_insn (insn);
|
||||
constrain_operands (1);
|
||||
extract_constrain_insn (insn);
|
||||
|
||||
preprocess_constraints (insn);
|
||||
const operand_alternative *op_alt = which_op_alt ();
|
||||
|
@ -767,9 +767,7 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
|
||||
}
|
||||
|
||||
set = single_set (insn);
|
||||
extract_insn (insn);
|
||||
if (! constrain_operands (1))
|
||||
fatal_insn_not_found (insn);
|
||||
extract_constrain_insn (insn);
|
||||
preprocess_constraints (insn);
|
||||
const operand_alternative *op_alt = which_op_alt ();
|
||||
n_ops = recog_data.n_operands;
|
||||
@ -870,9 +868,7 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
|
||||
}
|
||||
/* We need to re-extract as validate_change clobbers
|
||||
recog_data. */
|
||||
extract_insn (insn);
|
||||
if (! constrain_operands (1))
|
||||
fatal_insn_not_found (insn);
|
||||
extract_constrain_insn (insn);
|
||||
preprocess_constraints (insn);
|
||||
}
|
||||
|
||||
@ -898,9 +894,7 @@ copyprop_hardreg_forward_1 (basic_block bb, struct value_data *vd)
|
||||
}
|
||||
/* We need to re-extract as validate_change clobbers
|
||||
recog_data. */
|
||||
extract_insn (insn);
|
||||
if (! constrain_operands (1))
|
||||
fatal_insn_not_found (insn);
|
||||
extract_constrain_insn (insn);
|
||||
preprocess_constraints (insn);
|
||||
}
|
||||
}
|
||||
|
@ -1569,9 +1569,7 @@ build_def_use (basic_block bb)
|
||||
to be marked unrenamable or even cause us to abort the entire
|
||||
basic block. */
|
||||
|
||||
extract_insn (insn);
|
||||
if (! constrain_operands (1))
|
||||
fatal_insn_not_found (insn);
|
||||
extract_constrain_insn (insn);
|
||||
preprocess_constraints (insn);
|
||||
const operand_alternative *op_alt = which_op_alt ();
|
||||
n_ops = recog_data.n_operands;
|
||||
|
@ -998,9 +998,7 @@ get_reg_class (rtx_insn *insn)
|
||||
{
|
||||
int i, n_ops;
|
||||
|
||||
extract_insn (insn);
|
||||
if (! constrain_operands (1))
|
||||
fatal_insn_not_found (insn);
|
||||
extract_constrain_insn (insn);
|
||||
preprocess_constraints (insn);
|
||||
n_ops = recog_data.n_operands;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user