* 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
+2011-10-21 Kai Tietz <ktietz@redhat.com>
+
+ * fold-const.c (simple_operand_p_2): Handle integral
+ casts from boolean-operands.
+
2011-10-21 Jan Hubicka <jh@suse.cz>
* cgraph.c (dump_cgraph_node): Dump alias flag.
/* 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)));
+2011-10-21 Kai Tietz <ktietz@redhat.com>
+
+ * 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.
+
2011-10-20 Steve Ellcey <sje@cup.hp.com>
* gcc.dg/vect/vect-120.c: Add vect_floatint_cvt requirement.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-gimple -mbranch-cost=0" } */
+
+extern int doo (void);
+
+int
+foo (int a, int b)
+{
+ if (a && b)
+ return doo ();
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "if " 2 "gimple" } } */
+/* { dg-final { scan-tree-dump-not " & " "gimple" } } */
+/* { dg-final { cleanup-tree-dump "gimple" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-gimple -mbranch-cost=2" } */
+
+extern int doo (void);
+
+int
+foo (int a, int b)
+{
+ if (a && b)
+ return doo ();
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "if " 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times " & " 1 "gimple" } } */
+/* { dg-final { cleanup-tree-dump "gimple" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-gimple -mbranch-cost=2" } */
+
+extern int doo (void);
+
+int
+foo (_Bool a, _Bool b)
+{
+ if (a && b)
+ return doo ();
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "if " 1 "gimple" } } */
+/* { dg-final { scan-tree-dump-times " & " 1 "gimple" } } */
+/* { dg-final { cleanup-tree-dump "gimple" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-gimple -mbranch-cost=0" } */
+
+extern int doo (void);
+
+int
+foo (_Bool a, _Bool b)
+{
+ if (a && b)
+ return doo ();
+ return 0;
+}
+
+/* { dg-final { scan-tree-dump-times "if " 2 "gimple" } } */
+/* { dg-final { scan-tree-dump-not " & " "gimple" } } */
+/* { dg-final { cleanup-tree-dump "gimple" } } */