From b2b262e3833249730f75bfb40fe842a0d5990e80 Mon Sep 17 00:00:00 2001 From: Joern Rennecke Date: Mon, 11 Nov 2013 18:57:25 +0000 Subject: [PATCH] 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 --- gcc/ChangeLog | 5 +++++ gcc/expmed.c | 7 +++++++ 2 files changed, 12 insertions(+) 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)