On 8 November 2013 15:50, Steven Bosscher <stevenb....@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.renne...@embecosm.com>

        PR middle-end/59049
        * expmed.c (emit_store_flag): Fail for const-const comparison.

Index: expmed.c
===================================================================
--- 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)

Reply via email to