aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-data-ref.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2012-04-03 10:49:14 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2012-04-03 10:49:14 +0200
commit8a1da634352052e0094ae44c31360e3976239542 (patch)
tree6a0fe81981a99e6ecad3a8b44a0a72dfcf8f7bbd /gcc/tree-data-ref.c
parent1d3aa4665083eb2bcd1d394f935afc2aa4c34666 (diff)
downloadgcc-8a1da634352052e0094ae44c31360e3976239542.zip
gcc-8a1da634352052e0094ae44c31360e3976239542.tar.gz
gcc-8a1da634352052e0094ae44c31360e3976239542.tar.bz2
re PR middle-end/52835 (-O3 wrongly optimizes loop __builtin_memcpy away)
PR tree-optimization/52835 * tree-data-ref.c (build_rdg): Return NULL if compute_data_dependences_for_loop failed. * gfortran.dg/pr52835.f90: New test. From-SVN: r186101
Diffstat (limited to 'gcc/tree-data-ref.c')
-rw-r--r--gcc/tree-data-ref.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/gcc/tree-data-ref.c b/gcc/tree-data-ref.c
index 5dcafd3..6fb0d23 100644
--- a/gcc/tree-data-ref.c
+++ b/gcc/tree-data-ref.c
@@ -5109,20 +5109,19 @@ build_rdg (struct loop *loop,
VEC (data_reference_p, heap) **datarefs)
{
struct graph *rdg = NULL;
- VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, 10);
- compute_data_dependences_for_loop (loop, false, loop_nest, datarefs,
- dependence_relations);
-
- if (known_dependences_p (*dependence_relations))
+ if (compute_data_dependences_for_loop (loop, false, loop_nest, datarefs,
+ dependence_relations)
+ && known_dependences_p (*dependence_relations))
{
+ VEC (gimple, heap) *stmts = VEC_alloc (gimple, heap, 10);
stmts_from_loop (loop, &stmts);
rdg = build_empty_rdg (VEC_length (gimple, stmts));
create_rdg_vertices (rdg, stmts);
create_rdg_edges (rdg, *dependence_relations);
+ VEC_free (gimple, heap, stmts);
}
- VEC_free (gimple, heap, stmts);
return rdg;
}