From 24f975d69c5f6de336882aed3185071673ab4090 Mon Sep 17 00:00:00 2001 From: aph Date: Tue, 24 Jul 2001 15:25:51 +0000 Subject: [PATCH] 2001-07-18 Andrew Haley * config/sh/sh.c (barrier_align): Check that an operand really is an insn before extracting its INSN_CODE. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44303 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/sh/sh.c | 36 ++++++++++++++++++++---------------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d2c4334..bea9ac4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-07-18 Andrew Haley + + * config/sh/sh.c (barrier_align): Check that an operand really is + an insn before extracting its INSN_CODE. + 2001-07-24 Andrew Haley * config/sh/sh.h (OVERRIDE_OPTIONS): Add braces to get rid of diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c index ec09d08..a981369 100644 --- a/gcc/config/sh/sh.c +++ b/gcc/config/sh/sh.c @@ -2956,28 +2956,32 @@ barrier_align (barrier_or_label) } if (prev && GET_CODE (prev) == JUMP_INSN - && JUMP_LABEL (prev) - && (jump_to_next || next_real_insn (JUMP_LABEL (prev)) == next + && JUMP_LABEL (prev)) + { + rtx x; + if (jump_to_next + || next_real_insn (JUMP_LABEL (prev)) == next /* If relax_delay_slots() decides NEXT was redundant with some previous instruction, it will have redirected PREV's jump to the following insn. */ || JUMP_LABEL (prev) == next_nonnote_insn (next) /* There is no upper bound on redundant instructions that - might have been skipped, but we must not put an alignment - where none had been before. */ - || (INSN_CODE (NEXT_INSN (NEXT_INSN (PREV_INSN (prev)))) - == CODE_FOR_block_branch_redirect) - || (INSN_CODE (NEXT_INSN (NEXT_INSN (PREV_INSN (prev)))) - == CODE_FOR_indirect_jump_scratch))) - { - rtx pat = PATTERN (prev); - if (GET_CODE (pat) == PARALLEL) - pat = XVECEXP (pat, 0, 0); - if (credit - slot >= (GET_CODE (SET_SRC (pat)) == PC ? 2 : 0)) - return 0; - } + might have been skipped, but we must not put an + alignment where none had been before. */ + || (x = (NEXT_INSN (NEXT_INSN (PREV_INSN (prev)))), + (INSN_P (x) + && (INSN_CODE (x) == CODE_FOR_block_branch_redirect + || INSN_CODE (x) == CODE_FOR_indirect_jump_scratch)))) + { + rtx pat = PATTERN (prev); + if (GET_CODE (pat) == PARALLEL) + pat = XVECEXP (pat, 0, 0); + if (credit - slot >= (GET_CODE (SET_SRC (pat)) == PC ? 2 : 0)) + return 0; + } + } } - + return CACHE_LOG; } -- 2.7.4