diff options
author | Jan Hubicka <jh@suse.cz> | 2012-10-25 16:52:32 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2012-10-25 14:52:32 +0000 |
commit | a093356aba118841c901f3667a99b5250a8e3b18 (patch) | |
tree | 4ea7a5db9dd46f6e2bcb5902d32cc1518ce78171 /gcc/tree-ssa-loop-ivcanon.c | |
parent | 93100c6b5b45c39b54b25beb5d77e50ea9caa047 (diff) | |
download | gcc-a093356aba118841c901f3667a99b5250a8e3b18.zip gcc-a093356aba118841c901f3667a99b5250a8e3b18.tar.gz gcc-a093356aba118841c901f3667a99b5250a8e3b18.tar.bz2 |
re PR lto/54980 (gimple check: expected gimple_cond(error_mark), have gimple_call() in gimple_cond_set_lhs, at gimple.h:2578)
PR tree-optimize/54980
* tree-ssa-loop-ivcanon.c (constant_after_peeling): Fix
obvious typo.
(loop_edge_to_cancel): Be sure that the edge is from an conditional
so we can cancel it.
From-SVN: r192809
Diffstat (limited to 'gcc/tree-ssa-loop-ivcanon.c')
-rw-r--r-- | gcc/tree-ssa-loop-ivcanon.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/tree-ssa-loop-ivcanon.c b/gcc/tree-ssa-loop-ivcanon.c index 323045f..3868b45a 100644 --- a/gcc/tree-ssa-loop-ivcanon.c +++ b/gcc/tree-ssa-loop-ivcanon.c @@ -160,7 +160,7 @@ constant_after_peeling (tree op, gimple stmt, struct loop *loop) /* First make fast look if we see constant array inside. */ while (handled_component_p (base)) base = TREE_OPERAND (base, 0); - if ((DECL_P (base) == VAR_DECL + if ((DECL_P (base) && const_value_known_p (base)) || CONSTANT_CLASS_P (base)) { @@ -364,6 +364,10 @@ loop_edge_to_cancel (struct loop *loop) else edge_to_cancel = EDGE_SUCC (edge_to_cancel->src, 0); + /* We only can handle conditionals. */ + if (!(edge_to_cancel->flags & (EDGE_TRUE_VALUE | EDGE_FALSE_VALUE))) + continue; + /* We should never have conditionals in the loop latch. */ gcc_assert (edge_to_cancel->dest != loop->header); |