diff options
author | Jakub Jelinek <jakub@redhat.com> | 2013-08-18 17:23:24 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2013-08-18 17:23:24 +0200 |
commit | 29b894421e0f072bc12048b5eebfabc7edc11d85 (patch) | |
tree | 2669840759a69cb8cbe81285f397da005589e40b /gcc/tree-parloops.c | |
parent | 4f219961f049e3125a4f5f02c287db0a1f4b8143 (diff) | |
download | gcc-29b894421e0f072bc12048b5eebfabc7edc11d85.tar.gz |
re PR tree-optimization/58006 (ICE compiling VegaStrike with -ffast-math -ftree-parallelize-loops=2)
PR tree-optimization/58006
* tree-parloops.c (take_address_of): Don't ICE if get_name
returns NULL.
(eliminate_local_variables_stmt): Remove clobber stmts.
* g++.dg/opt/pr58006.C: New test.
From-SVN: r201827
Diffstat (limited to 'gcc/tree-parloops.c')
-rw-r--r-- | gcc/tree-parloops.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c index cea6f030c0a..04167455915 100644 --- a/gcc/tree-parloops.c +++ b/gcc/tree-parloops.c @@ -494,9 +494,12 @@ take_address_of (tree obj, tree type, edge entry, if (gsi == NULL) return NULL; addr = TREE_OPERAND (*var_p, 0); - name = make_temp_ssa_name (TREE_TYPE (addr), NULL, - get_name (TREE_OPERAND - (TREE_OPERAND (*var_p, 0), 0))); + const char *obj_name + = get_name (TREE_OPERAND (TREE_OPERAND (*var_p, 0), 0)); + if (obj_name) + name = make_temp_ssa_name (TREE_TYPE (addr), NULL, obj_name); + else + name = make_ssa_name (TREE_TYPE (addr), NULL); stmt = gimple_build_assign (name, addr); gsi_insert_on_edge_immediate (entry, stmt); @@ -694,6 +697,12 @@ eliminate_local_variables_stmt (edge entry, gimple_stmt_iterator *gsi, dta.changed = true; } } + else if (gimple_clobber_p (stmt)) + { + stmt = gimple_build_nop (); + gsi_replace (gsi, stmt, false); + dta.changed = true; + } else { dta.gsi = gsi; |