diff options
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/haifa-sched.c | 48 | ||||
-rw-r--r-- | gcc/lists.c | 8 | ||||
-rw-r--r-- | gcc/rtl.def | 7 | ||||
-rw-r--r-- | gcc/rtl.h | 5 | ||||
-rw-r--r-- | gcc/sched-int.h | 10 | ||||
-rw-r--r-- | gcc/target.h | 5 |
7 files changed, 34 insertions, 53 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 64bbd15..12d43d4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2006-03-28 Maxim Kuvyrkov <mkuvyrkov@ispras.ru> + + Revert my 2006-03-27 patches. + 2006-03-28 Roger Sayle <roger@eyesopen.com> * fold-const.c (fold_unary) <NOP_EXPR>: Fold (T1)(~(T2)X) as diff --git a/gcc/haifa-sched.c b/gcc/haifa-sched.c index f81344d..56abcda 100644 --- a/gcc/haifa-sched.c +++ b/gcc/haifa-sched.c @@ -1,7 +1,6 @@ /* Instruction scheduling pass. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) @@ -3056,6 +3055,16 @@ try_ready (rtx next) || !RECOVERY_BLOCK (next) || RECOVERY_BLOCK (next) == EXIT_BLOCK_PTR); + if (*ts == 0 && ORIG_PAT (next) && !RECOVERY_BLOCK (next)) + /* We should change pattern of every previously speculative + instruction - and we determine if NEXT was speculative by using + ORIG_PAT field. Except one case - simple checks have ORIG_PAT + pat too, hence we also check for the RECOVERY_BLOCK. */ + { + change_pattern (next, ORIG_PAT (next)); + ORIG_PAT (next) = 0; + } + if (*ts & HARD_DEP) { /* We can't assert (QUEUE_INDEX (next) == QUEUE_NOWHERE) here because @@ -3066,15 +3075,6 @@ try_ready (rtx next) change_queue_index (next, QUEUE_NOWHERE); return -1; } - else if (!(*ts & BEGIN_SPEC) && ORIG_PAT (next) && !RECOVERY_BLOCK (next)) - /* We should change pattern of every previously speculative - instruction - and we determine if NEXT was speculative by using - ORIG_PAT field. Except one case - simple checks have ORIG_PAT - pat too, hence we also check for the RECOVERY_BLOCK. */ - { - change_pattern (next, ORIG_PAT (next)); - ORIG_PAT (next) = 0; - } if (sched_verbose >= 2) { @@ -3312,30 +3312,8 @@ process_insn_depend_be_in_spec (rtx link, rtx twin, ds_t fs) ds = DEP_STATUS (link); - if (/* If we want to create speculative dep. */ - fs - /* And we can do that because this is a true dep. */ - && (ds & DEP_TYPES) == DEP_TRUE) - { - gcc_assert (!(ds & BE_IN_SPEC)); - - if (/* If this dep can be overcomed with 'begin speculation'. */ - ds & BEGIN_SPEC) - /* Then we have a choice: keep the dep 'begin speculative' - or transform it into 'be in speculative'. */ - { - if (/* In try_ready we assert that if insn once became ready - it can be removed from the ready (or queue) list only - due to backend decision. Hence we can't let the - probability of the speculative dep to decrease. */ - dep_weak (ds) <= dep_weak (fs)) - /* Transform it to be in speculative. */ - ds = (ds & ~BEGIN_SPEC) | fs; - } - else - /* Mark the dep as 'be in speculative'. */ - ds |= fs; - } + if (fs && (ds & DEP_TYPES) == DEP_TRUE) + ds = (ds & ~BEGIN_SPEC) | fs; add_back_forw_dep (consumer, twin, REG_NOTE_KIND (link), ds); } diff --git a/gcc/lists.c b/gcc/lists.c index 23529a3..907ccf5 100644 --- a/gcc/lists.c +++ b/gcc/lists.c @@ -1,6 +1,6 @@ /* List management for the GCC expander. Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + 1999, 2003, 2004 Free Software Foundation, Inc. This file is part of GCC. @@ -159,7 +159,7 @@ alloc_EXPR_LIST (int kind, rtx val, rtx next) node available, we'll use it, otherwise a call to gen_rtx_DEPS_LIST is made. */ rtx -alloc_DEPS_LIST (rtx val, rtx next, int ds) +alloc_DEPS_LIST (rtx val, rtx next, HOST_WIDE_INT ds) { rtx r; @@ -169,7 +169,7 @@ alloc_DEPS_LIST (rtx val, rtx next, int ds) unused_deps_list = XEXP (r, 1); XEXP (r, 0) = val; XEXP (r, 1) = next; - XINT (r, 2) = ds; + XWINT (r, 2) = ds; PUT_REG_NOTE_KIND (r, VOIDmode); gcc_assert (GET_CODE (r) == DEPS_LIST); @@ -257,7 +257,7 @@ copy_DEPS_LIST_list (rtx list) while (list) { - *resp = alloc_DEPS_LIST (XEXP (list, 0), 0, XINT (list, 2)); + *resp = alloc_DEPS_LIST (XEXP (list, 0), 0, XWINT (list, 2)); PUT_REG_NOTE_KIND (*resp, REG_NOTE_KIND (list)); resp = &XEXP (*resp, 1); list = XEXP (list, 1); diff --git a/gcc/rtl.def b/gcc/rtl.def index 4c5a632..078f4af 100644 --- a/gcc/rtl.def +++ b/gcc/rtl.def @@ -2,7 +2,7 @@ Register Transfer Expressions (rtx's) that make up the Register Transfer Language (rtl) used in the Back End of the GNU compiler. Copyright (C) 1987, 1988, 1992, 1994, 1995, 1997, 1998, 1999, 2000, 2004, - 2005, 2006 + 2005 Free Software Foundation, Inc. This file is part of GCC. @@ -95,8 +95,9 @@ DEF_RTL_EXPR(INSN_LIST, "insn_list", "ue", RTX_EXTRA) /* a linked list of dependencies. The insns are represented in print by their uids. - Operand 2 is the status of a dependence (see sched-int.h for more). */ -DEF_RTL_EXPR(DEPS_LIST, "deps_list", "uei", RTX_EXTRA) + Operand 2 is a degree of speculativeness of the dependence. + Operand 3 is a degree of weakness of the dependence. */ +DEF_RTL_EXPR(DEPS_LIST, "deps_list", "uew", RTX_EXTRA) /* SEQUENCE appears in the result of a `gen_...' function for a DEFINE_EXPAND that wants to make several insns. @@ -1,7 +1,6 @@ /* Register Transfer Language (RTL) definitions for GCC Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. + 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GCC. @@ -1758,7 +1757,7 @@ void free_INSN_LIST_node (rtx); rtx alloc_INSN_LIST (rtx, rtx); rtx alloc_EXPR_LIST (int, rtx, rtx); void free_DEPS_LIST_list (rtx *); -rtx alloc_DEPS_LIST (rtx, rtx, int); +rtx alloc_DEPS_LIST (rtx, rtx, HOST_WIDE_INT); void remove_free_DEPS_LIST_elem (rtx, rtx *); void remove_free_INSN_LIST_elem (rtx, rtx *); rtx remove_list_elem (rtx, rtx *); diff --git a/gcc/sched-int.h b/gcc/sched-int.h index cc9812a..175bd69 100644 --- a/gcc/sched-int.h +++ b/gcc/sched-int.h @@ -1,7 +1,7 @@ /* Instruction scheduling pass. This file contains definitions used internally in the scheduler. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, - 1999, 2000, 2001, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. + 1999, 2000, 2001, 2003, 2004 Free Software Foundation, Inc. This file is part of GCC. @@ -36,8 +36,8 @@ extern state_t curr_state; /* Forward declaration. */ struct ready_list; -/* Type to represent status of a dependence. */ -typedef int ds_t; +/* Type to represent status of a dependence. A convinient short alias. */ +typedef HOST_WIDE_INT ds_t; /* Type to represent weakness of speculative dependence. */ typedef int dw_t; @@ -377,10 +377,10 @@ extern regset *glat_start, *glat_end; for using to describe instruction's status. It is set whenever instuction has at least one dependence, that cannot be overcome. See also: check_dep_status () in sched-deps.c . */ -#define DEP_STATUS(LINK) XINT (LINK, 2) +#define DEP_STATUS(LINK) XWINT (LINK, 2) /* We exclude sign bit. */ -#define BITS_PER_DEP_STATUS (HOST_BITS_PER_INT - 1) +#define BITS_PER_DEP_STATUS (HOST_BITS_PER_WIDE_INT - 1) /* First '4' stands for 3 dep type bits and HARD_DEP bit. Second '4' stands for BEGIN_{DATA, CONTROL}, BE_IN_{DATA, CONTROL} diff --git a/gcc/target.h b/gcc/target.h index 66fab12..1b768e4 100644 --- a/gcc/target.h +++ b/gcc/target.h @@ -1,6 +1,5 @@ /* Data structure definitions for a generic GCC target. - Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 - Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the @@ -330,7 +329,7 @@ struct gcc_target 0, if current pattern satisfies the requested speculation type, 1, if pattern of the instruction should be changed to the newly generated one. */ - int (* speculate_insn) (rtx, int, rtx *); + int (* speculate_insn) (rtx, HOST_WIDE_INT, rtx *); /* The following member value is a pointer to a function called by the insn scheduler. It should return true if the check instruction |