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