------- Additional Comments From dpatel at apple dot com 2004-11-18 02:33 ------- Subject: Re: ICE in do_jump, at dojump.c:274
Andrew, You can try following to fix tree level if-conversion. I have not tested it completely yet. - Devang Index: tree-if-conv.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/tree-if-conv.c,v retrieving revision 2.19 diff -Idpatel.pbxuser -c -3 -p -r2.19 tree-if-conv.c *** tree-if-conv.c 16 Nov 2004 20:02:48 -0000 2.19 --- tree-if-conv.c 18 Nov 2004 02:32:03 -0000 *************** add_to_dst_predicate_list (struct loop * *** 639,645 **** new_cond = unshare_expr (cond); else { ! tree tmp_stmt; /* new_cond == prev_cond AND cond */ tree tmp = build (TRUTH_AND_EXPR, boolean_type_node, unshare_expr (prev_cond), cond); --- 639,655 ---- new_cond = unshare_expr (cond); else { ! tree tmp_stmt = NULL_TREE; ! tree tmp_stmts1 = NULL_TREE; ! tree tmp_stmts2 = NULL_TREE; ! prev_cond = force_gimple_operand (unshare_expr (prev_cond), &tmp_stmts1, true, NULL); ! if (tmp_stmts1) ! bsi_insert_before (bsi, tmp_stmts1, BSI_SAME_STMT); ! ! cond = force_gimple_operand (unshare_expr (cond), &tmp_stmts2, true, NULL); ! if (tmp_stmts2) ! bsi_insert_before (bsi, tmp_stmts2, BSI_SAME_STMT); ! /* new_cond == prev_cond AND cond */ tree tmp = build (TRUTH_AND_EXPR, boolean_type_node, unshare_expr (prev_cond), cond); -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18308