From: Trevor Saunders <tsaund...@mozilla.com>

Hi,

 Doing this means we get to remove a fair chunk of runtime checking.

bootstrapped + regtested on x86_64-unknown-linux-gnu with no regressions.
config-list.mk with this and the next patch is ongoing. ok?

Trev

gcc/

        * config/i386/i386.c, config/i386/i386.md, config/mep/mep.c,
        config/mips/mips.c, config/nios2/nios2.c, config/s390/s390.c,
        config/sh/sh.c, reorg.c: Use rtx_code_label::nuses and
        rtx_code_label::set_nuses where possible.
        * rtl.h (rtx_code_label::nuses): New member function.
        (rtx_code_label::set_nuses): Likewise.
---
 gcc/config/i386/i386.c   | 56 ++++++++++++++++++++++++------------------------
 gcc/config/i386/i386.md  | 14 ++++++------
 gcc/config/mep/mep.c     |  2 +-
 gcc/config/mips/mips.c   |  2 +-
 gcc/config/nios2/nios2.c |  4 ++--
 gcc/config/s390/s390.c   |  4 ++--
 gcc/config/sh/sh.c       |  2 +-
 gcc/reorg.c              |  6 +++---
 gcc/rtl.h                |  9 ++++++++
 9 files changed, 54 insertions(+), 45 deletions(-)

diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index a117718..e2b4a00 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -12136,7 +12136,7 @@ ix86_expand_split_stack_prologue (void)
     }
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   /* If this function calls va_start, we now have to set the scratch
      register for the case where we do not call __morestack.  In this
@@ -12148,7 +12148,7 @@ ix86_expand_split_stack_prologue (void)
                                            GEN_INT (UNITS_PER_WORD))));
 
       emit_label (varargs_label);
-      LABEL_NUSES (varargs_label) = 1;
+      varargs_label->set_nuses (1);
     }
 }
 
@@ -23129,7 +23129,7 @@ expand_movmem_epilogue (rtx destmem, rtx srcmem,
          dest = change_address (destmem, SImode, destptr);
          emit_insn (gen_strmov (destptr, dest, srcptr, src));
          emit_label (label);
-         LABEL_NUSES (label) = 1;
+         label->set_nuses (1);
        }
       if (max_size > 2)
        {
@@ -23138,7 +23138,7 @@ expand_movmem_epilogue (rtx destmem, rtx srcmem,
          dest = change_address (destmem, HImode, destptr);
          emit_insn (gen_strmov (destptr, dest, srcptr, src));
          emit_label (label);
-         LABEL_NUSES (label) = 1;
+         label->set_nuses (1);
        }
       if (max_size > 1)
        {
@@ -23147,7 +23147,7 @@ expand_movmem_epilogue (rtx destmem, rtx srcmem,
          dest = change_address (destmem, QImode, destptr);
          emit_insn (gen_strmov (destptr, dest, srcptr, src));
          emit_label (label);
-         LABEL_NUSES (label) = 1;
+         label->set_nuses (1);
        }
     }
   else
@@ -23166,7 +23166,7 @@ expand_movmem_epilogue (rtx destmem, rtx srcmem,
          if (tmp != offset)
            emit_move_insn (offset, tmp);
          emit_label (label);
-         LABEL_NUSES (label) = 1;
+         label->set_nuses (1);
        }
       if (max_size > 2)
        {
@@ -23181,7 +23181,7 @@ expand_movmem_epilogue (rtx destmem, rtx srcmem,
          if (tmp != offset)
            emit_move_insn (offset, tmp);
          emit_label (label);
-         LABEL_NUSES (label) = 1;
+         label->set_nuses (1);
        }
       if (max_size > 1)
        {
@@ -23192,7 +23192,7 @@ expand_movmem_epilogue (rtx destmem, rtx srcmem,
          dest = change_address (destmem, QImode, tmp);
          emit_move_insn (dest, src);
          emit_label (label);
-         LABEL_NUSES (label) = 1;
+         label->set_nuses (1);
        }
     }
 }
@@ -23321,7 +23321,7 @@ expand_setmem_epilogue (rtx destmem, rtx destptr, rtx 
value, rtx vec_value,
          emit_insn (gen_strset (destptr, dest, value));
        }
       emit_label (label);
-      LABEL_NUSES (label) = 1;
+      label->set_nuses (1);
     }
   if (max_size > 8)
     {
@@ -23339,7 +23339,7 @@ expand_setmem_epilogue (rtx destmem, rtx destptr, rtx 
value, rtx vec_value,
          emit_insn (gen_strset (destptr, dest, value));
        }
       emit_label (label);
-      LABEL_NUSES (label) = 1;
+      label->set_nuses (1);
     }
   if (max_size > 4)
     {
@@ -23347,7 +23347,7 @@ expand_setmem_epilogue (rtx destmem, rtx destptr, rtx 
value, rtx vec_value,
       dest = change_address (destmem, SImode, destptr);
       emit_insn (gen_strset (destptr, dest, gen_lowpart (SImode, value)));
       emit_label (label);
-      LABEL_NUSES (label) = 1;
+      label->set_nuses (1);
     }
   if (max_size > 2)
     {
@@ -23355,7 +23355,7 @@ expand_setmem_epilogue (rtx destmem, rtx destptr, rtx 
value, rtx vec_value,
       dest = change_address (destmem, HImode, destptr);
       emit_insn (gen_strset (destptr, dest, gen_lowpart (HImode, value)));
       emit_label (label);
-      LABEL_NUSES (label) = 1;
+      label->set_nuses (1);
     }
   if (max_size > 1)
     {
@@ -23363,7 +23363,7 @@ expand_setmem_epilogue (rtx destmem, rtx destptr, rtx 
value, rtx vec_value,
       dest = change_address (destmem, QImode, destptr);
       emit_insn (gen_strset (destptr, dest, gen_lowpart (QImode, value)));
       emit_label (label);
-      LABEL_NUSES (label) = 1;
+      label->set_nuses (1);
     }
 }
 
@@ -23395,7 +23395,7 @@ expand_set_or_movmem_prologue (rtx destmem, rtx srcmem,
            destmem = emit_memmov (destmem, &srcmem, destptr, srcptr, i);
          ix86_adjust_counter (count, i);
          emit_label (label);
-         LABEL_NUSES (label) = 1;
+         label->set_nuses (1);
          set_mem_align (destmem, i * 2 * BITS_PER_UNIT);
        }
     }
@@ -23478,7 +23478,7 @@ expand_small_movmem_or_setmem (rtx destmem, rtx srcmem,
   emit_barrier ();
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 }
 
 /* Handle small memcpy (up to SIZE that is supposed to be small power of 2.
@@ -23608,7 +23608,7 @@ 
expand_set_or_movmem_prologue_epilogue_by_misaligned_moves (rtx destmem, rtx src
        }
 
       emit_label (label);
-      LABEL_NUSES (label) = 1;
+      label->set_nuses (1);
       emit_jump_insn (gen_jump (*done_label));
       emit_barrier ();
     }
@@ -23620,7 +23620,7 @@ 
expand_set_or_movmem_prologue_epilogue_by_misaligned_moves (rtx destmem, rtx src
   if (loop_label)
     {
        emit_label (loop_label);
-       LABEL_NUSES (loop_label) = 1;
+       loop_label->set_nuses (1);
     }
 
   /* Copy first desired_align bytes.  */
@@ -24505,7 +24505,7 @@ ix86_expand_set_or_movmem (rtx dst, rtx src, rtx 
count_exp, rtx val_exp,
   if (label && size_needed == 1)
     {
       emit_label (label);
-      LABEL_NUSES (label) = 1;
+      label->set_nuses (1);
       label = NULL;
       epilogue_size_needed = 1;
       if (issetmem)
@@ -24576,7 +24576,7 @@ ix86_expand_set_or_movmem (rtx dst, rtx src, rtx 
count_exp, rtx val_exp,
            emit_move_insn (count_exp, tmp);
        }
       emit_label (label);
-      LABEL_NUSES (label) = 1;
+      label->set_nuses (1);
     }
 
   if (count_exp != const0_rtx && epilogue_size_needed > 1)
@@ -41490,7 +41490,7 @@ void ix86_emit_i387_round (rtx op0, rtx op1)
   emit_insn (gen_neg (res, res));
 
   emit_label (jump_label);
-  LABEL_NUSES (jump_label) = 1;
+  jump_label->set_nuses (1);
 
   emit_move_insn (op0, res);
 }
@@ -41935,7 +41935,7 @@ ix86_expand_lfloorceil (rtx op0, rtx op1, bool do_floor)
   emit_move_insn (ireg, tmp);
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (op0, ireg);
 }
@@ -41972,7 +41972,7 @@ ix86_expand_rint (rtx operand0, rtx operand1)
   ix86_sse_copysign_to_positive (res, xa, res, mask);
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operand0, res);
 }
@@ -42035,7 +42035,7 @@ ix86_expand_floorceildf_32 (rtx operand0, rtx operand1, 
bool do_floor)
   emit_move_insn (res, tmp);
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operand0, res);
 }
@@ -42097,7 +42097,7 @@ ix86_expand_floorceil (rtx operand0, rtx operand1, bool 
do_floor)
     ix86_sse_copysign_to_positive (res, res, force_reg (mode, operand1), mask);
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operand0, res);
 }
@@ -42171,7 +42171,7 @@ ix86_expand_rounddf_32 (rtx operand0, rtx operand1)
   ix86_sse_copysign_to_positive (res, xa2, force_reg (mode, operand1), mask);
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operand0, res);
 }
@@ -42216,7 +42216,7 @@ ix86_expand_trunc (rtx operand0, rtx operand1)
     ix86_sse_copysign_to_positive (res, res, force_reg (mode, operand1), mask);
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operand0, res);
 }
@@ -42275,7 +42275,7 @@ ix86_expand_truncdf_32 (rtx operand0, rtx operand1)
   ix86_sse_copysign_to_positive (res, res, force_reg (mode, operand1), smask);
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operand0, res);
 }
@@ -42325,7 +42325,7 @@ ix86_expand_round (rtx operand0, rtx operand1)
   ix86_sse_copysign_to_positive (res, xa, force_reg (mode, operand1), mask);
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operand0, res);
 }
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index d5588c8..9b11e9c 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -9191,7 +9191,7 @@
   ix86_expand_clear (operands[1]);
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   DONE;
 })
@@ -9854,7 +9854,7 @@
   emit_insn (gen_ashr<mode>3_cvt (operands[1], operands[1],
                                  GEN_INT (GET_MODE_BITSIZE (<MODE>mode)-1)));
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   DONE;
 })
@@ -13855,7 +13855,7 @@
   emit_label (label);
   emit_insn (gen_fpremxf4_i387 (op1, op2, op1, op2));
   ix86_emit_fp_unordered_jump (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operands[0], op1);
   DONE;
@@ -13880,7 +13880,7 @@
   emit_label (label);
   emit_insn (gen_fpremxf4_i387 (op1, op2, op1, op2));
   ix86_emit_fp_unordered_jump (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   /* Truncate the result properly for strict SSE math.  */
   if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
@@ -13926,7 +13926,7 @@
   emit_label (label);
   emit_insn (gen_fprem1xf4_i387 (op1, op2, op1, op2));
   ix86_emit_fp_unordered_jump (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operands[0], op1);
   DONE;
@@ -13952,7 +13952,7 @@
 
   emit_insn (gen_fprem1xf4_i387 (op1, op2, op1, op2));
   ix86_emit_fp_unordered_jump (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   /* Truncate the result properly for strict SSE math.  */
   if (SSE_FLOAT_MODE_P (<MODE>mode) && TARGET_SSE_MATH
@@ -18542,7 +18542,7 @@
   emit_jump_insn (gen_xbegin_1 (ax_reg, label));
 
   emit_label (label);
-  LABEL_NUSES (label) = 1;
+  label->set_nuses (1);
 
   emit_move_insn (operands[0], ax_reg);
 
diff --git a/gcc/config/mep/mep.c b/gcc/config/mep/mep.c
index fcd5e0a..0f36a62 100644
--- a/gcc/config/mep/mep.c
+++ b/gcc/config/mep/mep.c
@@ -5579,7 +5579,7 @@ mep_reorg_erepeat (rtx_insn *insns)
 
                /* Insert the erepeat after INSN's target label.  */
                x = gen_erepeat (gen_rtx_LABEL_REF (VOIDmode, l));
-               LABEL_NUSES (l)++;
+               l->set_nuses (l->nuses () + 1);
                emit_insn_after (x, prev);
 
                /* Insert the erepeat label.  */
diff --git a/gcc/config/mips/mips.c b/gcc/config/mips/mips.c
index 3e77491..76c0b33 100644
--- a/gcc/config/mips/mips.c
+++ b/gcc/config/mips/mips.c
@@ -14892,7 +14892,7 @@ mips16_lay_out_constants (bool split_p)
 
              jump = emit_jump_insn_before (gen_jump (label), insn);
              JUMP_LABEL (jump) = label;
-             LABEL_NUSES (label) = 1;
+             label->set_nuses (1);
              barrier = emit_barrier_after (jump);
 
              emit_label_after (label, barrier);
diff --git a/gcc/config/nios2/nios2.c b/gcc/config/nios2/nios2.c
index 1ab74f9..be173a6 100644
--- a/gcc/config/nios2/nios2.c
+++ b/gcc/config/nios2/nios2.c
@@ -1342,7 +1342,7 @@ nios2_emit_expensive_div (rtx *operands, enum 
machine_mode mode)
   emit_barrier ();
 
   emit_label (lab3);
-  LABEL_NUSES (lab3) = 1;
+  lab3->set_nuses (1);
 
   start_sequence ();
   final_result = emit_library_call_value (libfunc, NULL_RTX,
@@ -1356,7 +1356,7 @@ nios2_emit_expensive_div (rtx *operands, enum 
machine_mode mode)
                       gen_rtx_DIV (SImode, operands[1], operands[2]));
 
   emit_label (lab1);
-  LABEL_NUSES (lab1) = 1;
+  lab1->set_nuses (1);
 }
 
 
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 9e910cc..7b7652a 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -9895,7 +9895,7 @@ s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool 
clobber_fprs_p)
                             gen_rtx_EQ (VOIDmode,
                               gen_rtx_REG (CCRAWmode, CC_REGNUM),
                               gen_rtx_CONST_INT (VOIDmode, CC0 | CC1 | CC3)));
-      LABEL_NUSES (leave_label) = 1;
+      leave_label->set_nuses (1);
 
       /* CC2 - transient failure. Perform retry with ppa.  */
       emit_move_insn (count, retry_plus_two);
@@ -9905,7 +9905,7 @@ s390_expand_tbegin (rtx dest, rtx tdb, rtx retry, bool 
clobber_fprs_p)
                                              retry_reg,
                                              retry_reg));
       JUMP_LABEL (jump) = retry_label;
-      LABEL_NUSES (retry_label) = 1;
+      retry_label->set_nuses (1);
       emit_label (leave_label);
     }
 }
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 849867a..e85ca57 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -5355,7 +5355,7 @@ find_barrier (int num_mova, rtx_insn *mova, rtx_insn 
*from)
 
       from = emit_jump_insn_after (gen_jump (label), from);
       JUMP_LABEL (from) = label;
-      LABEL_NUSES (label) = 1;
+      label->set_nuses (1);
       found_barrier = emit_barrier_after (from);
       emit_label_after (label, found_barrier);
     }
diff --git a/gcc/reorg.c b/gcc/reorg.c
index 89d500d..18717a7 100644
--- a/gcc/reorg.c
+++ b/gcc/reorg.c
@@ -427,7 +427,7 @@ find_end_label (rtx kind)
     {
       rtx_insn *temp = PREV_INSN (PREV_INSN (insn));
       rtx_code_label *label = gen_label_rtx ();
-      LABEL_NUSES (label) = 0;
+      label->set_nuses (0);
 
       /* Put the label before any USE insns that may precede the RETURN
         insn.  */
@@ -443,7 +443,7 @@ find_end_label (rtx kind)
   else
     {
       rtx_code_label *label = gen_label_rtx ();
-      LABEL_NUSES (label) = 0;
+      label->set_nuses (0);
       /* If the basic block reorder pass moves the return insn to
         some other place try to locate it again and put our
         function_return_label there.  */
@@ -496,7 +496,7 @@ find_end_label (rtx kind)
 
   /* Show one additional use for this label so it won't go away until
      we are done.  */
-  ++LABEL_NUSES (*plabel);
+  (*plabel)->set_nuses ((*plabel)->nuses () + 1);
 
   return *plabel;
 }
diff --git a/gcc/rtl.h b/gcc/rtl.h
index cd2f2e7..2d66a89 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -595,6 +595,7 @@ class GTY(()) rtx_barrier : public rtx_insn
 
 class GTY(()) rtx_code_label : public rtx_insn
 {
+public:
   /* No extra fields, but adds the invariant:
        LABEL_P (X) aka (GET_CODE (X) == CODE_LABEL)
      i.e. a label in the assembler.
@@ -602,6 +603,14 @@ class GTY(()) rtx_code_label : public rtx_insn
      This is an instance of:
        DEF_RTL_EXPR(CODE_LABEL, "code_label", "uuB00is", RTX_EXTRA)
      from rtl.def.  */
+
+  /* The number of times this label is used.  */
+
+  int nuses () const { return u.fld[4].rt_int; }
+
+  /* Set the number of times this label is used.  */
+
+  void set_nuses (int n) { u.fld[4].rt_int = n; }
 };
 
 class GTY(()) rtx_note : public rtx_insn
-- 
2.1.0

Reply via email to