This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 1/2] add staticly checked label_nuses accessors
- From: tsaunders at mozilla dot com
- To: gcc-patches at gcc dot gnu dot org
- Cc: Trevor Saunders <tsaunders at mozilla dot com>
- Date: Fri, 5 Sep 2014 11:32:37 -0400
- Subject: [PATCH 1/2] add staticly checked label_nuses accessors
- Authentication-results: sourceware.org; auth=none
From: Trevor Saunders <tsaunders@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