diff options
author | Richard Biener <rguenther@suse.de> | 2016-04-18 11:39:04 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-04-18 11:39:04 +0000 |
commit | edd048e29a3b5bce813f26b5b66f40fbe2f50d54 (patch) | |
tree | c5a0950537128282b7fea62dcc5afe5df81856f4 /gcc/tree-ssa-sccvn.c | |
parent | 65833da69d1cb0b57572c2736781d335fced397c (diff) | |
download | gcc-edd048e29a3b5bce813f26b5b66f40fbe2f50d54.zip gcc-edd048e29a3b5bce813f26b5b66f40fbe2f50d54.tar.gz gcc-edd048e29a3b5bce813f26b5b66f40fbe2f50d54.tar.bz2 |
re PR tree-optimization/70701 (incomplete value numbering when memcpy-ing from array)
2016-04-18 Richard Biener <rguenther@suse.de>
PR tree-optimization/70701
* tree-ssa-sccvn.c (vn_reference_lookup_3): Resolve fully constant
references after translating through a memcpy.
* gcc.dg/tree-ssa/ssa-fre-53.c: New testcase.
From-SVN: r235131
Diffstat (limited to 'gcc/tree-ssa-sccvn.c')
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index 8a5b641..e61e033 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -2152,6 +2152,12 @@ vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_, vr->operands[1] = op; vr->hashcode = vn_reference_compute_hash (vr); + /* Try folding the new reference to a constant. */ + tree val = fully_constant_vn_reference_p (vr); + if (val) + return vn_reference_lookup_or_insert_for_pieces + (vuse, vr->set, vr->type, vr->operands, val); + /* Adjust *ref from the new operands. */ if (!ao_ref_init_from_vn_reference (&r, vr->set, vr->type, vr->operands)) return (void *)-1; |