aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-if-conv.c
diff options
context:
space:
mode:
authorYuri Rumyantsev <ysrumyan@gmail.com>2014-12-01 12:19:28 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2014-12-01 12:19:28 +0000
commitc78f1e25a5b020c1b72b16263a439f869ab0f696 (patch)
tree9e9c54f55ed3a87fa7449d607abf74a9e6067d4b /gcc/tree-if-conv.c
parent64e5228e15ec4f5ccd9ba9ea309ddbeea678f447 (diff)
downloadgcc-c78f1e25a5b020c1b72b16263a439f869ab0f696.zip
gcc-c78f1e25a5b020c1b72b16263a439f869ab0f696.tar.gz
gcc-c78f1e25a5b020c1b72b16263a439f869ab0f696.tar.bz2
re PR tree-optimization/63941 (ICE on valid code at -O3 and above on x86_64-linux-gnu)
gcc/ PR tree-optimization/63941 * tree-if-conv.c (add_to_predicate_list): Delete wrong assertion that DOM_BB has non-true predicate, conditionally set non-true predicate for BB. gcc/testsuite/ PR tree-optimization/63941 * gcc.dg/torture/pr63941.c: New test. From-SVN: r218206
Diffstat (limited to 'gcc/tree-if-conv.c')
-rw-r--r--gcc/tree-if-conv.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/tree-if-conv.c b/gcc/tree-if-conv.c
index f7befac..269fda5 100644
--- a/gcc/tree-if-conv.c
+++ b/gcc/tree-if-conv.c
@@ -435,8 +435,10 @@ add_to_predicate_list (struct loop *loop, basic_block bb, tree nc)
{
gcc_assert (flow_bb_inside_loop_p (loop, dom_bb));
bc = bb_predicate (dom_bb);
- gcc_assert (!is_true_predicate (bc));
- set_bb_predicate (bb, bc);
+ if (!is_true_predicate (bc))
+ set_bb_predicate (bb, bc);
+ else
+ gcc_assert (is_true_predicate (bb_predicate (bb)));
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "Use predicate of bb#%d for bb#%d\n",
dom_bb->index, bb->index);