gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Oct 2014 12:01:59 +0000 (12:01 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 22 Oct 2014 12:01:59 +0000 (12:01 +0000)
* 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216553 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/arm/arm.c
gcc/config/s390/predicates.md
gcc/lra.c
gcc/postreload.c
gcc/recog.c
gcc/recog.h
gcc/reg-stack.c
gcc/regcprop.c
gcc/regrename.c
gcc/sel-sched.c

index f944f76..5de3d9f 100644 (file)
@@ -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>
 
index 1ee0eb3..40473d0 100644 (file)
@@ -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;
index 883d5cc..237cfa7 100644 (file)
   if (icode < 0)
     return false;
 
-  extract_insn (insn);
-  constrain_operands (1);
+  extract_constrain_insn (insn);
 
   return which_alternative >= 0;
 })
index 6fb35a1..6326131 100644 (file)
--- 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
index c9bb4ae..f460bf3 100644 (file)
@@ -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);
index 35cd22c..199c7de 100644 (file)
@@ -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
index df974a9..d3619cb 100644 (file)
@@ -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 **,
index 644ab71..88327ec 100644 (file)
@@ -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 ();
index 262de1b..e935a35 100644 (file)
@@ -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);
                }
            }
index 7b9ca45..26bc860 100644 (file)
@@ -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;
index 9b2be73..377e1e9 100644 (file)
@@ -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;