From: Joern Rennecke Date: Mon, 11 Nov 2013 18:57:25 +0000 (+0000) Subject: re PR middle-end/59049 (Two VOIDmode constant in comparison passed to cstoresi4) X-Git-Tag: releases/gcc-4.9.0~2888 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b2b262e3833249730f75bfb40fe842a0d5990e80;p=thirdparty%2Fgcc.git re PR middle-end/59049 (Two VOIDmode constant in comparison passed to cstoresi4) PR middle-end/59049 * expmed.c (emit_store_flag): Fail for const-const comparison. From-SVN: r204682 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ca7e6a01f0ce..0fcb06ee2bf8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2013-11-11 Joern Rennecke + + PR middle-end/59049 + * expmed.c (emit_store_flag): Fail for const-const comparison. + 2013-11-11 Tristan Gingold Eric Botcazou diff --git a/gcc/expmed.c b/gcc/expmed.c index 59f81df5adff..1617bc05aa10 100644 --- a/gcc/expmed.c +++ b/gcc/expmed.c @@ -5401,6 +5401,13 @@ emit_store_flag (rtx target, enum rtx_code code, rtx op0, rtx op1, 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 NULL_RTX; + tem = emit_store_flag_1 (target, code, op0, op1, mode, unsignedp, normalizep, target_mode); if (tem)