From: Kai Tietz Date: Fri, 21 Oct 2011 11:50:42 +0000 (+0200) Subject: branch-cost1.c: New test. X-Git-Tag: releases/gcc-4.7.0~2921 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bb35fdd04a97dc08eb7cc391dfcf0bbe2a90501a;p=thirdparty%2Fgcc.git branch-cost1.c: New test. * 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. From-SVN: r180295 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 235016536ba7..49c9a3077c22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2011-10-21 Kai Tietz + + * fold-const.c (simple_operand_p_2): Handle integral + casts from boolean-operands. + 2011-10-21 Jan Hubicka * cgraph.c (dump_cgraph_node): Dump alias flag. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index dc14576c1ad5..a838c3458819 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))); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8f1a1b394c18..c5e52a3715e5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2011-10-21 Kai Tietz + + * 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 * gcc.dg/vect/vect-120.c: Add vect_floatint_cvt requirement. diff --git a/gcc/testsuite/gcc.target/i386/branch-cost1.c b/gcc/testsuite/gcc.target/i386/branch-cost1.c new file mode 100644 index 000000000000..ed873fa71369 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/branch-cost1.c @@ -0,0 +1,16 @@ +/* { 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" } } */ diff --git a/gcc/testsuite/gcc.target/i386/branch-cost2.c b/gcc/testsuite/gcc.target/i386/branch-cost2.c new file mode 100644 index 000000000000..4d754d57b964 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/branch-cost2.c @@ -0,0 +1,16 @@ +/* { 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" } } */ diff --git a/gcc/testsuite/gcc.target/i386/branch-cost3.c b/gcc/testsuite/gcc.target/i386/branch-cost3.c new file mode 100644 index 000000000000..3b69f503fcc4 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/branch-cost3.c @@ -0,0 +1,16 @@ +/* { 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" } } */ diff --git a/gcc/testsuite/gcc.target/i386/branch-cost4.c b/gcc/testsuite/gcc.target/i386/branch-cost4.c new file mode 100644 index 000000000000..5904b0da2b27 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/branch-cost4.c @@ -0,0 +1,16 @@ +/* { 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" } } */