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>
|
||||
|
||||
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
|
||||
* gimple-ssa-warn-alloca.c (alloca_call_type): Only call
|
||||
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))
|
||||
{
|
||||
rtx call_usage = CALL_INSN_FUNCTION_USAGE (i3);
|
||||
|
||||
reset_used_flags (call_usage);
|
||||
call_usage = copy_rtx (call_usage);
|
||||
|
||||
for (rtx link = CALL_INSN_FUNCTION_USAGE (i3); link;
|
||||
link = XEXP (link, 1))
|
||||
{
|
||||
if (substed_i2)
|
||||
{
|
||||
/* I2SRC must still be meaningful at this point. Some splitting
|
||||
operations can invalidate I2SRC, but those operations do not
|
||||
apply to calls. */
|
||||
/* I2SRC must still be meaningful at this point. Some
|
||||
splitting operations can invalidate I2SRC, but those
|
||||
operations do not apply to calls. */
|
||||
gcc_assert (i2src);
|
||||
replace_rtx (call_usage, i2dest, i2src);
|
||||
XEXP (link, 0) = simplify_replace_rtx (XEXP (link, 0),
|
||||
i2dest, i2src);
|
||||
}
|
||||
|
||||
if (substed_i1)
|
||||
replace_rtx (call_usage, i1dest, i1src);
|
||||
XEXP (link, 0) = simplify_replace_rtx (XEXP (link, 0),
|
||||
i1dest, i1src);
|
||||
if (substed_i0)
|
||||
replace_rtx (call_usage, i0dest, i0src);
|
||||
|
||||
CALL_INSN_FUNCTION_USAGE (i3) = call_usage;
|
||||
XEXP (link, 0) = simplify_replace_rtx (XEXP (link, 0),
|
||||
i0dest, i0src);
|
||||
}
|
||||
}
|
||||
|
||||
if (undobuf.other_insn)
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2017-03-10 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR rtl-optimization/79909
|
||||
* gcc.target/powerpc/pr79909.c: New test.
|
||||
|
||||
PR tree-optimization/79972
|
||||
* 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