annotate gcc/target.h @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
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 /* Data structure definitions for a generic GCC target.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
2 Copyright (C) 2001-2020 Free Software Foundation, Inc.
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 This program is free software; you can redistribute it and/or modify it
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 under the terms of the GNU General Public License as published by the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 Free Software Foundation; either version 3, or (at your option) any
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 later version.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 GNU General Public License for more details.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
13
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 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
15 along with this program; see the file COPYING3. If not see
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 <http://www.gnu.org/licenses/>.
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 In other words, you are welcome to use, share and improve this program.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 You are forbidden to forbid anyone else to use, share and improve
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 what you give them. Help stamp out software-hoarding! */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 /* This file contains a data structure that describes a GCC target.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 At present it is incomplete, but in future it should grow to
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 contain most or all target machine and target O/S specific
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 information.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 This structure has its initializer declared in target-def.h in the
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 form of large macro TARGET_INITIALIZER that expands to many smaller
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 macros.
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 The smaller macros each initialize one component of the structure,
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 and each has a default. Each target should have a file that
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 includes target.h and target-def.h, and overrides any inappropriate
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 defaults by undefining the relevant macro and defining a suitable
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 replacement. That file should then contain the definition of
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 "targetm" like so:
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 struct gcc_target targetm = TARGET_INITIALIZER;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 Doing things this way allows us to bring together everything that
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 defines a GCC target. By supplying a default that is appropriate
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 to most targets, we can easily add new items without needing to
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 edit dozens of target configuration files. It should also allow us
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 to gradually reduce the amount of conditional compilation that is
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 scattered throughout GCC. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
47
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
48 #ifndef GCC_TARGET_H
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 #define GCC_TARGET_H
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
50
111
kono
parents: 67
diff changeset
51 #include "insn-codes.h"
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 #include "tm.h"
111
kono
parents: 67
diff changeset
53 #include "hard-reg-set.h"
kono
parents: 67
diff changeset
54
kono
parents: 67
diff changeset
55 #if CHECKING_P
kono
parents: 67
diff changeset
56
kono
parents: 67
diff changeset
57 struct cumulative_args_t { void *magic; void *p; };
kono
parents: 67
diff changeset
58
kono
parents: 67
diff changeset
59 #else /* !CHECKING_P */
kono
parents: 67
diff changeset
60
kono
parents: 67
diff changeset
61 /* When using a GCC build compiler, we could use
kono
parents: 67
diff changeset
62 __attribute__((transparent_union)) to get cumulative_args_t function
kono
parents: 67
diff changeset
63 arguments passed like scalars where the ABI would mandate a less
kono
parents: 67
diff changeset
64 efficient way of argument passing otherwise. However, that would come
kono
parents: 67
diff changeset
65 at the cost of less type-safe !CHECKING_P compilation. */
kono
parents: 67
diff changeset
66
kono
parents: 67
diff changeset
67 union cumulative_args_t { void *p; };
kono
parents: 67
diff changeset
68
kono
parents: 67
diff changeset
69 #endif /* !CHECKING_P */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
70
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 /* Types used by the record_gcc_switches() target function. */
111
kono
parents: 67
diff changeset
72 enum print_switch_type
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 SWITCH_TYPE_PASSED, /* A switch passed on the command line. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 SWITCH_TYPE_ENABLED, /* An option that is currently enabled. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 SWITCH_TYPE_DESCRIPTIVE, /* Descriptive text, not a switch or option. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 SWITCH_TYPE_LINE_START, /* Please emit any necessary text at the start of a line. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 SWITCH_TYPE_LINE_END /* Please emit a line terminator. */
111
kono
parents: 67
diff changeset
79 };
kono
parents: 67
diff changeset
80
kono
parents: 67
diff changeset
81 /* Types of memory operation understood by the "by_pieces" infrastructure.
kono
parents: 67
diff changeset
82 Used by the TARGET_USE_BY_PIECES_INFRASTRUCTURE_P target hook and
kono
parents: 67
diff changeset
83 internally by the functions in expr.c. */
kono
parents: 67
diff changeset
84
kono
parents: 67
diff changeset
85 enum by_pieces_operation
kono
parents: 67
diff changeset
86 {
kono
parents: 67
diff changeset
87 CLEAR_BY_PIECES,
kono
parents: 67
diff changeset
88 MOVE_BY_PIECES,
kono
parents: 67
diff changeset
89 SET_BY_PIECES,
kono
parents: 67
diff changeset
90 STORE_BY_PIECES,
kono
parents: 67
diff changeset
91 COMPARE_BY_PIECES
kono
parents: 67
diff changeset
92 };
kono
parents: 67
diff changeset
93
kono
parents: 67
diff changeset
94 extern unsigned HOST_WIDE_INT by_pieces_ninsns (unsigned HOST_WIDE_INT,
kono
parents: 67
diff changeset
95 unsigned int,
kono
parents: 67
diff changeset
96 unsigned int,
kono
parents: 67
diff changeset
97 by_pieces_operation);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
98
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 typedef int (* print_switch_fn_type) (print_switch_type, const char *);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
100
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 /* An example implementation for ELF targets. Defined in varasm.c */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 extern int elf_record_gcc_switches (print_switch_type type, const char *);
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
103
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
104 /* Some places still assume that all pointer or address modes are the
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
105 standard Pmode and ptr_mode. These optimizations become invalid if
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
106 the target actually supports multiple different modes. For now,
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
107 we disable such optimizations on such targets, using this function. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
108 extern bool target_default_pointer_address_modes_p (void);
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
109
111
kono
parents: 67
diff changeset
110 /* For hooks which use the MOVE_RATIO macro, this gives the legacy default
kono
parents: 67
diff changeset
111 behavior. */
kono
parents: 67
diff changeset
112 extern unsigned int get_move_ratio (bool);
kono
parents: 67
diff changeset
113
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 struct stdarg_info;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 struct spec_info_def;
111
kono
parents: 67
diff changeset
116 struct hard_reg_set_container;
kono
parents: 67
diff changeset
117 struct cgraph_node;
kono
parents: 67
diff changeset
118 struct cgraph_simd_clone;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
119
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 /* The struct used by the secondary_reload target hook. */
111
kono
parents: 67
diff changeset
121 struct secondary_reload_info
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 {
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 /* icode is actually an enum insn_code, but we don't want to force every
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 file that includes target.h to include optabs.h . */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 int icode;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 int extra_cost; /* Cost for using (a) scratch register(s) to be taken
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 into account by copy_cost. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
128 /* The next two members are for the use of the backward
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 compatibility hook. */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 struct secondary_reload_info *prev_sri;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
131 int t_icode; /* Actually an enum insn_code - see above. */
111
kono
parents: 67
diff changeset
132 };
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
133
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 /* This is defined in sched-int.h . */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 struct _dep;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
136
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 /* This is defined in ddg.h . */
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 struct ddg;
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
139
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
140 /* This is defined in cfgloop.h . */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
141 class loop;
63
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
142
111
kono
parents: 67
diff changeset
143 /* This is defined in ifcvt.h. */
kono
parents: 67
diff changeset
144 struct noce_if_info;
kono
parents: 67
diff changeset
145
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
146 /* This is defined in tree-ssa-alias.h. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
147 class ao_ref;
111
kono
parents: 67
diff changeset
148
kono
parents: 67
diff changeset
149 /* This is defined in tree-vectorizer.h. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
150 class _stmt_vec_info;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
151
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
152 /* This is defined in calls.h. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
153 class function_arg_info;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
154
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
155 /* This is defined in function-abi.h. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
156 class predefined_function_abi;
111
kono
parents: 67
diff changeset
157
kono
parents: 67
diff changeset
158 /* These are defined in tree-vect-stmts.c. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
159 extern tree stmt_vectype (class _stmt_vec_info *);
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
160 extern bool stmt_in_inner_loop_p (class _stmt_vec_info *);
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
161
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
162 /* Assembler instructions for creating various kinds of integer object. */
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
163
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
164 struct asm_int_op
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
165 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
166 const char *hi;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
167 const char *psi;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
168 const char *si;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
169 const char *pdi;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
170 const char *di;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
171 const char *pti;
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
172 const char *ti;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
173 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
174
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
175 /* Types of costs for vectorizer cost model. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
176 enum vect_cost_for_stmt
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
177 {
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
178 scalar_stmt,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
179 scalar_load,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
180 scalar_store,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
181 vector_stmt,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
182 vector_load,
111
kono
parents: 67
diff changeset
183 vector_gather_load,
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
184 unaligned_load,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
185 unaligned_store,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
186 vector_store,
111
kono
parents: 67
diff changeset
187 vector_scatter_store,
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
188 vec_to_scalar,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
189 scalar_to_vec,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
190 cond_branch_not_taken,
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
191 cond_branch_taken,
111
kono
parents: 67
diff changeset
192 vec_perm,
kono
parents: 67
diff changeset
193 vec_promote_demote,
kono
parents: 67
diff changeset
194 vec_construct
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 };
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
196
111
kono
parents: 67
diff changeset
197 /* Separate locations for which the vectorizer cost model should
kono
parents: 67
diff changeset
198 track costs. */
kono
parents: 67
diff changeset
199 enum vect_cost_model_location {
kono
parents: 67
diff changeset
200 vect_prologue = 0,
kono
parents: 67
diff changeset
201 vect_body = 1,
kono
parents: 67
diff changeset
202 vect_epilogue = 2
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
203 };
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
205 class vec_perm_indices;
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
206
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
207 /* The type to use for lists of vector sizes. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
208 typedef vec<machine_mode> vector_modes;
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
209
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
210 /* Same, but can be used to construct local lists that are
111
kono
parents: 67
diff changeset
211 automatically freed. */
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
212 typedef auto_vec<machine_mode, 8> auto_vector_modes;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
213
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
214 /* First argument of targetm.omp.device_kind_arch_isa. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
215 enum omp_device_kind_arch_isa {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
216 omp_device_kind,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
217 omp_device_arch,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
218 omp_device_isa
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
219 };
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
220
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
221 /* Flags returned by TARGET_VECTORIZE_AUTOVECTORIZE_VECTOR_MODES:
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
222
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
223 VECT_COMPARE_COSTS
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
224 Tells the loop vectorizer to try all the provided modes and
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
225 pick the one with the lowest cost. By default the vectorizer
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
226 will choose the first mode that works. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
227 const unsigned int VECT_COMPARE_COSTS = 1U << 0;
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
228
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
229 /* The contexts in which the use of a type T can be checked by
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
230 TARGET_VERIFY_TYPE_CONTEXT. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
231 enum type_context_kind {
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
232 /* Directly measuring the size of T. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
233 TCTX_SIZEOF,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
234
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
235 /* Directly measuring the alignment of T. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
236 TCTX_ALIGNOF,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
237
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
238 /* Creating objects of type T with static storage duration. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
239 TCTX_STATIC_STORAGE,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
240
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
241 /* Creating objects of type T with thread-local storage duration. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
242 TCTX_THREAD_STORAGE,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
243
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
244 /* Creating a field of type T. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
245 TCTX_FIELD,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
246
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
247 /* Creating an array with elements of type T. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
248 TCTX_ARRAY_ELEMENT,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
249
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
250 /* Adding to or subtracting from a pointer to T, or computing the
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
251 difference between two pointers when one of them is a pointer to T. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
252 TCTX_POINTER_ARITH,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
253
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
254 /* Dynamically allocating objects of type T. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
255 TCTX_ALLOCATION,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
256
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
257 /* Dynamically deallocating objects of type T. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
258 TCTX_DEALLOCATION,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
259
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
260 /* Throwing or catching an object of type T. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
261 TCTX_EXCEPTIONS,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
262
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
263 /* Capturing objects of type T by value in a closure. */
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
264 TCTX_CAPTURE_BY_COPY
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
265 };
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
266
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
267 extern bool verify_type_context (location_t, type_context_kind, const_tree,
1830386684a0 gcc-9.2.0
anatofuz
parents: 131
diff changeset
268 bool = false);
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
269
67
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
270 /* The target structure. This holds all the backend hooks. */
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
271 #define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
272 #define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (* NAME) PARAMS;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
273 #define DEFHOOK_UNDOC DEFHOOK
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
274 #define HOOKSTRUCT(FRAGMENT) FRAGMENT
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
275
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
276 #include "target.def"
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
277
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
278 extern struct gcc_target targetm;
f6334be47118 update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents: 63
diff changeset
279
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
280 /* Return an estimate of the runtime value of X, for use in things
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
281 like cost calculations or profiling frequencies. Note that this
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
282 function should never be used in situations where the actual
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
283 runtime value is needed for correctness, since the function only
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
284 provides a rough guess. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
285
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
286 static inline HOST_WIDE_INT
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
287 estimated_poly_value (poly_int64 x)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
288 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
289 if (NUM_POLY_INT_COEFFS == 1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
290 return x.coeffs[0];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
291 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
292 return targetm.estimated_poly_value (x);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
293 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
294
111
kono
parents: 67
diff changeset
295 #ifdef GCC_TM_H
kono
parents: 67
diff changeset
296
kono
parents: 67
diff changeset
297 #ifndef CUMULATIVE_ARGS_MAGIC
kono
parents: 67
diff changeset
298 #define CUMULATIVE_ARGS_MAGIC ((void *) &targetm.calls)
kono
parents: 67
diff changeset
299 #endif
kono
parents: 67
diff changeset
300
kono
parents: 67
diff changeset
301 static inline CUMULATIVE_ARGS *
kono
parents: 67
diff changeset
302 get_cumulative_args (cumulative_args_t arg)
kono
parents: 67
diff changeset
303 {
kono
parents: 67
diff changeset
304 #if CHECKING_P
kono
parents: 67
diff changeset
305 gcc_assert (arg.magic == CUMULATIVE_ARGS_MAGIC);
kono
parents: 67
diff changeset
306 #endif /* CHECKING_P */
kono
parents: 67
diff changeset
307 return (CUMULATIVE_ARGS *) arg.p;
kono
parents: 67
diff changeset
308 }
kono
parents: 67
diff changeset
309
kono
parents: 67
diff changeset
310 static inline cumulative_args_t
kono
parents: 67
diff changeset
311 pack_cumulative_args (CUMULATIVE_ARGS *arg)
kono
parents: 67
diff changeset
312 {
kono
parents: 67
diff changeset
313 cumulative_args_t ret;
kono
parents: 67
diff changeset
314
kono
parents: 67
diff changeset
315 #if CHECKING_P
kono
parents: 67
diff changeset
316 ret.magic = CUMULATIVE_ARGS_MAGIC;
kono
parents: 67
diff changeset
317 #endif /* CHECKING_P */
kono
parents: 67
diff changeset
318 ret.p = (void *) arg;
kono
parents: 67
diff changeset
319 return ret;
kono
parents: 67
diff changeset
320 }
kono
parents: 67
diff changeset
321 #endif /* GCC_TM_H */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
322
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 #endif /* GCC_TARGET_H */