From: Richard Sandiford Date: Wed, 22 Oct 2014 12:01:59 +0000 (+0000) Subject: recog.h (extract_constrain_insn): Declare. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=75d25a02fcd6d85c314700b5b2e03743f1bec04a;p=gcc.git 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f944f765491..5de3d9f58b1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2014-10-22 Richard Sandiford + + * 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 Yury Gribov diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 1ee0eb355c3..40473d00660 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -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; diff --git a/gcc/config/s390/predicates.md b/gcc/config/s390/predicates.md index 883d5cc2d62..237cfa77533 100644 --- a/gcc/config/s390/predicates.md +++ b/gcc/config/s390/predicates.md @@ -406,8 +406,7 @@ if (icode < 0) return false; - extract_insn (insn); - constrain_operands (1); + extract_constrain_insn (insn); return which_alternative >= 0; }) diff --git a/gcc/lra.c b/gcc/lra.c index 6fb35a13fac..6326131d8c3 100644 --- a/gcc/lra.c +++ b/gcc/lra.c @@ -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 diff --git a/gcc/postreload.c b/gcc/postreload.c index c9bb4ae3a35..f460bf3a3a4 100644 --- a/gcc/postreload.c +++ b/gcc/postreload.c @@ -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); diff --git a/gcc/recog.c b/gcc/recog.c index 35cd22c56f7..199c7debbf8 100644 --- a/gcc/recog.c +++ b/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 diff --git a/gcc/recog.h b/gcc/recog.h index df974a91579..d3619cbbe5a 100644 --- a/gcc/recog.h +++ b/gcc/recog.h @@ -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 **, diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index 644ab71e867..88327ece0a1 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -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 (); diff --git a/gcc/regcprop.c b/gcc/regcprop.c index 262de1be046..e935a357204 100644 --- a/gcc/regcprop.c +++ b/gcc/regcprop.c @@ -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); } } diff --git a/gcc/regrename.c b/gcc/regrename.c index 7b9ca45fd1b..26bc8606b27 100644 --- a/gcc/regrename.c +++ b/gcc/regrename.c @@ -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; diff --git a/gcc/sel-sched.c b/gcc/sel-sched.c index 9b2be733279..377e1e9b5f6 100644 --- a/gcc/sel-sched.c +++ b/gcc/sel-sched.c @@ -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;