diff options
author | Dorit Nuzman <dorit@il.ibm.com> | 2005-06-02 14:52:18 +0000 |
---|---|---|
committer | Dorit Nuzman <dorit@gcc.gnu.org> | 2005-06-02 14:52:18 +0000 |
commit | ed3c16fbe6ae0685a7617b5287d3de1ff464d5ae (patch) | |
tree | 70efda32e52ad7147632f73b19b89bfc258edbc6 /gcc/tree-vectorizer.c | |
parent | 9419649c017669b08911458bc16ac18e2792bc56 (diff) | |
download | gcc-ed3c16fbe6ae0685a7617b5287d3de1ff464d5ae.zip gcc-ed3c16fbe6ae0685a7617b5287d3de1ff464d5ae.tar.gz gcc-ed3c16fbe6ae0685a7617b5287d3de1ff464d5ae.tar.bz2 |
re PR tree-optimization/21734 (ICE: -ftree-vectorize, segfault)
PR tree-optimization/21734
* tree-vectorizer.c (slpeel_update_phis_for_duplicate_loop): Use the
phi_result when current_def is not available.
(slpeel_update_phi_nodes_for_guard1): Don't fail if current_def is not
available.
From-SVN: r100494
Diffstat (limited to 'gcc/tree-vectorizer.c')
-rw-r--r-- | gcc/tree-vectorizer.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index c8985b9..883f403 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -320,8 +320,11 @@ slpeel_update_phis_for_duplicate_loop (struct loop *orig_loop, new_ssa_name = get_current_def (def); if (!new_ssa_name) - /* Something defined outside of the loop. */ - continue; + { + /* This only happens if there are no definitions + inside the loop. use the phi_result in this case. */ + new_ssa_name = PHI_RESULT (phi_new); + } /* An ordinary ssa name defined in the loop. */ add_phi_arg (phi_new, new_ssa_name, loop_latch_edge (new_loop)); @@ -565,7 +568,12 @@ slpeel_update_phi_nodes_for_guard1 (edge guard_edge, struct loop *loop, else { current_new_name = get_current_def (loop_arg); - gcc_assert (current_new_name); + /* current_def is not available only if the variable does not + change inside the loop, in which case we also don't care + about recording a current_def for it because we won't be + trying to create loop-exit-phis for it. */ + if (!current_new_name) + continue; } #ifdef ENABLE_CHECKING gcc_assert (get_current_def (current_new_name) == NULL_TREE); |