mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-16 00:50:48 +08:00
re PR tree-optimization/56415 (Performance regression after fix for 56273)
2013-02-21 Richard Biener <rguenther@suse.de> PR tree-optimization/56415 Revert 2013-02-11 Richard Biener <rguenther@suse.de> PR tree-optimization/56273 * tree-vrp.c (simplify_cond_using_ranges): Disable for the first VRP run. * g++.dg/warn/Warray-bounds-6.C: New testcase. * gcc.dg/tree-ssa/pr21559.c: Adjust. * gcc.dg/tree-ssa/vrp17.c: Likewise. * gcc.dg/tree-ssa/vrp18.c: Likewise. * gcc.dg/tree-ssa/vrp23.c: Likewise. * gcc.dg/tree-ssa/vrp24.c: Likewise. From-SVN: r196200
This commit is contained in:
parent
267499fa59
commit
22deefcbb7
@ -1,3 +1,13 @@
|
||||
2013-02-21 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56415
|
||||
Revert
|
||||
2013-02-11 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56273
|
||||
* tree-vrp.c (simplify_cond_using_ranges): Disable for the
|
||||
first VRP run.
|
||||
|
||||
2013-02-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR bootstrap/56258
|
||||
|
@ -1,3 +1,17 @@
|
||||
2013-02-21 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56415
|
||||
Revert
|
||||
2013-02-11 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/56273
|
||||
* g++.dg/warn/Warray-bounds-6.C: New testcase.
|
||||
* gcc.dg/tree-ssa/pr21559.c: Adjust.
|
||||
* gcc.dg/tree-ssa/vrp17.c: Likewise.
|
||||
* gcc.dg/tree-ssa/vrp18.c: Likewise.
|
||||
* gcc.dg/tree-ssa/vrp23.c: Likewise.
|
||||
* gcc.dg/tree-ssa/vrp24.c: Likewise.
|
||||
|
||||
2013-02-21 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR tree-optimization/56398
|
||||
|
@ -1,30 +0,0 @@
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O3 -Warray-bounds" }
|
||||
|
||||
struct type {
|
||||
bool a, b;
|
||||
bool get_b() { return b; }
|
||||
};
|
||||
|
||||
type stuff[9u];
|
||||
|
||||
void bar();
|
||||
|
||||
void foo() {
|
||||
|
||||
for(unsigned i = 0u; i < 9u; i++) {
|
||||
|
||||
if(!stuff[i].a) {
|
||||
continue;
|
||||
}
|
||||
|
||||
bar();
|
||||
|
||||
for(unsigned j = i + 1u; j < 9u; j++) {
|
||||
if(stuff[j].a && stuff[j].get_b()) { // { dg-bogus "array bounds" }
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-vrp-details" } */
|
||||
/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
|
||||
|
||||
static int blocksize = 4096;
|
||||
|
||||
@ -32,7 +32,7 @@ void foo (void)
|
||||
|
||||
|
||||
/* First, we should simplify the bits < 0 test within the loop. */
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp2" } } */
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */
|
||||
|
||||
/* Second, we should thread the edge out of the loop via the break
|
||||
statement. We also realize that the final bytes == 0 test is useless,
|
||||
@ -40,4 +40,4 @@ void foo (void)
|
||||
/* { dg-final { scan-tree-dump-times "Threaded jump" 3 "vrp1" } } */
|
||||
|
||||
/* { dg-final { cleanup-tree-dump "vrp1" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp2" } } */
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-tail-merge -fdump-tree-vrp2" } */
|
||||
/* { dg-options "-O2 -fdump-tree-vrp1" } */
|
||||
|
||||
extern void abort (void) __attribute__ ((__noreturn__));
|
||||
union tree_node;
|
||||
@ -27,5 +27,6 @@ gimplify_for_stmt (tree stmt)
|
||||
abort ();
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp2" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp2" } } */
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp1" } } */
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-vrp2" } */
|
||||
/* { dg-options "-O2 -fdump-tree-vrp1" } */
|
||||
|
||||
static int blocksize = 4096;
|
||||
|
||||
@ -30,5 +30,5 @@ void foo (void)
|
||||
eof_reached = 1;
|
||||
}
|
||||
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp2" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp2" } } */
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp1" } } */
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-vrp2-details" } */
|
||||
/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
|
||||
|
||||
blah (int code1, int code2)
|
||||
{
|
||||
@ -40,5 +40,6 @@ L8:
|
||||
/* The n_sets > 0 test can be simplified into n_sets == 1 since the
|
||||
only way to reach the test is when n_sets <= 1, and the only value
|
||||
which satisfies both conditions is n_sets == 1. */
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp2" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp2" } } */
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 1 "vrp1" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp1" } } */
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fno-tree-dominator-opts -fdump-tree-vrp2-details" } */
|
||||
/* { dg-options "-O2 -fdump-tree-vrp1-details" } */
|
||||
|
||||
|
||||
struct rtx_def;
|
||||
typedef struct rtx_def *rtx;
|
||||
@ -85,5 +86,6 @@ L7:
|
||||
The second n_sets > 0 test can also be simplified into n_sets == 1
|
||||
as the only way to reach the tests is when n_sets <= 1 and the only
|
||||
value which satisfies both conditions is n_sets == 1. */
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 2 "vrp2" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp2" } } */
|
||||
/* { dg-final { scan-tree-dump-times "Simplified relational" 2 "vrp1" } } */
|
||||
/* { dg-final { cleanup-tree-dump "vrp1" } } */
|
||||
|
||||
|
@ -8503,8 +8503,9 @@ test_for_singularity (enum tree_code cond_code, tree op0,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Simplify the conditional stmt STMT using final range information.
|
||||
Return true if we simplified the statement. */
|
||||
/* Simplify a conditional using a relational operator to an equality
|
||||
test if the range information indicates only one value can satisfy
|
||||
the original conditional. */
|
||||
|
||||
static bool
|
||||
simplify_cond_using_ranges (gimple stmt)
|
||||
@ -8513,13 +8514,7 @@ simplify_cond_using_ranges (gimple stmt)
|
||||
tree op1 = gimple_cond_rhs (stmt);
|
||||
enum tree_code cond_code = gimple_cond_code (stmt);
|
||||
|
||||
/* Simplify a conditional using a relational operator to an equality
|
||||
test if the range information indicates only one value can satisfy
|
||||
the original conditional.
|
||||
Do that only in the second VRP pass as otherwise assertions derived
|
||||
from this predicate are weakened. */
|
||||
if (!first_pass_instance
|
||||
&& cond_code != NE_EXPR
|
||||
if (cond_code != NE_EXPR
|
||||
&& cond_code != EQ_EXPR
|
||||
&& TREE_CODE (op0) == SSA_NAME
|
||||
&& INTEGRAL_TYPE_P (TREE_TYPE (op0))
|
||||
|
Loading…
x
Reference in New Issue
Block a user