[PATCH] pr70890, r235660 miscompiles stage2
Bernd Schmidt
bschmidt@redhat.com
Tue May 3 11:07:00 GMT 2016
On 05/03/2016 12:45 PM, Alan Modra wrote:
> PR rtl-optimization/70890
> * ira.c (combine_and_move_insns): When moving def_insn, remove
> equivs on use_insn.
I'm not sure yet, but it looks to me like this tweaks the wrong place.
> diff --git a/gcc/ira.c b/gcc/ira.c
> index a38e67e..cf5be35 100644
> --- a/gcc/ira.c
> +++ b/gcc/ira.c
> @@ -3742,6 +3742,16 @@ combine_and_move_insns (void)
> if (use_insn == BB_HEAD (use_bb))
> BB_HEAD (use_bb) = new_insn;
>
> + /* Since regno now dies in use_insn we can't leave any
> + equivalence for a reg set by use_insn as the equivalence
> + must reference regno. */
"now dies" is the first part that I stumbled over. Doesn't it die there
regardless of the move? And if it dies, why did we make this equivalence
in the first place? It seems we should fix the place that makes
incorrect equivalences rather than removing them here (where it seems
likely we'll catch only a partial set).
Maybe I'm wrong and this could be cleared up by showing more steps in
the transformation sequence.
Bernd
More information about the Gcc-patches
mailing list