00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "config.h"
00023 #include "system.h"
00024 #include "toplev.h"
00025 #include "rtl.h"
00026 #include "ggc.h"
00027
00028 static void free_list PARAMS ((rtx *, rtx *));
00029
00030
00031
00032
00033 static GTY ((deletable (""))) rtx unused_insn_list;
00034
00035
00036 static GTY ((deletable (""))) rtx unused_expr_list;
00037
00038
00039
00040
00041
00042
00043 static void
00044 free_list (listp, unused_listp)
00045 rtx *listp, *unused_listp;
00046 {
00047 rtx link, prev_link;
00048
00049 prev_link = *listp;
00050 link = XEXP (prev_link, 1);
00051
00052 while (link)
00053 {
00054 prev_link = link;
00055 link = XEXP (link, 1);
00056 }
00057
00058 XEXP (prev_link, 1) = *unused_listp;
00059 *unused_listp = *listp;
00060 *listp = 0;
00061 }
00062
00063
00064
00065
00066 rtx
00067 alloc_INSN_LIST (val, next)
00068 rtx val, next;
00069 {
00070 rtx r;
00071
00072 if (unused_insn_list)
00073 {
00074 r = unused_insn_list;
00075 unused_insn_list = XEXP (r, 1);
00076 XEXP (r, 0) = val;
00077 XEXP (r, 1) = next;
00078 PUT_REG_NOTE_KIND (r, VOIDmode);
00079 }
00080 else
00081 r = gen_rtx_INSN_LIST (VOIDmode, val, next);
00082
00083 return r;
00084 }
00085
00086
00087
00088
00089 rtx
00090 alloc_EXPR_LIST (kind, val, next)
00091 int kind;
00092 rtx val, next;
00093 {
00094 rtx r;
00095
00096 if (unused_expr_list)
00097 {
00098 r = unused_expr_list;
00099 unused_expr_list = XEXP (r, 1);
00100 XEXP (r, 0) = val;
00101 XEXP (r, 1) = next;
00102 PUT_REG_NOTE_KIND (r, kind);
00103 }
00104 else
00105 r = gen_rtx_EXPR_LIST (kind, val, next);
00106
00107 return r;
00108 }
00109
00110
00111 void
00112 free_EXPR_LIST_list (listp)
00113 rtx *listp;
00114 {
00115 if (*listp == 0)
00116 return;
00117 free_list (listp, &unused_expr_list);
00118 }
00119
00120
00121 void
00122 free_INSN_LIST_list (listp)
00123 rtx *listp;
00124 {
00125 if (*listp == 0)
00126 return;
00127 free_list (listp, &unused_insn_list);
00128 }
00129
00130
00131 void
00132 free_EXPR_LIST_node (ptr)
00133 rtx ptr;
00134 {
00135 XEXP (ptr, 1) = unused_expr_list;
00136 unused_expr_list = ptr;
00137 }
00138
00139
00140 void
00141 free_INSN_LIST_node (ptr)
00142 rtx ptr;
00143 {
00144 XEXP (ptr, 1) = unused_insn_list;
00145 unused_insn_list = ptr;
00146 }
00147
00148 #include "gt-lists.h"