From 7ea84dc44cd48f9b7833248a2f0b716bbf37df2b Mon Sep 17 00:00:00 2001 From: Maxim Kuvyrkov Date: Fri, 6 Oct 2006 21:45:13 +0000 Subject: re PR rtl-optimization/29128 (ICE: in move_block_after_check, at haifa-sched.c:4337) 2006-10-06 Maxim Kuvyrkov PR rtl-optimization/29128 * sched-int.h (IS_SPECULATION_BRANCHY_CHECK_P): New macro. * sched-ebb.c (advance_target_bb): Use it to fix condition to allow interblock movement of speculation checks. * gcc.c-torture/compile/pr29128.c: New test. From-SVN: r117515 --- gcc/sched-int.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'gcc/sched-int.h') diff --git a/gcc/sched-int.h b/gcc/sched-int.h index 3ce0379..3865013 100644 --- a/gcc/sched-int.h +++ b/gcc/sched-int.h @@ -359,6 +359,13 @@ extern regset *glat_start, *glat_end; #define RECOVERY_BLOCK(INSN) (h_i_d[INSN_UID (INSN)].recovery_block) #define ORIG_PAT(INSN) (h_i_d[INSN_UID (INSN)].orig_pat) +/* INSN is a speculation check that will branch to RECOVERY_BLOCK if the + speculation fail. Insns in that block will reexecute the speculatively + scheduled code and then will return immediatelly after INSN thus preserving + semantics of the program. */ +#define IS_SPECULATION_BRANCHY_CHECK_P(INSN) \ + (RECOVERY_BLOCK (INSN) != NULL && RECOVERY_BLOCK (INSN) != EXIT_BLOCK_PTR) + /* DEP_STATUS of the link encapsulates information, that is needed for speculative scheduling. Namely, it is 4 integers in the range [0, MAX_DEP_WEAK] and 3 bits. -- cgit v1.1