From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 388 invoked by alias); 23 Sep 2004 10:39:17 -0000 Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org Received: (qmail 376 invoked by uid 48); 23 Sep 2004 10:39:17 -0000 Date: Thu, 23 Sep 2004 10:39:00 -0000 Message-ID: <20040923103916.375.qmail@sourceware.org> From: "rakdver at gcc dot gnu dot org" To: gcc-bugs@gcc.gnu.org In-Reply-To: <20040923005754.17625.dalej@apple.com> References: <20040923005754.17625.dalej@apple.com> Reply-To: gcc-bugzilla@gcc.gnu.org Subject: [Bug rtl-optimization/17625] [4.0 Regression] ICE on legal (doloop creates shared RTL) X-Bugzilla-Reason: CC X-SW-Source: 2004-09/txt/msg02722.txt.bz2 List-Id: ------- Additional Comments From rakdver at gcc dot gnu dot org 2004-09-23 10:39 ------- The fix should be basically OK, except that it would be a bit safer to unshare the count earlier; I am testing this patch. Index: loop-doloop.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/loop-doloop.c,v retrieving revision 2.7 diff -c -3 -p -r2.7 loop-doloop.c *** loop-doloop.c 10 Sep 2004 11:02:24 -0000 2.7 --- loop-doloop.c 23 Sep 2004 10:37:00 -0000 *************** doloop_modify (struct loop *loop, struct *** 292,298 **** if (GET_CODE (counter_reg) == PLUS) counter_reg = XEXP (counter_reg, 0); ! count = desc->niter_expr; increment_count = false; switch (GET_CODE (condition)) { --- 292,298 ---- if (GET_CODE (counter_reg) == PLUS) counter_reg = XEXP (counter_reg, 0); ! count = copy_rtx (desc->niter_expr); increment_count = false; switch (GET_CODE (condition)) { *************** doloop_modify (struct loop *loop, struct *** 345,351 **** if (desc->noloop_assumptions) { ! rtx ass = desc->noloop_assumptions; basic_block preheader = loop_preheader_edge (loop)->src; basic_block set_zero = loop_split_edge_with (loop_preheader_edge (loop), NULL_RTX); --- 345,351 ---- if (desc->noloop_assumptions) { ! rtx ass = copy_rtx (desc->noloop_assumptions); basic_block preheader = loop_preheader_edge (loop)->src; basic_block set_zero = loop_split_edge_with (loop_preheader_edge (loop), NULL_RTX); -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17625