diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-35.c | 15 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 4 |
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e81d6da..641bdff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2015-04-13 Richard Biener <rguenther@suse.de> + PR tree-optimization/65204 + * tree-ssa-ccp.c (evaluate_stmt): Always evaluate address + takens for bit-CCP. + +2015-04-13 Richard Biener <rguenther@suse.de> + PR target/65660 * config/i386/i386.c (bdver1_cost): Double cond_taken_branch_cost and cond_not_taken_branch_cost to 4 and 2. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5b0cdc3..377f5d9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-04-13 Richard Biener <rguenther@suse.de> + + PR tree-optimization/65204 + * gcc.dg/tree-ssa/ssa-ccp-35.c: New testcase. + 2015-04-13 Terry Guo <terry.guo@arm.com> PR target/65710 diff --git a/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-35.c b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-35.c new file mode 100644 index 0000000..7cf3a4c --- /dev/null +++ b/gcc/testsuite/gcc.dg/tree-ssa/ssa-ccp-35.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-ccp1" } */ + +typedef char char16[16] __attribute__ ((aligned (16))); +char16 c16[4] __attribute__ ((aligned (4))); + +int f5 (int i) +{ + __SIZE_TYPE__ s = (__SIZE_TYPE__)&c16[i]; + /* 0 */ + return 3 & s; +} + +/* { dg-final { scan-tree-dump "return 0;" "ccp1" } } */ +/* { dg-final { cleanup-tree-dump "ccp1" } } */ diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index d45a3ff..9fbea3a 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -1748,7 +1748,9 @@ evaluate_stmt (gimple stmt) /* Resort to simplification for bitwise tracking. */ if (flag_tree_bit_ccp - && (likelyvalue == CONSTANT || is_gimple_call (stmt)) + && (likelyvalue == CONSTANT || is_gimple_call (stmt) + || (gimple_assign_single_p (stmt) + && gimple_assign_rhs_code (stmt) == ADDR_EXPR)) && !is_constant) { enum gimple_code code = gimple_code (stmt); |