Commit eb61d07e by Jakub Jelinek Committed by Jakub Jelinek

re PR target/78614 (ICE error: invalid rtl sharing found in the insn…

re PR target/78614 (ICE error: invalid rtl sharing found in the insn (verify_rtx_sharing) gcc/emit-rtl.c:2743)

	PR target/78614
	* rtl.c (copy_rtx): Don't clear used flag here.
	(shallow_copy_rtx_stat): Clear used flag here unless code the rtx
	is shareable.
	* simplify-rtx.c (simplify_replace_fn_rtx): When copying rtx with
	'E' in format, copy all vectors.
	* emit-rtl.c (copy_insn_1): Don't clear used flag here.
	* valtrack.c (cleanup_auto_inc_dec): Likewise.
	* config/rs6000/rs6000.c (rs6000_frame_related): Likewise.

From-SVN: r243194
parent 8261e476
2016-12-02 Jakub Jelinek <jakub@redhat.com>
PR target/78614
* rtl.c (copy_rtx): Don't clear used flag here.
(shallow_copy_rtx_stat): Clear used flag here unless code the rtx
is shareable.
* simplify-rtx.c (simplify_replace_fn_rtx): When copying rtx with
'E' in format, copy all vectors.
* emit-rtl.c (copy_insn_1): Don't clear used flag here.
* valtrack.c (cleanup_auto_inc_dec): Likewise.
* config/rs6000/rs6000.c (rs6000_frame_related): Likewise.
2016-12-02 Andre Vieira <andre.simoesdiasvieira@arm.com> 2016-12-02 Andre Vieira <andre.simoesdiasvieira@arm.com>
Thomas Preud'homme <thomas.preudhomme@arm.com> Thomas Preud'homme <thomas.preudhomme@arm.com>
...@@ -27186,7 +27186,6 @@ rs6000_frame_related (rtx_insn *insn, rtx reg, HOST_WIDE_INT val, ...@@ -27186,7 +27186,6 @@ rs6000_frame_related (rtx_insn *insn, rtx reg, HOST_WIDE_INT val,
{ {
pat = shallow_copy_rtx (pat); pat = shallow_copy_rtx (pat);
XVEC (pat, 0) = shallow_copy_rtvec (XVEC (pat, 0)); XVEC (pat, 0) = shallow_copy_rtvec (XVEC (pat, 0));
RTX_FLAG (pat, used) = 0;
for (int i = 0; i < XVECLEN (pat, 0); i++) for (int i = 0; i < XVECLEN (pat, 0); i++)
if (GET_CODE (XVECEXP (pat, 0, i)) == SET) if (GET_CODE (XVECEXP (pat, 0, i)) == SET)
...@@ -5552,10 +5552,6 @@ copy_insn_1 (rtx orig) ...@@ -5552,10 +5552,6 @@ copy_insn_1 (rtx orig)
us to explicitly document why we are *not* copying a flag. */ us to explicitly document why we are *not* copying a flag. */
copy = shallow_copy_rtx (orig); copy = shallow_copy_rtx (orig);
/* We do not copy the USED flag, which is used as a mark bit during
walks over the RTL. */
RTX_FLAG (copy, used) = 0;
/* We do not copy JUMP, CALL, or FRAME_RELATED for INSNs. */ /* We do not copy JUMP, CALL, or FRAME_RELATED for INSNs. */
if (INSN_P (orig)) if (INSN_P (orig))
{ {
......
...@@ -318,10 +318,6 @@ copy_rtx (rtx orig) ...@@ -318,10 +318,6 @@ copy_rtx (rtx orig)
us to explicitly document why we are *not* copying a flag. */ us to explicitly document why we are *not* copying a flag. */
copy = shallow_copy_rtx (orig); copy = shallow_copy_rtx (orig);
/* We do not copy the USED flag, which is used as a mark bit during
walks over the RTL. */
RTX_FLAG (copy, used) = 0;
format_ptr = GET_RTX_FORMAT (GET_CODE (copy)); format_ptr = GET_RTX_FORMAT (GET_CODE (copy));
for (i = 0; i < GET_RTX_LENGTH (GET_CODE (copy)); i++) for (i = 0; i < GET_RTX_LENGTH (GET_CODE (copy)); i++)
...@@ -367,7 +363,29 @@ shallow_copy_rtx_stat (const_rtx orig MEM_STAT_DECL) ...@@ -367,7 +363,29 @@ shallow_copy_rtx_stat (const_rtx orig MEM_STAT_DECL)
{ {
const unsigned int size = rtx_size (orig); const unsigned int size = rtx_size (orig);
rtx const copy = ggc_alloc_rtx_def_stat (size PASS_MEM_STAT); rtx const copy = ggc_alloc_rtx_def_stat (size PASS_MEM_STAT);
return (rtx) memcpy (copy, orig, size); memcpy (copy, orig, size);
switch (GET_CODE (orig))
{
/* RTX codes copy_rtx_if_shared_1 considers are shareable,
the used flag is often used for other purposes. */
case REG:
case DEBUG_EXPR:
case VALUE:
CASE_CONST_ANY:
case SYMBOL_REF:
case CODE_LABEL:
case PC:
case CC0:
case RETURN:
case SIMPLE_RETURN:
case SCRATCH:
break;
default:
/* For all other RTXes clear the used flag on the copy. */
RTX_FLAG (copy, used) = 0;
break;
}
return copy;
} }
/* Nonzero when we are generating CONCATs. */ /* Nonzero when we are generating CONCATs. */
......
...@@ -119,10 +119,6 @@ cleanup_auto_inc_dec (rtx src, machine_mode mem_mode ATTRIBUTE_UNUSED) ...@@ -119,10 +119,6 @@ cleanup_auto_inc_dec (rtx src, machine_mode mem_mode ATTRIBUTE_UNUSED)
us to explicitly document why we are *not* copying a flag. */ us to explicitly document why we are *not* copying a flag. */
x = shallow_copy_rtx (x); x = shallow_copy_rtx (x);
/* We do not copy the USED flag, which is used as a mark bit during
walks over the RTL. */
RTX_FLAG (x, used) = 0;
/* We do not copy FRAME_RELATED for INSNs. */ /* We do not copy FRAME_RELATED for INSNs. */
if (INSN_P (x)) if (INSN_P (x))
RTX_FLAG (x, frame_related) = 0; RTX_FLAG (x, frame_related) = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment