mirror of git://gcc.gnu.org/git/gcc.git
tree-vrp.c (find_assert_locations): Pre-seed live bitmaps for loop latches from header PHI arguments from the latch...
* tree-vrp.c (find_assert_locations): Pre-seed live bitmaps for loop
latches from header PHI arguments from the latch edge.
* gcc.dg/unroll_1.c: Add -fno-tree-vrp to dg-options.
* gcc.dg/unroll_2.c: Likewise.
* gcc.dg/unroll_3.c: Likewise.
* gcc.dg/unroll_4.c: Likewise.
* gcc.dg/vrp90.c: New test.
From-SVN: r204515
This commit is contained in:
parent
fe79fc067e
commit
d23c0a32ab
|
|
@ -1,3 +1,9 @@
|
||||||
|
2013-11-07 Richard Biener <rguenther@suse.de>
|
||||||
|
Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* tree-vrp.c (find_assert_locations): Pre-seed live bitmaps for loop
|
||||||
|
latches from header PHI arguments from the latch edge.
|
||||||
|
|
||||||
2013-11-07 Paolo Carlini <paolo.carlini@oracle.com>
|
2013-11-07 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/58176
|
PR c++/58176
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,11 @@
|
||||||
|
2013-11-07 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* gcc.dg/unroll_1.c: Add -fno-tree-vrp to dg-options.
|
||||||
|
* gcc.dg/unroll_2.c: Likewise.
|
||||||
|
* gcc.dg/unroll_3.c: Likewise.
|
||||||
|
* gcc.dg/unroll_4.c: Likewise.
|
||||||
|
* gcc.dg/vrp90.c: New test.
|
||||||
|
|
||||||
2013-11-07 Paolo Carlini <paolo.carlini@oracle.com>
|
2013-11-07 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/58176
|
PR c++/58176
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
/* { dg-do link } */
|
||||||
|
/* { dg-options "-O2 -fdump-tree-vrp1" } */
|
||||||
|
/* { dg-final { scan-tree-dump-not "link_error" "vrp1"} } */
|
||||||
|
/* { dg-final { cleanup-tree-dump "vrp1" } } */
|
||||||
|
|
||||||
|
extern void link_error (void);
|
||||||
|
|
||||||
|
__attribute__((noinline, noclone)) int
|
||||||
|
foo (unsigned int n, int r)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
if (n > 0)
|
||||||
|
{
|
||||||
|
asm ("");
|
||||||
|
if (n < 10)
|
||||||
|
{
|
||||||
|
asm ("");
|
||||||
|
do
|
||||||
|
{
|
||||||
|
--n;
|
||||||
|
r *= 2;
|
||||||
|
if (n >= 9)
|
||||||
|
link_error ();
|
||||||
|
}
|
||||||
|
while (n > 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return r + n;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
foo (7, 2);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/* { dg-do compile } */
|
/* { dg-do compile } */
|
||||||
/* { dg-options "-O2 -fdump-rtl-loop2_unroll=stderr -fno-peel-loops -fdisable-tree-cunroll -fdisable-tree-cunrolli -fenable-rtl-loop2_unroll" } */
|
/* { dg-options "-O2 -fdump-rtl-loop2_unroll=stderr -fno-peel-loops -fno-tree-vrp -fdisable-tree-cunroll -fdisable-tree-cunrolli -fenable-rtl-loop2_unroll" } */
|
||||||
|
|
||||||
unsigned a[100], b[100];
|
unsigned a[100], b[100];
|
||||||
inline void bar()
|
inline void bar()
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/* { dg-do compile } */
|
/* { dg-do compile } */
|
||||||
/* { dg-options "-O2 -fdump-rtl-loop2_unroll -fno-peel-loops -fdisable-tree-cunroll=foo -fdisable-tree-cunrolli=foo -fenable-rtl-loop2_unroll" } */
|
/* { dg-options "-O2 -fdump-rtl-loop2_unroll -fno-peel-loops -fno-tree-vrp -fdisable-tree-cunroll=foo -fdisable-tree-cunrolli=foo -fenable-rtl-loop2_unroll" } */
|
||||||
|
|
||||||
unsigned a[100], b[100];
|
unsigned a[100], b[100];
|
||||||
inline void bar()
|
inline void bar()
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/* { dg-do compile } */
|
/* { dg-do compile } */
|
||||||
/* { dg-options "-O2 -fdump-rtl-loop2_unroll -fno-peel-loops -fdisable-tree-cunroll -fdisable-tree-cunrolli -fenable-rtl-loop2_unroll=foo" } */
|
/* { dg-options "-O2 -fdump-rtl-loop2_unroll -fno-peel-loops -fno-tree-vrp -fdisable-tree-cunroll -fdisable-tree-cunrolli -fenable-rtl-loop2_unroll=foo" } */
|
||||||
|
|
||||||
unsigned a[100], b[100];
|
unsigned a[100], b[100];
|
||||||
inline void bar()
|
inline void bar()
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/* { dg-do compile } */
|
/* { dg-do compile } */
|
||||||
/* { dg-options "-O2 -fdump-rtl-loop2_unroll -fno-peel-loops -fdisable-tree-cunroll -fdisable-tree-cunrolli -fenable-rtl-loop2_unroll=foo2" } */
|
/* { dg-options "-O2 -fdump-rtl-loop2_unroll -fno-peel-loops -fno-tree-vrp -fdisable-tree-cunroll -fdisable-tree-cunrolli -fenable-rtl-loop2_unroll=foo2" } */
|
||||||
|
|
||||||
unsigned a[100], b[100];
|
unsigned a[100], b[100];
|
||||||
inline void bar()
|
inline void bar()
|
||||||
|
|
|
||||||
|
|
@ -5904,6 +5904,34 @@ find_assert_locations (void)
|
||||||
for (i = 0; i < rpo_cnt; ++i)
|
for (i = 0; i < rpo_cnt; ++i)
|
||||||
bb_rpo[rpo[i]] = i;
|
bb_rpo[rpo[i]] = i;
|
||||||
|
|
||||||
|
/* Pre-seed loop latch liveness from loop header PHI nodes. Due to
|
||||||
|
the order we compute liveness and insert asserts we otherwise
|
||||||
|
fail to insert asserts into the loop latch. */
|
||||||
|
loop_p loop;
|
||||||
|
loop_iterator li;
|
||||||
|
FOR_EACH_LOOP (li, loop, 0)
|
||||||
|
{
|
||||||
|
i = loop->latch->index;
|
||||||
|
unsigned int j = single_succ_edge (loop->latch)->dest_idx;
|
||||||
|
for (gimple_stmt_iterator gsi = gsi_start_phis (loop->header);
|
||||||
|
!gsi_end_p (gsi); gsi_next (&gsi))
|
||||||
|
{
|
||||||
|
gimple phi = gsi_stmt (gsi);
|
||||||
|
if (virtual_operand_p (gimple_phi_result (phi)))
|
||||||
|
continue;
|
||||||
|
tree arg = gimple_phi_arg_def (phi, j);
|
||||||
|
if (TREE_CODE (arg) == SSA_NAME)
|
||||||
|
{
|
||||||
|
if (live[i] == NULL)
|
||||||
|
{
|
||||||
|
live[i] = sbitmap_alloc (num_ssa_names);
|
||||||
|
bitmap_clear (live[i]);
|
||||||
|
}
|
||||||
|
bitmap_set_bit (live[i], SSA_NAME_VERSION (arg));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
need_asserts = false;
|
need_asserts = false;
|
||||||
for (i = rpo_cnt - 1; i >= 0; --i)
|
for (i = rpo_cnt - 1; i >= 0; --i)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue