/* List management for the GCC expander.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2003, 2004 Free Software Foundation, Inc.
+ 1999, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GCC.
#include "ggc.h"
static void free_list (rtx *, rtx *);
-static void free_DEPS_LIST_node (rtx);
/* Functions for maintaining cache-able lists of EXPR_LIST and INSN_LISTs. */
/* An EXPR_LIST containing all EXPR_LISTs allocated but currently unused. */
static GTY ((deletable)) rtx unused_expr_list;
-/* An DEPS_LIST containing all DEPS_LISTs allocated but currently unused. */
-static GTY ((deletable)) rtx unused_deps_list;
-
-
/* This function will free an entire list of either EXPR_LIST, INSN_LIST
or DEPS_LIST nodes. This is to be used only on lists that consist
exclusively of nodes of one type only. This is only called by
prev_link = *listp;
link = XEXP (prev_link, 1);
- gcc_assert ((unused_listp != &unused_insn_list
- || GET_CODE (prev_link) == INSN_LIST)
- && (unused_listp != &unused_deps_list
- || GET_CODE (prev_link) == DEPS_LIST));
+ gcc_assert (unused_listp != &unused_insn_list
+ || GET_CODE (prev_link) == INSN_LIST);
while (link)
{
- gcc_assert ((unused_listp != &unused_insn_list
- || GET_CODE (prev_link) == INSN_LIST)
- && (unused_listp != &unused_deps_list
- || GET_CODE (prev_link) == DEPS_LIST));
+ gcc_assert (unused_listp != &unused_insn_list
+ || GET_CODE (prev_link) == INSN_LIST);
prev_link = link;
link = XEXP (link, 1);
return r;
}
-/* This call is used in place of a gen_rtx_DEPS_LIST. If there is a cached
- node available, we'll use it, otherwise a call to gen_rtx_DEPS_LIST
- is made. */
-rtx
-alloc_DEPS_LIST (rtx val, rtx next, HOST_WIDE_INT ds)
-{
- rtx r;
-
- if (unused_deps_list)
- {
- r = unused_deps_list;
- unused_deps_list = XEXP (r, 1);
- XEXP (r, 0) = val;
- XEXP (r, 1) = next;
- XWINT (r, 2) = ds;
- PUT_REG_NOTE_KIND (r, VOIDmode);
-
- gcc_assert (GET_CODE (r) == DEPS_LIST);
- }
- else
- r = gen_rtx_DEPS_LIST (VOIDmode, val, next, ds);
-
- return r;
-}
-
/* This function will free up an entire list of EXPR_LIST nodes. */
void
free_EXPR_LIST_list (rtx *listp)
free_list (listp, &unused_insn_list);
}
-/* This function will free up an entire list of DEPS_LIST nodes. */
-void
-free_DEPS_LIST_list (rtx *listp)
-{
- if (*listp == 0)
- return;
- free_list (listp, &unused_deps_list);
-}
-
/* This function will free up an individual EXPR_LIST node. */
void
free_EXPR_LIST_node (rtx ptr)
unused_insn_list = ptr;
}
-/* This function will free up an individual DEPS_LIST node. */
-static void
-free_DEPS_LIST_node (rtx ptr)
-{
- gcc_assert (GET_CODE (ptr) == DEPS_LIST);
- XEXP (ptr, 1) = unused_deps_list;
- unused_deps_list = ptr;
-}
-
-/* Remove and free corresponding to ELEM node in the DEPS_LIST pointed to
- by LISTP. */
-void
-remove_free_DEPS_LIST_elem (rtx elem, rtx *listp)
-{
- free_DEPS_LIST_node (remove_list_elem (elem, listp));
-}
-
/* Remove and free corresponding to ELEM node in the INSN_LIST pointed to
by LISTP. */
void