ira.c tidies: validate_equiv_mem_from_store
authorAlan Modra <amodra@gmail.com>
Fri, 29 Apr 2016 23:57:33 +0000 (09:27 +0930)
committerAlan Modra <amodra@gcc.gnu.org>
Fri, 29 Apr 2016 23:57:33 +0000 (09:27 +0930)
* ira.c (struct equiv_mem_data): New.
(equiv_mem, equiv_mem_modified): Delete static vars.
(validate_equiv_mem_from_store): Use "data" param to communicate..
(validate_equiv_mem): ..from here.

From-SVN: r235658

gcc/ChangeLog
gcc/ira.c

index 0065a2c944d82e838e6b8da4a970dcbfe5088a4c..47b86f1b0794cad11fed128051e20c10a41be25d 100644 (file)
@@ -1,3 +1,10 @@
+2016-04-30  Alan Modra  <amodra@gmail.com>
+
+       * ira.c (struct equiv_mem_data): New.
+       (equiv_mem, equiv_mem_modified): Delete static vars.
+       (validate_equiv_mem_from_store): Use "data" param to communicate..
+       (validate_equiv_mem): ..from here.
+
 2016-04-30  Alan Modra  <amodra@gmail.com>
 
        * ira.c (add_store_equivs, combine_and_move_insns): New functions,
index e10a2fd4ac606674b4a4e2df98740da5e349b6c4..8ef780a335468fc7077e697b9b179774615e8a42 100644 (file)
--- a/gcc/ira.c
+++ b/gcc/ira.c
@@ -2926,24 +2926,29 @@ struct equivalence
    structure for that register.  */
 static struct equivalence *reg_equiv;
 
-/* Used for communication between the following two functions: contains
-   a MEM that we wish to ensure remains unchanged.  */
-static rtx equiv_mem;
+/* Used for communication between the following two functions.  */
+struct equiv_mem_data
+{
+  /* A MEM that we wish to ensure remains unchanged.  */
+  rtx equiv_mem;
 
-/* Set nonzero if EQUIV_MEM is modified.  */
-static int equiv_mem_modified;
+  /* Set true if EQUIV_MEM is modified.  */
+  bool equiv_mem_modified;
+};
 
 /* If EQUIV_MEM is modified by modifying DEST, indicate that it is modified.
    Called via note_stores.  */
 static void
 validate_equiv_mem_from_store (rtx dest, const_rtx set ATTRIBUTE_UNUSED,
-                              void *data ATTRIBUTE_UNUSED)
+                              void *data)
 {
+  struct equiv_mem_data *info = (struct equiv_mem_data *) data;
+
   if ((REG_P (dest)
-       && reg_overlap_mentioned_p (dest, equiv_mem))
+       && reg_overlap_mentioned_p (dest, info->equiv_mem))
       || (MEM_P (dest)
-         && anti_dependence (equiv_mem, dest)))
-    equiv_mem_modified = 1;
+         && anti_dependence (info->equiv_mem, dest)))
+    info->equiv_mem_modified = true;
 }
 
 /* Verify that no store between START and the death of REG invalidates
@@ -2957,16 +2962,14 @@ validate_equiv_mem (rtx_insn *start, rtx reg, rtx memref)
 {
   rtx_insn *insn;
   rtx note;
-
-  equiv_mem = memref;
-  equiv_mem_modified = 0;
+  struct equiv_mem_data info = { memref, false };
 
   /* If the memory reference has side effects or is volatile, it isn't a
      valid equivalence.  */
   if (side_effects_p (memref))
     return 0;
 
-  for (insn = start; insn && ! equiv_mem_modified; insn = NEXT_INSN (insn))
+  for (insn = start; insn; insn = NEXT_INSN (insn))
     {
       if (! INSN_P (insn))
        continue;
@@ -2982,7 +2985,9 @@ validate_equiv_mem (rtx_insn *start, rtx reg, rtx memref)
       if (CALL_P (insn))
        return 0;
 
-      note_stores (PATTERN (insn), validate_equiv_mem_from_store, NULL);
+      note_stores (PATTERN (insn), validate_equiv_mem_from_store, &info);
+      if (info.equiv_mem_modified)
+       return 0;
 
       /* If a register mentioned in MEMREF is modified via an
         auto-increment, we lose the equivalence.  Do the same if one