From 383898f7654cd9e2db0586fa2ff18ec933a61a81 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 26 May 2005 10:07:30 +0200 Subject: [PATCH] re PR target/21716 (ICE in reg-stack.c's swap_rtx_condition) PR target/21716 * reg-stack.c (swap_rtx_condition): Don't crash if %ax user was not found in the basic block and last insn in the basic block is not INSN_P. Remove explicit unspec numbers that are no longer valid from comments. From-SVN: r100196 --- gcc/ChangeLog | 8 ++++++++ gcc/reg-stack.c | 14 +++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 73e46756c09..dbf8fc49b68 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-05-26 Jakub Jelinek + + PR target/21716 + * reg-stack.c (swap_rtx_condition): Don't crash if %ax user was not + found in the basic block and last insn in the basic block is not + INSN_P. Remove explicit unspec numbers that are no longer valid + from comments. + 2005-05-26 Paolo Bonzini * tree-vect-transform.c (vectorizable_operation): Try word_mode diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index a49d9e9a108..acf5f41d030 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -1231,9 +1231,9 @@ swap_rtx_condition (rtx insn) pat = PATTERN (insn); } - /* See if this is, or ends in, a fnstsw, aka unspec 9. If so, we're - not doing anything with the cc value right now. We may be able to - search for one though. */ + /* See if this is, or ends in, a fnstsw. If so, we're not doing anything + with the cc value right now. We may be able to search for one + though. */ if (GET_CODE (pat) == SET && GET_CODE (SET_SRC (pat)) == UNSPEC @@ -1252,9 +1252,13 @@ swap_rtx_condition (rtx insn) return 0; } + /* We haven't found it. */ + if (insn == BB_END (current_block)) + return 0; + /* So we've found the insn using this value. If it is anything - other than sahf, aka unspec 10, or the value does not die - (meaning we'd have to search further), then we must give up. */ + other than sahf or the value does not die (meaning we'd have + to search further), then we must give up. */ pat = PATTERN (insn); if (GET_CODE (pat) != SET || GET_CODE (SET_SRC (pat)) != UNSPEC