7352c01332
2011-01-14 Richard Guenther <rguenther@suse.de> PR tree-optimization/47179 * target.def (ref_may_alias_errno): New target hook. * targhooks.h (default_ref_may_alias_errno): Declare. * targhooks.c: Include tree-ssa-alias.h and tree-flow.h. (default_ref_may_alias_errno): New function. * target.h (struct ao_ref_s): Declare. * tree-ssa-alias.c: Include target.h. (call_may_clobber_ref_p_1): Use the ref_may_alias_errno target hook. * Makefile.in (tree-ssa-alias.o): Adjust dependencies. (targhooks.o): Likewise. * doc/tm.texi.in (TARGET_REF_MAY_ALIAS_ERRNO): Document. * doc/tm.texi (TARGET_REF_MAY_ALIAS_ERRNO): Copy documentation. From-SVN: r168788
183 lines
6.3 KiB
C
183 lines
6.3 KiB
C
/* Data structure definitions for a generic GCC target.
|
|
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
|
|
Free Software Foundation, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published by the
|
|
Free Software Foundation; either version 3, or (at your option) any
|
|
later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; see the file COPYING3. If not see
|
|
<http://www.gnu.org/licenses/>.
|
|
|
|
In other words, you are welcome to use, share and improve this program.
|
|
You are forbidden to forbid anyone else to use, share and improve
|
|
what you give them. Help stamp out software-hoarding! */
|
|
|
|
|
|
/* This file contains a data structure that describes a GCC target.
|
|
At present it is incomplete, but in future it should grow to
|
|
contain most or all target machine and target O/S specific
|
|
information.
|
|
|
|
This structure has its initializer declared in target-def.h in the
|
|
form of large macro TARGET_INITIALIZER that expands to many smaller
|
|
macros.
|
|
|
|
The smaller macros each initialize one component of the structure,
|
|
and each has a default. Each target should have a file that
|
|
includes target.h and target-def.h, and overrides any inappropriate
|
|
defaults by undefining the relevant macro and defining a suitable
|
|
replacement. That file should then contain the definition of
|
|
"targetm" like so:
|
|
|
|
struct gcc_target targetm = TARGET_INITIALIZER;
|
|
|
|
Doing things this way allows us to bring together everything that
|
|
defines a GCC target. By supplying a default that is appropriate
|
|
to most targets, we can easily add new items without needing to
|
|
edit dozens of target configuration files. It should also allow us
|
|
to gradually reduce the amount of conditional compilation that is
|
|
scattered throughout GCC. */
|
|
|
|
#ifndef GCC_TARGET_H
|
|
#define GCC_TARGET_H
|
|
|
|
#include "tm.h"
|
|
#include "insn-modes.h"
|
|
|
|
/* Types used by the record_gcc_switches() target function. */
|
|
typedef enum
|
|
{
|
|
SWITCH_TYPE_PASSED, /* A switch passed on the command line. */
|
|
SWITCH_TYPE_ENABLED, /* An option that is currently enabled. */
|
|
SWITCH_TYPE_DESCRIPTIVE, /* Descriptive text, not a switch or option. */
|
|
SWITCH_TYPE_LINE_START, /* Please emit any necessary text at the start of a line. */
|
|
SWITCH_TYPE_LINE_END /* Please emit a line terminator. */
|
|
}
|
|
print_switch_type;
|
|
|
|
typedef int (* print_switch_fn_type) (print_switch_type, const char *);
|
|
|
|
/* An example implementation for ELF targets. Defined in varasm.c */
|
|
extern int elf_record_gcc_switches (print_switch_type type, const char *);
|
|
|
|
/* Some places still assume that all pointer or address modes are the
|
|
standard Pmode and ptr_mode. These optimizations become invalid if
|
|
the target actually supports multiple different modes. For now,
|
|
we disable such optimizations on such targets, using this function. */
|
|
extern bool target_default_pointer_address_modes_p (void);
|
|
|
|
struct stdarg_info;
|
|
struct spec_info_def;
|
|
|
|
/* The struct used by the secondary_reload target hook. */
|
|
typedef struct secondary_reload_info
|
|
{
|
|
/* icode is actually an enum insn_code, but we don't want to force every
|
|
file that includes target.h to include optabs.h . */
|
|
int icode;
|
|
int extra_cost; /* Cost for using (a) scratch register(s) to be taken
|
|
into account by copy_cost. */
|
|
/* The next two members are for the use of the backward
|
|
compatibility hook. */
|
|
struct secondary_reload_info *prev_sri;
|
|
int t_icode; /* Actually an enum insn_code - see above. */
|
|
} secondary_reload_info;
|
|
|
|
/* This is defined in sched-int.h . */
|
|
struct _dep;
|
|
|
|
/* This is defined in ddg.h . */
|
|
struct ddg;
|
|
|
|
/* This is defined in cfgloop.h . */
|
|
struct loop;
|
|
|
|
/* This is defined in tree-ssa-alias.h. */
|
|
struct ao_ref_s;
|
|
|
|
/* Assembler instructions for creating various kinds of integer object. */
|
|
|
|
struct asm_int_op
|
|
{
|
|
const char *hi;
|
|
const char *si;
|
|
const char *di;
|
|
const char *ti;
|
|
};
|
|
|
|
/* Types of costs for vectorizer cost model. */
|
|
enum vect_cost_for_stmt
|
|
{
|
|
scalar_stmt,
|
|
scalar_load,
|
|
scalar_store,
|
|
vector_stmt,
|
|
vector_load,
|
|
unaligned_load,
|
|
unaligned_store,
|
|
vector_store,
|
|
vec_to_scalar,
|
|
scalar_to_vec,
|
|
cond_branch_not_taken,
|
|
cond_branch_taken,
|
|
vec_perm
|
|
};
|
|
|
|
/* Sets of optimization levels at which an option may be enabled by
|
|
default_options_optimization. */
|
|
enum opt_levels
|
|
{
|
|
OPT_LEVELS_NONE, /* No levels (mark end of array). */
|
|
OPT_LEVELS_ALL, /* All levels (used by targets to disable options
|
|
enabled in target-independent code). */
|
|
OPT_LEVELS_0_ONLY, /* -O0 only. */
|
|
OPT_LEVELS_1_PLUS, /* -O1 and above, including -Os. */
|
|
OPT_LEVELS_1_PLUS_SPEED_ONLY, /* -O1 and above, but not -Os. */
|
|
OPT_LEVELS_2_PLUS, /* -O2 and above, including -Os. */
|
|
OPT_LEVELS_2_PLUS_SPEED_ONLY, /* -O2 and above, but not -Os. */
|
|
OPT_LEVELS_3_PLUS, /* -O3 and above. */
|
|
OPT_LEVELS_3_PLUS_AND_SIZE, /* -O3 and above and -Os. */
|
|
OPT_LEVELS_SIZE, /* -Os only. */
|
|
OPT_LEVELS_FAST /* -Ofast only. */
|
|
};
|
|
|
|
/* Description of options to enable by default at given levels. */
|
|
struct default_options
|
|
{
|
|
/* The levels at which to enable the option. */
|
|
enum opt_levels levels;
|
|
|
|
/* The option index and argument or enabled/disabled sense of the
|
|
option, as passed to handle_generated_option. If ARG is NULL and
|
|
the option allows a negative form, the option is considered to be
|
|
passed in negative form when the optimization level is not one of
|
|
those in LEVELS (in order to handle changes to the optimization
|
|
level with the "optimize" attribute). */
|
|
size_t opt_index;
|
|
const char *arg;
|
|
int value;
|
|
};
|
|
|
|
/* The target structure. This holds all the backend hooks. */
|
|
#define DEFHOOKPOD(NAME, DOC, TYPE, INIT) TYPE NAME;
|
|
#define DEFHOOK(NAME, DOC, TYPE, PARAMS, INIT) TYPE (* NAME) PARAMS;
|
|
#define DEFHOOK_UNDOC DEFHOOK
|
|
#define HOOKSTRUCT(FRAGMENT) FRAGMENT
|
|
|
|
#include "target.def"
|
|
|
|
extern struct gcc_target targetm;
|
|
|
|
/* Each target can provide their own. */
|
|
extern struct gcc_targetcm targetcm;
|
|
|
|
#endif /* GCC_TARGET_H */
|