diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-04-03 10:49:14 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-04-03 10:49:14 +0200 |
commit | 8a1da634352052e0094ae44c31360e3976239542 (patch) | |
tree | 6a0fe81981a99e6ecad3a8b44a0a72dfcf8f7bbd /gcc/tree-data-ref.c | |
parent | 1d3aa4665083eb2bcd1d394f935afc2aa4c34666 (diff) | |
download | gcc-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.c | 11 |
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; } |