]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/hooks.c
target.def (legitimate_constant_p): New hook.
[thirdparty/gcc.git] / gcc / hooks.c
CommitLineData
e4ec2cac 1/* General-purpose hooks.
96e45421 2 Copyright (C) 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
66647d44 3 Free Software Foundation, Inc.
e4ec2cac 4
9dcd6f09
NC
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU General Public License as published by the
7 Free Software Foundation; either version 3, or (at your option) any
8 later version.
e4ec2cac 9
9dcd6f09
NC
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
e4ec2cac 14
9dcd6f09
NC
15 You should have received a copy of the GNU General Public License
16 along with this program; see the file COPYING3. If not see
b8698a0f 17 <http://www.gnu.org/licenses/>.
e4ec2cac 18
9dcd6f09
NC
19 In other words, you are welcome to use, share and improve this program.
20 You are forbidden to forbid anyone else to use, share and improve
21 what you give them. Help stamp out software-hoarding! */
e4ec2cac
AO
22
23/* This file contains generic hooks that can be used as defaults for
24 target or language-dependent hook initializers. */
25
26#include "config.h"
27#include "system.h"
4977bab6
ZW
28#include "coretypes.h"
29#include "tm.h"
e4ec2cac
AO
30#include "hooks.h"
31
e5f3b786
NB
32/* Generic hook that does absolutely zappo. */
33void
1d088dee 34hook_void_void (void)
e5f3b786
NB
35{
36}
37
e4ec2cac
AO
38/* Generic hook that takes no arguments and returns false. */
39bool
1d088dee 40hook_bool_void_false (void)
ae46c4e0
RH
41{
42 return false;
43}
fb49053f 44
af287697
MM
45/* Generic hook that takes no arguments and returns true. */
46bool
47hook_bool_void_true (void)
48{
49 return true;
50}
51
fe3ad572
SC
52/* Generic hook that takes (bool) and returns false. */
53bool
54hook_bool_bool_false (bool a ATTRIBUTE_UNUSED)
55{
56 return false;
57}
58
d5fabb58
JM
59/* Generic hook that takes (bool, struct gcc_options *) and returns false. */
60bool
61hook_bool_bool_gcc_optionsp_false (bool a ATTRIBUTE_UNUSED,
62 struct gcc_options *opts ATTRIBUTE_UNUSED)
63{
64 return false;
65}
66
7b5cbb57
AS
67/* Generic hook that takes const int, const int) and returns true. */
68bool hook_bool_const_int_const_int_true (const int a ATTRIBUTE_UNUSED,
69 const int b ATTRIBUTE_UNUSED)
70{
71 return true;
72}
73
f676971a
EC
74/* Generic hook that takes (enum machine_mode) and returns false. */
75bool
76hook_bool_mode_false (enum machine_mode mode ATTRIBUTE_UNUSED)
77{
78 return false;
79}
80
42db504c
SB
81/* Generic hook that takes (enum machine_mode) and returns true. */
82bool
83hook_bool_mode_true (enum machine_mode mode ATTRIBUTE_UNUSED)
84{
85 return true;
86}
87
fbbf66e7 88/* Generic hook that takes (enum machine_mode, const_rtx) and returns false. */
aacd3885 89bool
3101faab
KG
90hook_bool_mode_const_rtx_false (enum machine_mode mode ATTRIBUTE_UNUSED,
91 const_rtx value ATTRIBUTE_UNUSED)
aacd3885
RS
92{
93 return false;
94}
95
fbbf66e7 96/* Generic hook that takes (enum machine_mode, const_rtx) and returns true. */
1d3dbd99 97bool
3101faab
KG
98hook_bool_mode_const_rtx_true (enum machine_mode mode ATTRIBUTE_UNUSED,
99 const_rtx value ATTRIBUTE_UNUSED)
1d3dbd99
RS
100{
101 return true;
102}
103
fbbf66e7
RS
104/* Generic hook that takes (enum machine_mode, rtx) and returns false. */
105bool
106hook_bool_mode_rtx_false (enum machine_mode mode ATTRIBUTE_UNUSED,
107 rtx value ATTRIBUTE_UNUSED)
108{
109 return false;
110}
111
1a627b35
RS
112/* Generic hook that takes (enum machine_mode, rtx) and returns true. */
113bool
114hook_bool_mode_rtx_true (enum machine_mode mode ATTRIBUTE_UNUSED,
115 rtx value ATTRIBUTE_UNUSED)
116{
117 return true;
118}
119
5eb99654
KG
120/* Generic hook that takes (FILE *, const char *) and does nothing. */
121void
1d088dee 122hook_void_FILEptr_constcharptr (FILE *a ATTRIBUTE_UNUSED, const char *b ATTRIBUTE_UNUSED)
5eb99654
KG
123{
124}
3961e8fe
RH
125
126/* Used for the TARGET_ASM_CAN_OUTPUT_MI_THUNK hook. */
127bool
3101faab
KG
128hook_bool_const_tree_hwi_hwi_const_tree_false (const_tree a ATTRIBUTE_UNUSED,
129 HOST_WIDE_INT b ATTRIBUTE_UNUSED,
130 HOST_WIDE_INT c ATTRIBUTE_UNUSED,
131 const_tree d ATTRIBUTE_UNUSED)
3961e8fe
RH
132{
133 return false;
134}
135
136bool
3101faab
KG
137hook_bool_const_tree_hwi_hwi_const_tree_true (const_tree a ATTRIBUTE_UNUSED,
138 HOST_WIDE_INT b ATTRIBUTE_UNUSED,
139 HOST_WIDE_INT c ATTRIBUTE_UNUSED,
140 const_tree d ATTRIBUTE_UNUSED)
3961e8fe
RH
141{
142 return true;
143}
144
145bool
3101faab 146default_can_output_mi_thunk_no_vcall (const_tree a ATTRIBUTE_UNUSED,
1d088dee
AJ
147 HOST_WIDE_INT b ATTRIBUTE_UNUSED,
148 HOST_WIDE_INT c,
3101faab 149 const_tree d ATTRIBUTE_UNUSED)
3961e8fe
RH
150{
151 return c == 0;
152}
7b1bd3c5 153
a1c496cb 154int
3101faab 155hook_int_const_tree_0 (const_tree a ATTRIBUTE_UNUSED)
a1c496cb
EC
156{
157 return 0;
158}
159
7b1bd3c5
RH
160/* ??? Used for comp_type_attributes, which ought to return bool. */
161int
3101faab 162hook_int_const_tree_const_tree_1 (const_tree a ATTRIBUTE_UNUSED, const_tree b ATTRIBUTE_UNUSED)
7b1bd3c5
RH
163{
164 return 1;
165}
166
dcefdf67 167int
1d088dee 168hook_int_rtx_0 (rtx a ATTRIBUTE_UNUSED)
dcefdf67
RH
169{
170 return 0;
171}
172
f40751dd
JH
173int
174hook_int_rtx_bool_0 (rtx a ATTRIBUTE_UNUSED, bool b ATTRIBUTE_UNUSED)
175{
176 return 0;
177}
178
b86f6cd9 179unsigned int
7a9bf9a4 180hook_uint_void_0 (void)
b86f6cd9
NB
181{
182 return 0;
183}
184
7b1bd3c5 185void
1d088dee 186hook_void_tree (tree a ATTRIBUTE_UNUSED)
7b1bd3c5
RH
187{
188}
189
94d1613b 190void
8e3e233b 191hook_void_constcharptr (const char *a ATTRIBUTE_UNUSED)
94d1613b
MS
192{
193}
194
7b1bd3c5 195void
1d088dee 196hook_void_tree_treeptr (tree a ATTRIBUTE_UNUSED, tree *b ATTRIBUTE_UNUSED)
7b1bd3c5
RH
197{
198}
199
fac0f722
JM
200void
201hook_void_int_int (int a ATTRIBUTE_UNUSED, int b ATTRIBUTE_UNUSED)
202{
203}
204
7b1bd3c5 205bool
1d088dee 206hook_bool_tree_false (tree a ATTRIBUTE_UNUSED)
7b1bd3c5
RH
207{
208 return false;
209}
3a04ff64 210
ac7d7749
KG
211bool
212hook_bool_const_tree_false (const_tree a ATTRIBUTE_UNUSED)
213{
214 return false;
215}
216
c6e8c921
GK
217bool
218hook_bool_tree_true (tree a ATTRIBUTE_UNUSED)
219{
220 return true;
221}
222
586de218
KG
223bool
224hook_bool_const_tree_true (const_tree a ATTRIBUTE_UNUSED)
225{
226 return true;
227}
228
4977bab6 229bool
1d088dee 230hook_bool_tree_tree_false (tree a ATTRIBUTE_UNUSED, tree b ATTRIBUTE_UNUSED)
4977bab6
ZW
231{
232 return false;
233}
234
faf63e39
RH
235bool
236hook_bool_tree_tree_true (tree a ATTRIBUTE_UNUSED, tree b ATTRIBUTE_UNUSED)
237{
238 return true;
239}
240
953ff289
DN
241bool
242hook_bool_tree_bool_false (tree a ATTRIBUTE_UNUSED, bool b ATTRIBUTE_UNUSED)
243{
244 return false;
245}
246
3a04ff64 247bool
1d088dee 248hook_bool_rtx_false (rtx a ATTRIBUTE_UNUSED)
3a04ff64
RH
249{
250 return false;
251}
3c50106f 252
e129d93a
ILT
253bool
254hook_bool_uintp_uintp_false (unsigned int *a ATTRIBUTE_UNUSED,
255 unsigned int *b ATTRIBUTE_UNUSED)
256{
257 return false;
258}
259
3c50106f 260bool
f40751dd
JH
261hook_bool_rtx_int_int_intp_bool_false (rtx a ATTRIBUTE_UNUSED,
262 int b ATTRIBUTE_UNUSED,
263 int c ATTRIBUTE_UNUSED,
264 int *d ATTRIBUTE_UNUSED,
265 bool speed_p ATTRIBUTE_UNUSED)
3c50106f
RH
266{
267 return false;
268}
269
7daebb7a
RS
270/* Generic hook that takes an rtx and returns it. */
271rtx
1d088dee 272hook_rtx_rtx_identity (rtx x)
7daebb7a
RS
273{
274 return x;
275}
276
96714395
AH
277/* Generic hook that takes an rtx and returns NULL_RTX. */
278rtx
1d088dee 279hook_rtx_rtx_null (rtx x ATTRIBUTE_UNUSED)
96714395 280{
c6e8c921
GK
281 return NULL;
282}
283
284/* Generic hook that takes a tree and an int and returns NULL_RTX. */
285rtx
286hook_rtx_tree_int_null (tree a ATTRIBUTE_UNUSED, int b ATTRIBUTE_UNUSED)
287{
288 return NULL;
96714395 289}
18c81520 290
61158923 291/* Generic hook that takes three trees and returns the last one as is. */
67dfe110 292tree
61158923
HPN
293hook_tree_tree_tree_tree_3rd_identity (tree a ATTRIBUTE_UNUSED,
294 tree b ATTRIBUTE_UNUSED, tree c)
67dfe110 295{
61158923 296 return c;
67dfe110 297}
f18eca82
ZL
298
299/* Generic hook that takes a tree and returns a NULL string. */
300const char *
3101faab 301hook_constcharptr_const_tree_null (const_tree t ATTRIBUTE_UNUSED)
f18eca82
ZL
302{
303 return NULL;
304}
55e74277 305
6b889d89 306tree
f311c3b4
NF
307hook_tree_tree_int_treep_bool_null (tree t0 ATTRIBUTE_UNUSED,
308 int i ATTRIBUTE_UNUSED,
309 tree *p ATTRIBUTE_UNUSED,
310 bool ignore ATTRIBUTE_UNUSED)
55e74277
PB
311{
312 return NULL;
313}
e7e64a25 314
953ff289
DN
315tree
316hook_tree_tree_tree_null (tree t0 ATTRIBUTE_UNUSED, tree t1 ATTRIBUTE_UNUSED)
317{
318 return NULL;
319}
320
a68ab351
JJ
321tree
322hook_tree_tree_tree_tree_null (tree t0 ATTRIBUTE_UNUSED,
323 tree t1 ATTRIBUTE_UNUSED,
324 tree t2 ATTRIBUTE_UNUSED)
325{
326 return NULL;
327}
328
e7e64a25
AS
329/* Generic hook that takes a rtx and returns a NULL string. */
330const char *
3101faab 331hook_constcharptr_const_rtx_null (const_rtx r ATTRIBUTE_UNUSED)
e7e64a25
AS
332{
333 return NULL;
334}
4de67c26
JM
335
336const char *
3101faab
KG
337hook_constcharptr_const_tree_const_tree_null (const_tree t0 ATTRIBUTE_UNUSED,
338 const_tree t1 ATTRIBUTE_UNUSED)
4de67c26
JM
339{
340 return NULL;
341}
342
343const char *
3101faab
KG
344hook_constcharptr_int_const_tree_null (int i ATTRIBUTE_UNUSED,
345 const_tree t0 ATTRIBUTE_UNUSED)
4de67c26
JM
346{
347 return NULL;
348}
349
350const char *
3101faab
KG
351hook_constcharptr_int_const_tree_const_tree_null (int i ATTRIBUTE_UNUSED,
352 const_tree t0 ATTRIBUTE_UNUSED,
353 const_tree t1 ATTRIBUTE_UNUSED)
4de67c26
JM
354{
355 return NULL;
356}
40449a90
SL
357
358/* Generic hook that takes a const_tree and returns NULL_TREE. */
359tree
360hook_tree_const_tree_null (const_tree t ATTRIBUTE_UNUSED)
361{
362 return NULL;
363}
7942e47e
RY
364
365/* Generic hook that takes a rtx and an int and returns a bool. */
366
367bool
368hook_bool_rtx_int_false (rtx insn ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED)
369{
370 return false;
371}
372
373/* Generic hook that takes a rtx and an int and returns void. */
374
375void
376hook_void_rtx_int (rtx insn ATTRIBUTE_UNUSED, int mode ATTRIBUTE_UNUSED)
377{
378}
7e4aae92
JM
379
380/* Generic hook that takes a struct gcc_options * and returns void. */
381
382void
383hook_void_gcc_optionsp (struct gcc_options *opts ATTRIBUTE_UNUSED)
384{
385}