re PR middle-end/79909 (ICE error: invalid rtl sharing found in the insn on ppc64le)
PR rtl-optimization/79909 * combine.c (try_combine): Use simplify_replace_rtx on individual CALL_INSN_FUNCTION_USAGE elements instead of replace_rtx on copy_rtx of the whole CALL_INSN_FUNCTION_USAGE. * gcc.target/powerpc/pr79909.c: New test. From-SVN: r246023
This commit is contained in:
parent
72772e6761
commit
2d9dd4fb86
|
@ -1,5 +1,10 @@
|
||||||
2017-03-10 Jakub Jelinek <jakub@redhat.com>
|
2017-03-10 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR rtl-optimization/79909
|
||||||
|
* combine.c (try_combine): Use simplify_replace_rtx on individual
|
||||||
|
CALL_INSN_FUNCTION_USAGE elements instead of replace_rtx on copy_rtx
|
||||||
|
of the whole CALL_INSN_FUNCTION_USAGE.
|
||||||
|
|
||||||
PR tree-optimization/79972
|
PR tree-optimization/79972
|
||||||
* gimple-ssa-warn-alloca.c (alloca_call_type): Only call
|
* gimple-ssa-warn-alloca.c (alloca_call_type): Only call
|
||||||
get_range_info on SSA_NAMEs. Formatting fixes.
|
get_range_info on SSA_NAMEs. Formatting fixes.
|
||||||
|
|
|
@ -4293,26 +4293,25 @@ try_combine (rtx_insn *i3, rtx_insn *i2, rtx_insn *i1, rtx_insn *i0,
|
||||||
|
|
||||||
if (CALL_P (i3) && CALL_INSN_FUNCTION_USAGE (i3))
|
if (CALL_P (i3) && CALL_INSN_FUNCTION_USAGE (i3))
|
||||||
{
|
{
|
||||||
rtx call_usage = CALL_INSN_FUNCTION_USAGE (i3);
|
for (rtx link = CALL_INSN_FUNCTION_USAGE (i3); link;
|
||||||
|
link = XEXP (link, 1))
|
||||||
reset_used_flags (call_usage);
|
|
||||||
call_usage = copy_rtx (call_usage);
|
|
||||||
|
|
||||||
if (substed_i2)
|
|
||||||
{
|
{
|
||||||
/* I2SRC must still be meaningful at this point. Some splitting
|
if (substed_i2)
|
||||||
operations can invalidate I2SRC, but those operations do not
|
{
|
||||||
apply to calls. */
|
/* I2SRC must still be meaningful at this point. Some
|
||||||
gcc_assert (i2src);
|
splitting operations can invalidate I2SRC, but those
|
||||||
replace_rtx (call_usage, i2dest, i2src);
|
operations do not apply to calls. */
|
||||||
|
gcc_assert (i2src);
|
||||||
|
XEXP (link, 0) = simplify_replace_rtx (XEXP (link, 0),
|
||||||
|
i2dest, i2src);
|
||||||
|
}
|
||||||
|
if (substed_i1)
|
||||||
|
XEXP (link, 0) = simplify_replace_rtx (XEXP (link, 0),
|
||||||
|
i1dest, i1src);
|
||||||
|
if (substed_i0)
|
||||||
|
XEXP (link, 0) = simplify_replace_rtx (XEXP (link, 0),
|
||||||
|
i0dest, i0src);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (substed_i1)
|
|
||||||
replace_rtx (call_usage, i1dest, i1src);
|
|
||||||
if (substed_i0)
|
|
||||||
replace_rtx (call_usage, i0dest, i0src);
|
|
||||||
|
|
||||||
CALL_INSN_FUNCTION_USAGE (i3) = call_usage;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (undobuf.other_insn)
|
if (undobuf.other_insn)
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
2017-03-10 Jakub Jelinek <jakub@redhat.com>
|
2017-03-10 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
PR rtl-optimization/79909
|
||||||
|
* gcc.target/powerpc/pr79909.c: New test.
|
||||||
|
|
||||||
PR tree-optimization/79972
|
PR tree-optimization/79972
|
||||||
* gcc.dg/pr79972.c: New test.
|
* gcc.dg/pr79972.c: New test.
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
/* PR rtl-optimization/79909 */
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O2 -mxl-compat" } */
|
||||||
|
|
||||||
|
typedef float T __attribute__ ((mode (TD)));
|
||||||
|
T b, c, d, e, f, g;
|
||||||
|
void bar (T, T, T, T, T, T);
|
||||||
|
|
||||||
|
void
|
||||||
|
foo (void)
|
||||||
|
{
|
||||||
|
bar (e, b, f, c, g, d);
|
||||||
|
}
|
Loading…
Reference in New Issue