rtlanal.c (refers_to_regno_p): Change return value from int to bool.
authorOleg Endo <olegendo@gcc.gnu.org>
Mon, 5 Jan 2015 22:04:53 +0000 (22:04 +0000)
committerOleg Endo <olegendo@gcc.gnu.org>
Mon, 5 Jan 2015 22:04:53 +0000 (22:04 +0000)
gcc/
* rtlanal.c (refers_to_regno_p): Change return value from int to bool.
* rtl.h (refers_to_regno_p): Add overload.
* cse.c: Use it.
* bt-load.c: Likewise.
* combine.c: Likewise.
* df-scan.c: Likewise.
* sched-deps.c: Likewise.
* config/s390/s390.c: Likewise.
* config/m32r/m32r.c: Likewise.
* config/rs6000/spe.md: Likewise.
* config/rs6000/rs6000.c: Likewise.
* config/pa/pa.c: Likewise.
* config/stormy16/stormy16.c: Likewise.
* config/cris/cris.c: Likewise.
* config/arc/arc.md: Likewise.
* config/arc/arc.c: Likewise.
* config/sh/sh.md: Likewise.
* config/sh/sh.c: Likewise.
* config/frv/frv.c: Likewise.

From-SVN: r219203

20 files changed:
gcc/ChangeLog
gcc/bt-load.c
gcc/combine.c
gcc/config/arc/arc.c
gcc/config/arc/arc.md
gcc/config/cris/cris.c
gcc/config/frv/frv.c
gcc/config/m32r/m32r.c
gcc/config/pa/pa.c
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/spe.md
gcc/config/s390/s390.c
gcc/config/sh/sh.c
gcc/config/sh/sh.md
gcc/config/stormy16/stormy16.c
gcc/cse.c
gcc/df-scan.c
gcc/rtl.h
gcc/rtlanal.c
gcc/sched-deps.c

index 286ec01a4e3f039f74374276ead4634a3bc01621..aaa8cc843e524a604c31c4cae3ab0e6c7423d647 100644 (file)
@@ -1,3 +1,25 @@
+2015-01-05  Oleg Endo  <olegendo@gcc.gnu.org>
+
+       * rtlanal.c (refers_to_regno_p): Change return value from int to bool.
+       * rtl.h (refers_to_regno_p): Add overload.
+       * cse.c: Use it.
+       * bt-load.c: Likewise.
+       * combine.c: Likewise.
+       * df-scan.c: Likewise.
+       * sched-deps.c: Likewise.
+       * config/s390/s390.c: Likewise.
+       * config/m32r/m32r.c: Likewise.
+       * config/rs6000/spe.md: Likewise.
+       * config/rs6000/rs6000.c: Likewise.
+       * config/pa/pa.c: Likewise.
+       * config/stormy16/stormy16.c: Likewise.
+       * config/cris/cris.c: Likewise.
+       * config/arc/arc.md: Likewise.
+       * config/arc/arc.c: Likewise.
+       * config/sh/sh.md: Likewise.
+       * config/sh/sh.c: Likewise.
+       * config/frv/frv.c: Likewise.
+
 2015-01-05  Jakub Jelinek  <jakub@redhat.com>
 
        PR sanitizer/64265
index a114c4cf06e7ed381bf94c20b7814b41c5454a57..6084beb05677067279fdcded805916cba6ca8dff 100644 (file)
@@ -533,8 +533,7 @@ compute_defs_uses_and_gen (btr_heap_t *all_btr_defs, btr_def *def_array,
                          int reg;
                          for (reg = first_btr; reg <= last_btr; reg++)
                            if (TEST_HARD_REG_BIT (all_btrs, reg)
-                               && refers_to_regno_p (reg, reg + 1, user->insn,
-                                                     NULL))
+                               && refers_to_regno_p (reg, user->insn))
                              {
                                note_other_use_this_block (reg,
                                                           info.users_this_bb);
@@ -597,7 +596,7 @@ compute_defs_uses_and_gen (btr_heap_t *all_btr_defs, btr_def *def_array,
          int regno;
 
          for (regno = first_btr; regno <= last_btr; regno++)
-           if (refers_to_regno_p (regno, regno+1, insn, NULL))
+           if (refers_to_regno_p (regno, insn))
              SET_HARD_REG_BIT (btrs_live_at_end[i], regno);
        }
 
@@ -710,8 +709,7 @@ link_btr_uses (btr_def *def_array, btr_user *use_array, sbitmap *bb_out,
                      bitmap_clear (reaching_defs_of_reg);
                      for (reg = first_btr; reg <= last_btr; reg++)
                        if (TEST_HARD_REG_BIT (all_btrs, reg)
-                           && refers_to_regno_p (reg, reg + 1, user->insn,
-                                                 NULL))
+                           && refers_to_regno_p (reg, user->insn))
                          bitmap_or_and (reaching_defs_of_reg,
                            reaching_defs_of_reg,
                            reaching_defs,
index 8d0179457b59842225b53c4af2e2be87e2f64b46..6bdb3f48aeb2d1c5df335a1a202e6d8263c1aea3 100644 (file)
@@ -13842,7 +13842,7 @@ distribute_notes (rtx notes, rtx_insn *from_insn, rtx_insn *i3, rtx_insn *i2,
                  unsigned int i;
 
                  for (i = regno; i < endregno; i++)
-                   if ((! refers_to_regno_p (i, i + 1, PATTERN (place), 0)
+                   if ((! refers_to_regno_p (i, PATTERN (place))
                         && ! find_regno_fusage (place, USE, i))
                        || dead_or_set_regno_p (place, i))
                      {
@@ -13872,8 +13872,7 @@ distribute_notes (rtx notes, rtx_insn *from_insn, rtx_insn *i3, rtx_insn *i2,
                                                NULL, NULL_RTX, NULL_RTX,
                                                NULL_RTX);
                            }
-                         else if (! refers_to_regno_p (i, i + 1,
-                                                       PATTERN (place), 0)
+                         else if (! refers_to_regno_p (i, PATTERN (place))
                                   && ! find_regno_fusage (place, USE, i))
                            for (tem_insn = PREV_INSN (place); ;
                                 tem_insn = PREV_INSN (tem_insn))
index dcca4de26dfc6a9ca1aa1d4cf61cbb6b3be23b39..e22ad2683841ff2295835fed0cd3e671f0fbc133 100644 (file)
@@ -9059,7 +9059,7 @@ arc_regno_use_in (unsigned int regno, rtx x)
   int i, j;
   rtx tem;
 
-  if (REG_P (x) && refers_to_regno_p (regno, regno+1, x, (rtx *) 0))
+  if (REG_P (x) && refers_to_regno_p (regno, x))
     return x;
 
   fmt = GET_RTX_FORMAT (GET_CODE (x));
index ba0125d4c2ca89690d9430abe28f3cac892723c8..8fabf5e6fbbcf27caacbb1f764205727c5a830b2 100644 (file)
         last.  Otherwise, load it first.  Note that we cannot have
         auto-increment in that case since the address register is known to be
         dead.  */
-      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
-                            operands [1], 0))
+      if (refers_to_regno_p (REGNO (operands[0]), operands[1]))
        return \"ld%V1 %R0,%R1\;ld%V1 %0,%1\";
       else switch (GET_CODE (XEXP(operands[1], 0)))
        {
index c92f9f469540afbd9a5ed08b94ea9d99df51f835..517d596c2c4cba39f6ecf3d893b4f552a11359b6 100644 (file)
@@ -2936,8 +2936,7 @@ cris_split_movdx (rtx *operands)
          /* If the high-address word is used in the address, we must load it
             last.  Otherwise, load it first.  */
          rtx addr = XEXP (src, 0);
-         int reverse
-           = (refers_to_regno_p (dregno, dregno + 1, addr, NULL) != 0);
+         int reverse = (refers_to_regno_p (dregno, addr) != 0);
 
          /* The original code implies that we can't do
             move.x [rN+],rM  move.x [rN],rM+1
index e91037739578e69faec642a6743635f4b83652bd..0d4a9b4dd93582b8425cf558bb6c8074d35d2a05 100644 (file)
@@ -5035,7 +5035,7 @@ frv_split_double_load (rtx dest, rtx source)
      of the registers could affect the value of ADDRESS, so we must
      be careful which order we do them in.  */
   if (GET_CODE (address) == PRE_MODIFY
-      || ! refers_to_regno_p (regno, regno + 1, address, NULL))
+      || ! refers_to_regno_p (regno, address))
     {
       /* It is safe to load the lower-numbered register first.  */
       emit_move_insn (dest1, change_address (source, SImode, NULL));
index c582f9f1f21bb02fea282e6fa556bbfd01276def..b0be3fa4421b06293eef90f9dceb5c8f70a3a8a4 100644 (file)
@@ -1096,8 +1096,7 @@ gen_split_move_double (rtx operands[])
        {
          /* If the high-address word is used in the address, we must load it
             last.  Otherwise, load it first.  */
-         int reverse
-           = (refers_to_regno_p (dregno, dregno + 1, XEXP (src, 0), 0) != 0);
+         int reverse = refers_to_regno_p (dregno, XEXP (src, 0));
 
          /* We used to optimize loads from single registers as
 
index 839a5aaa2ae32208a537f22b166936938982ab4c..b13cbc3c4b9aee656f8d8bf79fcb52f13f65b4ca 100644 (file)
@@ -2649,8 +2649,7 @@ pa_output_move_double (rtx *operands)
      Handle mem -> register case first.  */
   if (optype0 == REGOP
       && (optype1 == MEMOP || optype1 == OFFSOP)
-      && refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
-                           operands[1], 0))
+      && refers_to_regno_p (REGNO (operands[0]), operands[1]))
     {
       /* Do the late half first.  */
       if (addreg1)
index 608965ec353af9be2b1c42aaa174dbff810211a9..e2bfcd696f6e0dd96c0228401fd11110f7fef621 100644 (file)
@@ -16087,8 +16087,7 @@ rs6000_output_load_multiple (rtx operands[3])
     return "lwz %2,0(%1)";
 
   for (i = 0; i < words; i++)
-    if (refers_to_regno_p (REGNO (operands[2]) + i,
-                          REGNO (operands[2]) + i + 1, operands[1], 0))
+    if (refers_to_regno_p (REGNO (operands[2]) + i, operands[1]))
       {
        if (i == words-1)
          {
index e14bae7fae0896fa1b7230542a65285a3b873ec5..d65dcf3121bf95664ab890bf4ea0d5664cd92fb8 100644 (file)
        it last.  Otherwise, load it first.  Note that we cannot have
        auto-increment in that case since the address register is
        known to be dead.  */
-      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
-                            operands[1], 0))
+      if (refers_to_regno_p (REGNO (operands[0]), operands[1]))
        {
          if (WORDS_BIG_ENDIAN)
            return \"lwz %L0,%L1\;lwz %0,%1\";
          else
            return \"evldd%X1 %Y0,%y1\;evmergehi %Z0,%Y0,%Y0\";
        }
-      if (refers_to_regno_p (REGNO (operands[0]), REGNO (operands[0]) + 1,
-                            operands[1], 0))
+      if (refers_to_regno_p (REGNO (operands[0]), operands[1]))
        {
          if (WORDS_BIG_ENDIAN)
            return \"lwz %Z0,%L1\;lwz %Y0,%1\";
index 53dd89bb7110c483295826af2492f16d9aee5844..36b547d512ca15c581e822c3f5fd2f18076d1ed3 100644 (file)
@@ -5736,15 +5736,13 @@ reg_used_in_mem_p (int regno, rtx x)
 
   if (code == MEM)
     {
-      if (refers_to_regno_p (regno, regno+1,
-                            XEXP (x, 0), 0))
+      if (refers_to_regno_p (regno, XEXP (x, 0)))
        return true;
     }
   else if (code == SET
           && GET_CODE (SET_DEST (x)) == PC)
     {
-      if (refers_to_regno_p (regno, regno+1,
-                            SET_SRC (x), 0))
+      if (refers_to_regno_p (regno, SET_SRC (x)))
        return true;
     }
 
@@ -5795,7 +5793,7 @@ addr_generation_dependency_p (rtx dep_rtx, rtx_insn *insn)
                  pat = XVECEXP (pat, 0, 0);
                }
              gcc_assert (GET_CODE (pat) == SET);
-             return refers_to_regno_p (regno, regno+1, SET_SRC (pat), 0);
+             return refers_to_regno_p (regno, SET_SRC (pat));
            }
          else if (get_attr_atype (insn) == ATYPE_AGEN)
            return reg_used_in_mem_p (regno, PATTERN (insn));
index 32251c610dfaa312500d6ea58c43ba8908cb449e..a4006b4b4a5382b34a88476dc4fa48d58ca22d68 100644 (file)
@@ -1773,7 +1773,7 @@ prepare_move_operands (rtx operands[], machine_mode mode)
         reload will fail to find a spill register for rX, since r0 is already
         being used for the source.  */
       else if (TARGET_SH1
-              && refers_to_regno_p (R0_REG, R0_REG + 1, operands[1], (rtx *)0)
+              && refers_to_regno_p (R0_REG, operands[1])
               && MEM_P (operands[0])
               && GET_CODE (XEXP (operands[0], 0)) == PLUS
               && REG_P (XEXP (XEXP (operands[0], 0), 1)))
@@ -7808,8 +7808,7 @@ sh_expand_prologue (void)
                {
                  offset_in_r0 = -1;
                  sp_in_r0 = 0;
-                 gcc_assert (!refers_to_regno_p
-                             (R0_REG, R0_REG+1, mem_rtx, (rtx *) 0));
+                 gcc_assert (!refers_to_regno_p (R0_REG, mem_rtx));
                }
 
              if (*++tmp_pnt <= 0)
index 5b3b388b3c0cc62dd28658f3b56c3b933aa686ff..37d2a2013b58e9833501df462584d3cb0522ff7d 100644 (file)
@@ -7253,8 +7253,7 @@ label:
       gcc_unreachable ();
     }
 
-  if (regno == -1
-      || ! refers_to_regno_p (regno, regno + 1, operands[1], 0))
+  if (regno == -1 || ! refers_to_regno_p (regno, operands[1]))
     {
       operands[2] = operand_subword (operands[0], 0, 0, DImode);
       operands[3] = operand_subword (operands[1], 0, 0, DImode);
@@ -7787,8 +7786,7 @@ label:
          alter_subreg (&word0, true);
          word1 = gen_rtx_SUBREG (SImode, regop, 4);
          alter_subreg (&word1, true);
-         if (store_p || ! refers_to_regno_p (REGNO (word0),
-                                             REGNO (word0) + 1, addr, 0))
+         if (store_p || ! refers_to_regno_p (REGNO (word0), addr))
            {
              emit_insn (store_p
                         ? gen_movsi_ie (mem, word0)
@@ -8067,8 +8065,7 @@ label:
       gcc_unreachable ();
     }
 
-  if (regno == -1
-      || ! refers_to_regno_p (regno, regno + 1, operands[1], 0))
+  if (regno == -1 || ! refers_to_regno_p (regno, operands[1]))
     {
       operands[2] = operand_subword (operands[0], 0, 0, DFmode);
       operands[3] = operand_subword (operands[1], 0, 0, DFmode);
index 1a582442ba9bff4bece3f64f5596257ef465d8ef..6e7ea1e562d8c3650b84c725d4d3420af4d74fe0 100644 (file)
@@ -815,7 +815,7 @@ xstormy16_split_move (machine_mode mode, rtx dest, rtx src)
       gcc_assert (refers_to_regno_p (regno, regno + num_words,
                                     mem_operand, 0));
 
-      if (refers_to_regno_p (regno, regno + 1, mem_operand, 0))
+      if (refers_to_regno_p (regno, mem_operand))
        direction = -1;
       else if (refers_to_regno_p (regno + num_words - 1, regno + num_words,
                                  mem_operand, 0))
index 3a9c878be43bba68af13426f6c88e94fc7736911..53ca9661b69dc08cdfe8b5b0cf470c90304b579e 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -1982,8 +1982,7 @@ remove_invalid_refs (unsigned int regno)
     for (p = table[i]; p; p = next)
       {
        next = p->next_same_hash;
-       if (!REG_P (p->exp)
-           && refers_to_regno_p (regno, regno + 1, p->exp, (rtx *) 0))
+       if (!REG_P (p->exp) && refers_to_regno_p (regno, p->exp))
          remove_from_table (p, i);
       }
 }
@@ -2011,7 +2010,7 @@ remove_invalid_subreg_refs (unsigned int regno, unsigned int offset,
                || (((SUBREG_BYTE (exp)
                      + (GET_MODE_SIZE (GET_MODE (exp)) - 1)) >= offset)
                    && SUBREG_BYTE (exp) <= end))
-           && refers_to_regno_p (regno, regno + 1, p->exp, (rtx *) 0))
+           && refers_to_regno_p (regno, p->exp))
          remove_from_table (p, i);
       }
 }
index ad3324c3f1757c3c5c881e5ab9e2ac6a789ba6f4..3690a362a3d7fcd403f549b483395bac3b8c9b07 100644 (file)
@@ -3173,8 +3173,7 @@ df_get_call_refs (struct df_collection_rec *collection_rec,
               && !TEST_HARD_REG_BIT (defs_generated, i)
               && (!is_sibling_call
                   || !bitmap_bit_p (df->exit_block_uses, i)
-                  || refers_to_regno_p (i, i+1,
-                                        crtl->return_rtx, NULL)))
+                  || refers_to_regno_p (i, crtl->return_rtx)))
          df_ref_record (DF_REF_BASE, collection_rec, regno_reg_rtx[i],
                         NULL, bb, insn_info, DF_REF_REG_DEF,
                         DF_REF_MAY_CLOBBER | flags);
index e0f25558b32e10940f45175e1ee683e0e1b2831a..e5e4560d3ae8d8899af1b24e39f54ad7169ec970 100644 (file)
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -2837,7 +2837,7 @@ extern int reg_set_p (const_rtx, const_rtx);
 extern int multiple_sets (const_rtx);
 extern int set_noop_p (const_rtx);
 extern int noop_move_p (const_rtx);
-extern int refers_to_regno_p (unsigned int, unsigned int, const_rtx, rtx *);
+extern bool refers_to_regno_p (unsigned int, unsigned int, const_rtx, rtx *);
 extern int reg_overlap_mentioned_p (const_rtx, const_rtx);
 extern const_rtx set_of (const_rtx, const_rtx);
 extern void record_hard_reg_sets (rtx, const_rtx, void *);
@@ -2885,6 +2885,13 @@ extern bool tablejump_p (const rtx_insn *, rtx *, rtx_jump_table_data **);
 extern int computed_jump_p (const_rtx);
 extern bool tls_referenced_p (const_rtx);
 
+/* Overload for refers_to_regno_p for checking a single register.  */
+inline bool
+refers_to_regno_p (unsigned int regnum, const_rtx x, rtx* loc = NULL)
+{
+  return refers_to_regno_p (regnum, regnum + 1, x, loc);
+}
+
 /* Callback for for_each_inc_dec, to process the autoinc operation OP
    within MEM that sets DEST to SRC + SRCOFF, or SRC if SRCOFF is
    NULL.  The callback is passed the same opaque ARG passed to
index 760a5d63906a642f63f1f10d9c534def8a007aac..43ed2de2093e8138a42f7f727f1faad627b263f6 100644 (file)
@@ -1402,7 +1402,7 @@ noop_move_p (const_rtx insn)
    References contained within the substructure at LOC do not count.
    LOC may be zero, meaning don't ignore anything.  */
 
-int
+bool
 refers_to_regno_p (unsigned int regno, unsigned int endregno, const_rtx x,
                   rtx *loc)
 {
@@ -1415,7 +1415,7 @@ refers_to_regno_p (unsigned int regno, unsigned int endregno, const_rtx x,
   /* The contents of a REG_NONNEG note is always zero, so we must come here
      upon repeat in case the last REG_NOTE is a REG_NONNEG note.  */
   if (x == 0)
-    return 0;
+    return false;
 
   code = GET_CODE (x);
 
@@ -1433,7 +1433,7 @@ refers_to_regno_p (unsigned int regno, unsigned int endregno, const_rtx x,
 #endif
           || x_regno == FRAME_POINTER_REGNUM)
          && regno >= FIRST_VIRTUAL_REGISTER && regno <= LAST_VIRTUAL_REGISTER)
-       return 1;
+       return true;
 
       return endregno > x_regno && regno < END_REGNO (x);
 
@@ -1466,10 +1466,10 @@ refers_to_regno_p (unsigned int regno, unsigned int endregno, const_rtx x,
                                     SUBREG_REG (SET_DEST (x)), loc))
              || (!REG_P (SET_DEST (x))
                  && refers_to_regno_p (regno, endregno, SET_DEST (x), loc))))
-       return 1;
+       return true;
 
       if (code == CLOBBER || loc == &SET_SRC (x))
-       return 0;
+       return false;
       x = SET_SRC (x);
       goto repeat;
 
@@ -1491,7 +1491,7 @@ refers_to_regno_p (unsigned int regno, unsigned int endregno, const_rtx x,
            }
          else
            if (refers_to_regno_p (regno, endregno, XEXP (x, i), loc))
-             return 1;
+             return true;
        }
       else if (fmt[i] == 'E')
        {
@@ -1499,10 +1499,10 @@ refers_to_regno_p (unsigned int regno, unsigned int endregno, const_rtx x,
          for (j = XVECLEN (x, i) - 1; j >= 0; j--)
            if (loc != &XVECEXP (x, i, j)
                && refers_to_regno_p (regno, endregno, XVECEXP (x, i, j), loc))
-             return 1;
+             return true;
        }
     }
-  return 0;
+  return false;
 }
 
 /* Nonzero if modifying X will affect IN.  If X is a register or a SUBREG,
index 604eb8eade1f06a2d0214f677c8e64bf5b9b773a..a00781de730ec9efde313255c1057378bc202365 100644 (file)
@@ -3174,7 +3174,7 @@ sched_analyze_insn (struct deps_desc *deps, rtx x, rtx_insn *insn)
                {
                  rtx other = XEXP (list, 0);
                  if (INSN_CACHED_COND (other) != const_true_rtx
-                     && refers_to_regno_p (i, i + 1, INSN_CACHED_COND (other), NULL))
+                     && refers_to_regno_p (i, INSN_CACHED_COND (other)))
                    INSN_CACHED_COND (other) = const_true_rtx;
                }
            }