annotate gcc/target.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 /* Data structure definitions for a generic GCC target.
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
2 Copyright (C) 2001-2018 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 . */
b7f97abdc517 update gcc from gcc-4.5.0 to gcc-4.6
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 55
diff changeset
141 struct loop;
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. */
111
kono
parents: 67
diff changeset
147 struct ao_ref;
kono
parents: 67
diff changeset
148
kono
parents: 67
diff changeset
149 /* This is defined in tree-vectorizer.h. */
kono
parents: 67
diff changeset
150 struct _stmt_vec_info;
kono
parents: 67
diff changeset
151
kono
parents: 67
diff changeset
152 /* These are defined in tree-vect-stmts.c. */
kono
parents: 67
diff changeset
153 extern tree stmt_vectype (struct _stmt_vec_info *);
kono
parents: 67
diff changeset
154 extern bool stmt_in_inner_loop_p (struct _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
155
55
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
156 /* 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
157
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
158 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
159 {
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
160 const char *hi;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
161 const char *si;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
162 const char *di;
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
163 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
164 };
77e2b8dfacca update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
165
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
166 /* 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
167 enum vect_cost_for_stmt
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 {
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
169 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
170 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
171 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
172 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
173 vector_load,
111
kono
parents: 67
diff changeset
174 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
175 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
176 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
177 vector_store,
111
kono
parents: 67
diff changeset
178 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
179 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
180 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
181 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
182 cond_branch_taken,
111
kono
parents: 67
diff changeset
183 vec_perm,
kono
parents: 67
diff changeset
184 vec_promote_demote,
kono
parents: 67
diff changeset
185 vec_construct
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
186 };
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
187
111
kono
parents: 67
diff changeset
188 /* Separate locations for which the vectorizer cost model should
kono
parents: 67
diff changeset
189 track costs. */
kono
parents: 67
diff changeset
190 enum vect_cost_model_location {
kono
parents: 67
diff changeset
191 vect_prologue = 0,
kono
parents: 67
diff changeset
192 vect_body = 1,
kono
parents: 67
diff changeset
193 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
194 };
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
195
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
196 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
197
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
198 /* The type to use for lists of vector sizes. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
199 typedef vec<poly_uint64> vector_sizes;
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
200
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
201 /* Same, but can be used to construct local lists that are
111
kono
parents: 67
diff changeset
202 automatically freed. */
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
203 typedef auto_vec<poly_uint64, 8> auto_vector_sizes;
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
204
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
205 /* 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
206 #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
207 #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
208 #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
209 #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
210
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
211 #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
212
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
213 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
214
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
215 /* Return an estimate of the runtime value of X, for use in things
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
216 like cost calculations or profiling frequencies. Note that this
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
217 function should never be used in situations where the actual
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
218 runtime value is needed for correctness, since the function only
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
219 provides a rough guess. */
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
220
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
221 static inline HOST_WIDE_INT
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
222 estimated_poly_value (poly_int64 x)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
223 {
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
224 if (NUM_POLY_INT_COEFFS == 1)
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
225 return x.coeffs[0];
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
226 else
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
227 return targetm.estimated_poly_value (x);
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
228 }
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
229
111
kono
parents: 67
diff changeset
230 #ifdef GCC_TM_H
kono
parents: 67
diff changeset
231
kono
parents: 67
diff changeset
232 #ifndef CUMULATIVE_ARGS_MAGIC
kono
parents: 67
diff changeset
233 #define CUMULATIVE_ARGS_MAGIC ((void *) &targetm.calls)
kono
parents: 67
diff changeset
234 #endif
kono
parents: 67
diff changeset
235
kono
parents: 67
diff changeset
236 static inline CUMULATIVE_ARGS *
kono
parents: 67
diff changeset
237 get_cumulative_args (cumulative_args_t arg)
kono
parents: 67
diff changeset
238 {
kono
parents: 67
diff changeset
239 #if CHECKING_P
kono
parents: 67
diff changeset
240 gcc_assert (arg.magic == CUMULATIVE_ARGS_MAGIC);
kono
parents: 67
diff changeset
241 #endif /* CHECKING_P */
kono
parents: 67
diff changeset
242 return (CUMULATIVE_ARGS *) arg.p;
kono
parents: 67
diff changeset
243 }
kono
parents: 67
diff changeset
244
kono
parents: 67
diff changeset
245 static inline cumulative_args_t
kono
parents: 67
diff changeset
246 pack_cumulative_args (CUMULATIVE_ARGS *arg)
kono
parents: 67
diff changeset
247 {
kono
parents: 67
diff changeset
248 cumulative_args_t ret;
kono
parents: 67
diff changeset
249
kono
parents: 67
diff changeset
250 #if CHECKING_P
kono
parents: 67
diff changeset
251 ret.magic = CUMULATIVE_ARGS_MAGIC;
kono
parents: 67
diff changeset
252 #endif /* CHECKING_P */
kono
parents: 67
diff changeset
253 ret.p = (void *) arg;
kono
parents: 67
diff changeset
254 return ret;
kono
parents: 67
diff changeset
255 }
kono
parents: 67
diff changeset
256 #endif /* GCC_TM_H */
0
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
257
a06113de4d67 first commit
kent <kent@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 #endif /* GCC_TARGET_H */