annotate gcc/ira.h @ 138:fc828634a951

merge
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Thu, 08 Nov 2018 14:17:14 +0900
parents 84e7813d76e9
children 1830386684a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /* Communication between the Integrated Register Allocator (IRA) and
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 the rest of the compiler.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
3 Copyright (C) 2006-2018 Free Software Foundation, Inc.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 Contributed by Vladimir Makarov <vmakarov@redhat.com>.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 This file is part of GCC.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 GCC is free software; you can redistribute it and/or modify it under
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 the terms of the GNU General Public License as published by the Free
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 Software Foundation; either version 3, or (at your option) any later
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 version.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 for more details.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 along with GCC; see the file COPYING3. If not see
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 <http://www.gnu.org/licenses/>. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
111
kono
parents: 67
diff changeset
22 #ifndef GCC_IRA_H
kono
parents: 67
diff changeset
23 #define GCC_IRA_H
kono
parents: 67
diff changeset
24
kono
parents: 67
diff changeset
25 #include "emit-rtl.h"
kono
parents: 67
diff changeset
26
kono
parents: 67
diff changeset
27 /* True when we use LRA instead of reload pass for the current
kono
parents: 67
diff changeset
28 function. */
kono
parents: 67
diff changeset
29 extern bool ira_use_lra_p;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
30
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 /* True if we have allocno conflicts. It is false for non-optimized
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 mode or when the conflict table is too big. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 extern bool ira_conflicts_p;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34
111
kono
parents: 67
diff changeset
35 struct target_ira
kono
parents: 67
diff changeset
36 {
kono
parents: 67
diff changeset
37 /* Map: hard register number -> allocno class it belongs to. If the
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
38 corresponding class is NO_REGS, the hard register is not available
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
39 for allocation. */
111
kono
parents: 67
diff changeset
40 enum reg_class x_ira_hard_regno_allocno_class[FIRST_PSEUDO_REGISTER];
kono
parents: 67
diff changeset
41
kono
parents: 67
diff changeset
42 /* Number of allocno classes. Allocno classes are register classes
kono
parents: 67
diff changeset
43 which can be used for allocations of allocnos. */
kono
parents: 67
diff changeset
44 int x_ira_allocno_classes_num;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
45
111
kono
parents: 67
diff changeset
46 /* The array containing allocno classes. Only first
kono
parents: 67
diff changeset
47 IRA_ALLOCNO_CLASSES_NUM elements are used for this. */
kono
parents: 67
diff changeset
48 enum reg_class x_ira_allocno_classes[N_REG_CLASSES];
kono
parents: 67
diff changeset
49
kono
parents: 67
diff changeset
50 /* Map of all register classes to corresponding allocno classes
kono
parents: 67
diff changeset
51 containing the given class. If given class is not a subset of an
kono
parents: 67
diff changeset
52 allocno class, we translate it into the cheapest allocno class. */
kono
parents: 67
diff changeset
53 enum reg_class x_ira_allocno_class_translate[N_REG_CLASSES];
kono
parents: 67
diff changeset
54
kono
parents: 67
diff changeset
55 /* Number of pressure classes. Pressure classes are register
kono
parents: 67
diff changeset
56 classes for which we calculate register pressure. */
kono
parents: 67
diff changeset
57 int x_ira_pressure_classes_num;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
58
111
kono
parents: 67
diff changeset
59 /* The array containing pressure classes. Only first
kono
parents: 67
diff changeset
60 IRA_PRESSURE_CLASSES_NUM elements are used for this. */
kono
parents: 67
diff changeset
61 enum reg_class x_ira_pressure_classes[N_REG_CLASSES];
kono
parents: 67
diff changeset
62
kono
parents: 67
diff changeset
63 /* Map of all register classes to corresponding pressure classes
kono
parents: 67
diff changeset
64 containing the given class. If given class is not a subset of an
kono
parents: 67
diff changeset
65 pressure class, we translate it into the cheapest pressure
kono
parents: 67
diff changeset
66 class. */
kono
parents: 67
diff changeset
67 enum reg_class x_ira_pressure_class_translate[N_REG_CLASSES];
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
68
111
kono
parents: 67
diff changeset
69 /* Biggest pressure register class containing stack registers.
kono
parents: 67
diff changeset
70 NO_REGS if there are no stack registers. */
kono
parents: 67
diff changeset
71 enum reg_class x_ira_stack_reg_pressure_class;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
72
111
kono
parents: 67
diff changeset
73 /* Maps: register class x machine mode -> maximal/minimal number of
kono
parents: 67
diff changeset
74 hard registers of given class needed to store value of given
kono
parents: 67
diff changeset
75 mode. */
kono
parents: 67
diff changeset
76 unsigned char x_ira_reg_class_max_nregs[N_REG_CLASSES][MAX_MACHINE_MODE];
kono
parents: 67
diff changeset
77 unsigned char x_ira_reg_class_min_nregs[N_REG_CLASSES][MAX_MACHINE_MODE];
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
78
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
79 /* Array analogous to target hook TARGET_MEMORY_MOVE_COST. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
80 short x_ira_memory_move_cost[MAX_MACHINE_MODE][N_REG_CLASSES][2];
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
81
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
82 /* Array of number of hard registers of given class which are
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
83 available for the allocation. The order is defined by the
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
84 allocation order. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
85 short x_ira_class_hard_regs[N_REG_CLASSES][FIRST_PSEUDO_REGISTER];
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
86
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
87 /* The number of elements of the above array for given register
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
88 class. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
89 int x_ira_class_hard_regs_num[N_REG_CLASSES];
111
kono
parents: 67
diff changeset
90
kono
parents: 67
diff changeset
91 /* Register class subset relation: TRUE if the first class is a subset
kono
parents: 67
diff changeset
92 of the second one considering only hard registers available for the
kono
parents: 67
diff changeset
93 allocation. */
kono
parents: 67
diff changeset
94 int x_ira_class_subset_p[N_REG_CLASSES][N_REG_CLASSES];
kono
parents: 67
diff changeset
95
kono
parents: 67
diff changeset
96 /* The biggest class inside of intersection of the two classes (that
kono
parents: 67
diff changeset
97 is calculated taking only hard registers available for allocation
kono
parents: 67
diff changeset
98 into account. If the both classes contain no hard registers
kono
parents: 67
diff changeset
99 available for allocation, the value is calculated with taking all
kono
parents: 67
diff changeset
100 hard-registers including fixed ones into account. */
kono
parents: 67
diff changeset
101 enum reg_class x_ira_reg_class_subset[N_REG_CLASSES][N_REG_CLASSES];
kono
parents: 67
diff changeset
102
kono
parents: 67
diff changeset
103 /* True if the two classes (that is calculated taking only hard
kono
parents: 67
diff changeset
104 registers available for allocation into account; are
kono
parents: 67
diff changeset
105 intersected. */
kono
parents: 67
diff changeset
106 bool x_ira_reg_classes_intersect_p[N_REG_CLASSES][N_REG_CLASSES];
kono
parents: 67
diff changeset
107
kono
parents: 67
diff changeset
108 /* If class CL has a single allocatable register of mode M,
kono
parents: 67
diff changeset
109 index [CL][M] gives the number of that register, otherwise it is -1. */
kono
parents: 67
diff changeset
110 short x_ira_class_singleton[N_REG_CLASSES][MAX_MACHINE_MODE];
kono
parents: 67
diff changeset
111
kono
parents: 67
diff changeset
112 /* Function specific hard registers can not be used for the register
kono
parents: 67
diff changeset
113 allocation. */
kono
parents: 67
diff changeset
114 HARD_REG_SET x_ira_no_alloc_regs;
kono
parents: 67
diff changeset
115
kono
parents: 67
diff changeset
116 /* Array whose values are hard regset of hard registers available for
kono
parents: 67
diff changeset
117 the allocation of given register class whose targetm.hard_regno_mode_ok
kono
parents: 67
diff changeset
118 values for given mode are false. */
kono
parents: 67
diff changeset
119 HARD_REG_SET x_ira_prohibited_class_mode_regs[N_REG_CLASSES][NUM_MACHINE_MODES];
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
120 };
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
121
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
122 extern struct target_ira default_target_ira;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
123 #if SWITCHABLE_TARGET
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
124 extern struct target_ira *this_target_ira;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
125 #else
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
126 #define this_target_ira (&default_target_ira)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
127 #endif
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
128
111
kono
parents: 67
diff changeset
129 #define ira_hard_regno_allocno_class \
kono
parents: 67
diff changeset
130 (this_target_ira->x_ira_hard_regno_allocno_class)
kono
parents: 67
diff changeset
131 #define ira_allocno_classes_num \
kono
parents: 67
diff changeset
132 (this_target_ira->x_ira_allocno_classes_num)
kono
parents: 67
diff changeset
133 #define ira_allocno_classes \
kono
parents: 67
diff changeset
134 (this_target_ira->x_ira_allocno_classes)
kono
parents: 67
diff changeset
135 #define ira_allocno_class_translate \
kono
parents: 67
diff changeset
136 (this_target_ira->x_ira_allocno_class_translate)
kono
parents: 67
diff changeset
137 #define ira_pressure_classes_num \
kono
parents: 67
diff changeset
138 (this_target_ira->x_ira_pressure_classes_num)
kono
parents: 67
diff changeset
139 #define ira_pressure_classes \
kono
parents: 67
diff changeset
140 (this_target_ira->x_ira_pressure_classes)
kono
parents: 67
diff changeset
141 #define ira_pressure_class_translate \
kono
parents: 67
diff changeset
142 (this_target_ira->x_ira_pressure_class_translate)
kono
parents: 67
diff changeset
143 #define ira_stack_reg_pressure_class \
kono
parents: 67
diff changeset
144 (this_target_ira->x_ira_stack_reg_pressure_class)
kono
parents: 67
diff changeset
145 #define ira_reg_class_max_nregs \
kono
parents: 67
diff changeset
146 (this_target_ira->x_ira_reg_class_max_nregs)
kono
parents: 67
diff changeset
147 #define ira_reg_class_min_nregs \
kono
parents: 67
diff changeset
148 (this_target_ira->x_ira_reg_class_min_nregs)
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
149 #define ira_memory_move_cost \
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
150 (this_target_ira->x_ira_memory_move_cost)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
151 #define ira_class_hard_regs \
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
152 (this_target_ira->x_ira_class_hard_regs)
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
153 #define ira_class_hard_regs_num \
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
154 (this_target_ira->x_ira_class_hard_regs_num)
111
kono
parents: 67
diff changeset
155 #define ira_class_subset_p \
kono
parents: 67
diff changeset
156 (this_target_ira->x_ira_class_subset_p)
kono
parents: 67
diff changeset
157 #define ira_reg_class_subset \
kono
parents: 67
diff changeset
158 (this_target_ira->x_ira_reg_class_subset)
kono
parents: 67
diff changeset
159 #define ira_reg_classes_intersect_p \
kono
parents: 67
diff changeset
160 (this_target_ira->x_ira_reg_classes_intersect_p)
kono
parents: 67
diff changeset
161 #define ira_class_singleton \
kono
parents: 67
diff changeset
162 (this_target_ira->x_ira_class_singleton)
kono
parents: 67
diff changeset
163 #define ira_no_alloc_regs \
kono
parents: 67
diff changeset
164 (this_target_ira->x_ira_no_alloc_regs)
kono
parents: 67
diff changeset
165 #define ira_prohibited_class_mode_regs \
kono
parents: 67
diff changeset
166 (this_target_ira->x_ira_prohibited_class_mode_regs)
kono
parents: 67
diff changeset
167
kono
parents: 67
diff changeset
168 /* Major structure describing equivalence info for a pseudo. */
kono
parents: 67
diff changeset
169 struct ira_reg_equiv_s
kono
parents: 67
diff changeset
170 {
kono
parents: 67
diff changeset
171 /* True if we can use this equivalence. */
kono
parents: 67
diff changeset
172 bool defined_p;
kono
parents: 67
diff changeset
173 /* True if the usage of the equivalence is profitable. */
kono
parents: 67
diff changeset
174 bool profitable_p;
kono
parents: 67
diff changeset
175 /* Equiv. memory, constant, invariant, and initializing insns of
kono
parents: 67
diff changeset
176 given pseudo-register or NULL_RTX. */
kono
parents: 67
diff changeset
177 rtx memory;
kono
parents: 67
diff changeset
178 rtx constant;
kono
parents: 67
diff changeset
179 rtx invariant;
kono
parents: 67
diff changeset
180 /* Always NULL_RTX if defined_p is false. */
kono
parents: 67
diff changeset
181 rtx_insn_list *init_insns;
kono
parents: 67
diff changeset
182 };
kono
parents: 67
diff changeset
183
kono
parents: 67
diff changeset
184 /* The length of the following array. */
kono
parents: 67
diff changeset
185 extern int ira_reg_equiv_len;
kono
parents: 67
diff changeset
186
kono
parents: 67
diff changeset
187 /* Info about equiv. info for each register. */
kono
parents: 67
diff changeset
188 extern struct ira_reg_equiv_s *ira_reg_equiv;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
189
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
190 extern void ira_init_once (void);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 extern void ira_init (void);
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
192 extern void ira_setup_eliminable_regset (void);
111
kono
parents: 67
diff changeset
193 extern rtx ira_eliminate_regs (rtx, machine_mode);
kono
parents: 67
diff changeset
194 extern void ira_set_pseudo_classes (bool, FILE *);
kono
parents: 67
diff changeset
195 extern void ira_expand_reg_equiv (void);
kono
parents: 67
diff changeset
196 extern void ira_update_equiv_info_by_shuffle_insn (int, int, rtx_insn *);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
197
111
kono
parents: 67
diff changeset
198 extern void ira_sort_regnos_for_alter_reg (int *, int, machine_mode *);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 extern void ira_mark_allocation_change (int);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 extern void ira_mark_memory_move_deletion (int, int);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
201 extern bool ira_reassign_pseudos (int *, int, HARD_REG_SET, HARD_REG_SET *,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
202 HARD_REG_SET *, bitmap);
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
203 extern rtx ira_reuse_stack_slot (int, poly_uint64, poly_uint64);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
204 extern void ira_mark_new_stack_slot (rtx, int, poly_uint64);
111
kono
parents: 67
diff changeset
205 extern bool ira_better_spill_reload_regno_p (int *, int *, rtx, rtx, rtx_insn *);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
206 extern bool ira_bad_reload_regno (int, rtx, rtx);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
207
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
208 extern void ira_adjust_equiv_reg_cost (unsigned, int);
111
kono
parents: 67
diff changeset
209
kono
parents: 67
diff changeset
210 /* ira-costs.c */
kono
parents: 67
diff changeset
211 extern void ira_costs_c_finalize (void);
kono
parents: 67
diff changeset
212
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
213 /* ira-lives.c */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
214 extern rtx non_conflicting_reg_copy_p (rtx_insn *);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
215
111
kono
parents: 67
diff changeset
216 /* Spilling static chain pseudo may result in generation of wrong
kono
parents: 67
diff changeset
217 non-local goto code using frame-pointer to address saved stack
kono
parents: 67
diff changeset
218 pointer value after restoring old frame pointer value. The
kono
parents: 67
diff changeset
219 function returns TRUE if REGNO is such a static chain pseudo. */
kono
parents: 67
diff changeset
220 static inline bool
kono
parents: 67
diff changeset
221 non_spilled_static_chain_regno_p (int regno)
kono
parents: 67
diff changeset
222 {
kono
parents: 67
diff changeset
223 return (cfun->static_chain_decl && crtl->has_nonlocal_goto
kono
parents: 67
diff changeset
224 && REG_EXPR (regno_reg_rtx[regno]) == cfun->static_chain_decl);
kono
parents: 67
diff changeset
225 }
kono
parents: 67
diff changeset
226
kono
parents: 67
diff changeset
227 #endif /* GCC_IRA_H */