RFA: Fix PR middle-end/59049
Jakub Jelinek
jakub@redhat.com
Mon Nov 11 14:44:00 GMT 2013
On Fri, Nov 08, 2013 at 05:11:39PM +0000, Joern Rennecke wrote:
> On 8 November 2013 15:50, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
> > Even with the gimple opts disabled, a const-const comparison would
> > normally be folded by the RTL expanders.
>
> Well, in this spirit, attached is another way to address the RTL side
> of the problem.
> As mention in the PR, the tree side of the problem started showing up
> in r204194.
> 2013-11-08 Joern Rennecke <joern.rennecke@embecosm.com>
>
> PR middle-end/59049
> * expmed.c (emit_store_flag): Fail for const-const comparison.
LGTM (I'd just write return NULL_RTX; instead of return 0;).
> --- expmed.c (revision 204568)
> +++ expmed.c (working copy)
> @@ -5401,6 +5401,13 @@ emit_store_flag (rtx target, enum rtx_co
> rtx subtarget;
> rtx tem, last, trueval;
>
> + /* If we compare constants, we shouldn't use a store-flag operation,
> + but a constant load. We can get there via the vanilla route that
> + usually generates a compare-branch sequence, but will in this case
> + fold the comparison to a constant, and thus elide the branch. */
> + if (CONSTANT_P (op0) && CONSTANT_P (op1))
> + return 0;
> +
> tem = emit_store_flag_1 (target, code, op0, op1, mode, unsignedp, normalizep,
> target_mode);
> if (tem)
Jakub
More information about the Gcc-patches
mailing list