summaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2011-10-21 11:50:42 +0000
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>2011-10-21 11:50:42 +0000
commite3a0dde2af4f9437f45dd6e296e8969c2a478542 (patch)
tree9ac919557fdac1b5fb2da7af700ccda6d7a9e938 /gcc/fold-const.c
parentf5c29b0ec0b42e0cb651b123a9541f7f566b845e (diff)
downloadgcc-e3a0dde2af4f9437f45dd6e296e8969c2a478542.tar.gz
* gcc.target/i386/branch-cost1.c: New test.
* gcc.target/i386/branch-cost2.c: New test. * gcc.target/i386/branch-cost3.c: New test. * gcc.target/i386/branch-cost4.c: New test. * fold-const.c (simple_operand_p_2): Handle integral casts from boolean-operands. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180295 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index dc14576c1ad..a838c345881 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -3695,23 +3695,23 @@ simple_operand_p (const_tree exp)
/* Subroutine for fold_truth_andor: determine if an operand is simple enough
to be evaluated unconditionally.
- I addition to simple_operand_p, we assume that comparisons and logic-not
- operations are simple, if their operands are simple, too. */
+ I addition to simple_operand_p, we assume that comparisons, conversions,
+ and logic-not operations are simple, if their operands are simple, too. */
static bool
simple_operand_p_2 (tree exp)
{
enum tree_code code;
- /* Strip any conversions that don't change the machine mode. */
- STRIP_NOPS (exp);
-
- code = TREE_CODE (exp);
-
if (TREE_SIDE_EFFECTS (exp)
|| tree_could_trap_p (exp))
return false;
+ while (CONVERT_EXPR_P (exp))
+ exp = TREE_OPERAND (exp, 0);
+
+ code = TREE_CODE (exp);
+
if (TREE_CODE_CLASS (code) == tcc_comparison)
return (simple_operand_p (TREE_OPERAND (exp, 0))
&& simple_operand_p (TREE_OPERAND (exp, 1)));