From: Jan Hubicka Date: Sat, 25 Jan 2003 14:42:49 +0000 (+0100) Subject: re PR rtl-optimization/9258 (ICE in compensate_edge, at reg-stack.c:2589) X-Git-Tag: releases/gcc-3.2.2~86 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ecfb03cfc9d0a10c9cd23f37be76af3f67c66ab9;p=thirdparty%2Fgcc.git re PR rtl-optimization/9258 (ICE in compensate_edge, at reg-stack.c:2589) PR fortran/9258 * global.c (struct allocno): Add no_stack_reg. (global_conflicts): Set no_stack_reg. (find_reg): Use it. From-SVN: r61770 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 04f8869e021e..a443a1813062 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-01-25 Jan Hubicka + + PR fortran/9258 + * global.c (struct allocno): Add no_stack_reg. + (global_conflicts): Set no_stack_reg. + (find_reg): Use it. + 2003-01-24 Volker Reichelt * doc/passes.texi: Fix typo. diff --git a/gcc/global.c b/gcc/global.c index 0d9618c27b72..383f6c4943c9 100644 --- a/gcc/global.c +++ b/gcc/global.c @@ -130,6 +130,11 @@ struct allocno /* Set of hard registers that some later allocno has a preference for. */ HARD_REG_SET regs_someone_prefers; + +#ifdef STACK_REGS + /* Set to true if allocno can't be allocated in the stack register. */ + bool no_stack_reg; +#endif }; static struct allocno *allocno; @@ -717,8 +722,14 @@ global_conflicts () if (e->flags & EDGE_ABNORMAL) break; if (e != NULL) - for (ax = FIRST_STACK_REG; ax <= LAST_STACK_REG; ax++) - record_one_conflict (ax); + { + EXECUTE_IF_SET_IN_ALLOCNO_SET (allocnos_live, ax, + { + allocno[ax].no_stack_reg = 1; + }); + for (ax = FIRST_STACK_REG; ax <= LAST_STACK_REG; ax++) + record_one_conflict (ax); + } } #endif } @@ -1216,6 +1227,10 @@ find_reg (num, losers, alt_regs_p, accept_call_clobbered, retrying) && (TEST_HARD_REG_BIT (reg_class_contents[(int) CLASS_CANNOT_CHANGE_MODE], regno))) +#endif +#ifdef STACK_REGS + && (!allocno[num].no_stack_reg + || regno < FIRST_STACK_REG || regno > LAST_STACK_REG) #endif ) { diff --git a/gcc/testsuite/g77.dg/pr9258.f b/gcc/testsuite/g77.dg/pr9258.f new file mode 100644 index 000000000000..1bae92079950 --- /dev/null +++ b/gcc/testsuite/g77.dg/pr9258.f @@ -0,0 +1,18 @@ +C Test case for PR fortran/9258 +C Origin: kmccarty@Princeton.EDU +C +C { dg-do compile } + SUBROUTINE FOO (B) + + 10 CALL BAR(A) + ASSIGN 20 TO M + IF(100.LT.A) GOTO 10 + GOTO 40 +C + 20 IF(B.LT.ABS(A)) GOTO 10 + ASSIGN 30 TO M + GOTO 40 +C + 30 ASSIGN 10 TO M + 40 GOTO M,(10,20,30) + END