From 5feec5c1de0a23ba2cd8ddf98617b02c033b0b03 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Thu, 4 Sep 2008 19:02:33 +0000 Subject: [PATCH] re PR middle-end/37359 (IRA miscompiled transfer.o in libgfortran, sejmp) 2008-09-04 Vladimir Makarov PR middle-end/37359 * ira-lives.c (process_bb_node_lives): Check setjmp. From-SVN: r139996 --- gcc/ChangeLog | 5 +++++ gcc/ira-lives.c | 9 ++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e4e254c106d..867f9264010 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2008-09-04 Vladimir Makarov + + PR middle-end/37359 + * ira-lives.c (process_bb_node_lives): Check setjmp. + 2008-09-04 Richard Sandiford PR middle-end/37243 diff --git a/gcc/ira-lives.c b/gcc/ira-lives.c index 73cc0623513..a66bbf6698c 100644 --- a/gcc/ira-lives.c +++ b/gcc/ira-lives.c @@ -714,9 +714,12 @@ process_bb_node_lives (ira_loop_tree_node_t loop_tree_node) ALLOCNO_CALL_FREQ (a) += freq; ALLOCNO_CALLS_CROSSED_NUM (a)++; - /* Don't allocate allocnos that cross calls, if this - function receives a nonlocal goto. */ - if (cfun->has_nonlocal_label) + /* Don't allocate allocnos that cross setjmps or any + call, if this function receives a nonlocal + goto. */ + if (cfun->has_nonlocal_label + || find_reg_note (insn, REG_SETJMP, + NULL_RTX) != NULL_RTX) { SET_HARD_REG_SET (ALLOCNO_CONFLICT_HARD_REGS (a)); SET_HARD_REG_SET (ALLOCNO_TOTAL_CONFLICT_HARD_REGS (a));