diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ca7e6a01f0c..0fcb06ee2bf 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 59f81df5adf..1617bc05aa1 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)