Am 02/24/2015 um 02:11 PM schrieb Kenneth Zadeck:
On 02/24/2015 06:41 AM, Georg-Johann Lay wrote:
Hi, in order to fix PR64331 I tried to implement new target-specific passes
whose sole purpose is to recompute REG_DEAD notes.
The avr BE relies on correct dead notes which are used in
avr.c:reg_unused_after which uses dead_or_set_p. avr BE needs correct dead
notes in ADJUST_INSN_LENGTH, get_attr_length, get_attr_min_length, etc.
After trying for more than one day I am really frustrated; each approach
ended up in seg_faults somewhere in df.
Following the source comments in df-core.c, recomputing dead notes should be
as easy as
df_note_add_problem ();
df_analyze ();
in the execute() method of the new pass.
As this (and many many other tries using df_scan_alloc, df_scan_blocks
df_finish_pass, df_insn_rescan_all, etc.) always crashes the compiler, I must
do something completely wrong...
Could you give me some advice on correct usage of df or even more preferred
point me to a comprehensible documentation of df which is more complete than
in df-core.c?
Hi, thanks for answering.
It is generally as easy as just adding the problem and calling df_analyze.
You tend to get into trouble if the rtl is not good, i.e. there is improper
sharing or other violations of the canonical rtl rules. DF does not like
improperly shared rtl and it has not been uncommon for port specific passes to
play loose with these rules.
Currently there are no port-specific passes. The only port-specific passes are
the new passes which I am trying to add in order to keep REG_DEAD notes up to date.
I would suggest that first you try a build where you turn on all of the rtl
checking and see if that comes out clean.
Kenny
Okay, here we go. I configured avr-gcc from recent 4.9-branch with
--enable-checking=all on x86-linux-gnu:
$ ../../gcc.gnu.org/gcc-4_9-branch/configure --target=avr
--prefix=/local/gnu/install/gcc-4.9 --disable-nls --with-dwarf2
--enable-target-optspace=yes --with-gnu-ld --with-gnu-as
--enable-languages=c,c++ --enable-checking=all
The passes are added by means of the attached patch and installed right before
passes which might use avr.c:reg_unused_after, i.e. passes that query for
(minimum) insn lengths: .bbro, .compgotos, .shorten and .final.
The compiler crashes when it builds libgcc. The test case is attached as
libgcc2-addvsi3.c and compiled as
$ path-to-xgcc/xgcc -B path-to-xgcc -S libgcc2-addvsi3.c
The crash message (same with optimization) is for the pass which has been added
just before .shorten:
libgcc2-addvsi3.c: In function '__addvhi3':
libgcc2-addvsi3.c:1514:1: internal compiler error: in df_refs_verify, at
df-scan.c:4323
}
^
0x82dfe8a df_refs_verify
../../../gcc.gnu.org/gcc-4_9-branch/gcc/df-scan.c:4323
0x82e7b34 df_insn_refs_verify
../../../gcc.gnu.org/gcc-4_9-branch/gcc/df-scan.c:4414
0x82e9906 df_bb_verify
../../../gcc.gnu.org/gcc-4_9-branch/gcc/df-scan.c:4441
0x82e9d8e df_scan_verify()
../../../gcc.gnu.org/gcc-4_9-branch/gcc/df-scan.c:4573
0x82d3787 df_verify()
../../../gcc.gnu.org/gcc-4_9-branch/gcc/df-core.c:1862
0x82d3809 df_analyze_1
../../../gcc.gnu.org/gcc-4_9-branch/gcc/df-core.c:1250
0x896188b avr_pass_recompute_notes::execute()
../../../gcc.gnu.org/gcc-4_9-branch/gcc/config/avr/avr.c:317
Please submit a full bug report,
Johann
Index: config/avr/avr.c
===================================================================
--- config/avr/avr.c (revision 220738)
+++ config/avr/avr.c (working copy)
@@ -51,6 +51,8 @@
#include "target-def.h"
#include "params.h"
#include "df.h"
+#include "context.h"
+#include "tree-pass.h" /* for current_pass */
/* Maximal allowed offset for an address in the LD command */
#define MAX_LD_OFFSET(MODE) (64 - (signed)GET_MODE_SIZE (MODE))
@@ -284,6 +286,48 @@ avr_to_int_mode (rtx x)
: simplify_gen_subreg (int_mode_for_mode (mode), x, mode, 0);
}
+
+static const pass_data avr_pass_data_recompute_notes =
+{
+ RTL_PASS, /* type */
+ "avr-notes1", /* name */
+ OPTGROUP_NONE, /* optinfo_flags */
+ false, /* has_gate */
+ true, /* has_execute */
+ TV_DF_SCAN, /* tv_id */
+ 0, /* properties_required */
+ 0, /* properties_provided */
+ 0, /* properties_destroyed */
+ 0, /* todo_flags_start */
+ 0, /* todo_flags_finish */
+};
+
+
+class avr_pass_recompute_notes : public rtl_opt_pass
+{
+public:
+ avr_pass_recompute_notes (gcc::context *ctxt)
+ : rtl_opt_pass (avr_pass_data_recompute_notes, ctxt)
+ {}
+
+ /* opt_pass methods */
+ unsigned int execute ()
+ {
+ df_note_add_problem ();
+ df_analyze ();
+
+ return 0;
+ }
+}; // avr_pass_recompute_notes
+
+
+static rtl_opt_pass*
+avr_make_pass_recompute_notes (gcc::context *ctxt, const char *name)
+{
+ rtl_opt_pass *pass = new avr_pass_recompute_notes (ctxt);
+ pass->name = name;
+ return pass;
+}
/* Implement `TARGET_OPTION_OVERRIDE'. */
@@ -346,6 +390,58 @@ avr_option_override (void)
init_machine_status = avr_init_machine_status;
avr_log_set_avr_log();
+
+ /* Register some avr-specific passes. There is no canonical place for this
+ and this function is convenient.
+
+ The passes (re)compute insn notes, in particular REG_DEAD notes which
+ are used by `avr.c::reg_unused_after'. These notes must be up to date or
+ otherwise wrong code might be generated, cf. PR64331. */
+
+ static rtl_opt_pass *notes_final_pass, *notes_shorten_pass;
+ static rtl_opt_pass *notes_bbro_pass, *notes_compgotos_pass;
+
+ notes_bbro_pass = avr_make_pass_recompute_notes (g, "avr-notes-bbro");
+ notes_final_pass = avr_make_pass_recompute_notes (g, "avr-notes-final");
+ notes_shorten_pass = avr_make_pass_recompute_notes (g, "avr-notes-shorten");
+ notes_compgotos_pass = avr_make_pass_recompute_notes (g, "avr-notes-compgotos");
+
+ struct register_pass_info insert_before_bbro =
+ {
+ notes_bbro_pass, /* pass */
+ "bbro", /* reference_pass_name */
+ 1, /* ref_pass_instance_number */
+ PASS_POS_INSERT_BEFORE /* position */
+ };
+
+ struct register_pass_info insert_before_compgotos =
+ {
+ notes_compgotos_pass, /* pass */
+ "compgotos", /* reference_pass_name */
+ 1, /* ref_pass_instance_number */
+ PASS_POS_INSERT_BEFORE /* position */
+ };
+
+ struct register_pass_info insert_before_shorten =
+ {
+ notes_shorten_pass, /* pass */
+ "shorten", /* reference_pass_name */
+ 1, /* ref_pass_instance_number */
+ PASS_POS_INSERT_BEFORE /* position */
+ };
+
+ struct register_pass_info insert_before_final =
+ {
+ notes_final_pass, /* pass */
+ "final", /* reference_pass_name */
+ 1, /* ref_pass_instance_number */
+ PASS_POS_INSERT_BEFORE /* position */
+ };
+
+ register_pass (&insert_before_bbro);
+ register_pass (&insert_before_compgotos);
+ register_pass (&insert_before_shorten);
+ register_pass (&insert_before_final);
}
/* Function to set up the backend function structure. */
typedef int ptrdiff_t;
typedef unsigned int size_t;
typedef int wchar_t;
extern void *malloc (size_t);
extern void free (void *);
extern int atexit (void (*)(void));
extern void abort (void) __attribute__ ((__noreturn__));
extern size_t strlen (const char *);
extern void *memcpy (void *, const void *, size_t);
extern void *memset (void *, int, size_t);
typedef unsigned int hashval_t;
typedef hashval_t (*htab_hash) (const void *);
typedef int (*htab_eq) (const void *, const void *);
typedef void (*htab_del) (void *);
typedef int (*htab_trav) (void **, void *);
typedef void *(*htab_alloc) (size_t, size_t);
typedef void (*htab_free) (void *);
typedef void *(*htab_alloc_with_arg) (void *, size_t, size_t);
typedef void (*htab_free_with_arg) (void *, void *);
struct htab {
htab_hash hash_f;
htab_eq eq_f;
htab_del del_f;
void ** entries;
size_t size;
size_t n_elements;
size_t n_deleted;
unsigned int searches;
unsigned int collisions;
htab_alloc alloc_f;
htab_free free_f;
void * alloc_arg;
htab_alloc_with_arg alloc_with_arg_f;
htab_free_with_arg free_with_arg_f;
unsigned int size_prime_index;
};
typedef struct htab *htab_t;
enum insert_option {NO_INSERT, INSERT};
extern htab_t htab_create_alloc (size_t, htab_hash,
htab_eq, htab_del,
htab_alloc, htab_free);
extern htab_t htab_create_alloc_ex (size_t, htab_hash,
htab_eq, htab_del,
void *, htab_alloc_with_arg,
htab_free_with_arg);
extern htab_t htab_create_typed_alloc (size_t, htab_hash, htab_eq, htab_del,
htab_alloc, htab_alloc, htab_free);
extern htab_t htab_create (size_t, htab_hash, htab_eq, htab_del);
extern htab_t htab_try_create (size_t, htab_hash, htab_eq, htab_del);
extern void htab_set_functions_ex (htab_t, htab_hash,
htab_eq, htab_del,
void *, htab_alloc_with_arg,
htab_free_with_arg);
extern void htab_delete (htab_t);
extern void htab_empty (htab_t);
extern void * htab_find (htab_t, const void *);
extern void ** htab_find_slot (htab_t, const void *, enum insert_option);
extern void * htab_find_with_hash (htab_t, const void *, hashval_t);
extern void ** htab_find_slot_with_hash (htab_t, const void *,
hashval_t, enum insert_option);
extern void htab_clear_slot (htab_t, void **);
extern void htab_remove_elt (htab_t, void *);
extern void htab_remove_elt_with_hash (htab_t, void *, hashval_t);
extern void htab_traverse (htab_t, htab_trav, void *);
extern void htab_traverse_noresize (htab_t, htab_trav, void *);
extern size_t htab_size (htab_t);
extern size_t htab_elements (htab_t);
extern double htab_collisions (htab_t);
extern htab_hash htab_hash_pointer;
extern htab_eq htab_eq_pointer;
extern hashval_t htab_hash_string (const void *);
extern hashval_t iterative_hash (const void *, size_t, hashval_t);
extern int filename_cmp (const char *s1, const char *s2);
extern int filename_ncmp (const char *s1, const char *s2,
size_t n);
extern hashval_t filename_hash (const void *s);
extern int filename_eq (const void *s1, const void *s2);
struct _dont_use_rtx_here_;
struct _dont_use_rtvec_here_;
union _dont_use_tree_here_;
enum function_class {
function_c94,
function_c99_misc,
function_c99_math_complex,
function_sincos
};
enum memmodel
{
MEMMODEL_RELAXED = 0,
MEMMODEL_CONSUME = 1,
MEMMODEL_ACQUIRE = 2,
MEMMODEL_RELEASE = 3,
MEMMODEL_ACQ_REL = 4,
MEMMODEL_SEQ_CST = 5,
MEMMODEL_LAST = 6
};
typedef void (*gt_pointer_operator) (void *, void *);
typedef unsigned char uchar;
enum debug_info_type
{
NO_DEBUG,
DBX_DEBUG,
SDB_DEBUG,
DWARF2_DEBUG,
XCOFF_DEBUG,
VMS_DEBUG,
VMS_AND_DWARF2_DEBUG
};
enum debug_info_levels
{
DINFO_LEVEL_NONE,
DINFO_LEVEL_TERSE,
DINFO_LEVEL_NORMAL,
DINFO_LEVEL_VERBOSE
};
enum debug_info_usage
{
DINFO_USAGE_DFN,
DINFO_USAGE_DIR_USE,
DINFO_USAGE_IND_USE,
DINFO_USAGE_NUM_ENUMS
};
enum debug_struct_file
{
DINFO_STRUCT_FILE_NONE,
DINFO_STRUCT_FILE_BASE,
DINFO_STRUCT_FILE_SYS,
DINFO_STRUCT_FILE_ANY
};
enum symbol_visibility
{
VISIBILITY_DEFAULT,
VISIBILITY_PROTECTED,
VISIBILITY_HIDDEN,
VISIBILITY_INTERNAL
};
enum stack_reuse_level
{
SR_NONE,
SR_NAMED_VARS,
SR_ALL
};
enum ira_algorithm
{
IRA_ALGORITHM_CB,
IRA_ALGORITHM_PRIORITY
};
enum ira_region
{
IRA_REGION_ONE,
IRA_REGION_ALL,
IRA_REGION_MIXED,
IRA_REGION_AUTODETECT
};
enum excess_precision
{
EXCESS_PRECISION_DEFAULT,
EXCESS_PRECISION_FAST,
EXCESS_PRECISION_STANDARD
};
enum stack_check_type
{
NO_STACK_CHECK = 0,
GENERIC_STACK_CHECK,
STATIC_BUILTIN_STACK_CHECK,
FULL_BUILTIN_STACK_CHECK
};
enum warn_strict_overflow_code
{
WARN_STRICT_OVERFLOW_ALL = 1,
WARN_STRICT_OVERFLOW_CONDITIONAL = 2,
WARN_STRICT_OVERFLOW_COMPARISON = 3,
WARN_STRICT_OVERFLOW_MISC = 4,
WARN_STRICT_OVERFLOW_MAGNITUDE = 5
};
enum fp_contract_mode {
FP_CONTRACT_OFF = 0,
FP_CONTRACT_ON = 1,
FP_CONTRACT_FAST = 2
};
enum vect_cost_model {
VECT_COST_MODEL_UNLIMITED = 0,
VECT_COST_MODEL_CHEAP = 1,
VECT_COST_MODEL_DYNAMIC = 2,
VECT_COST_MODEL_DEFAULT = 3
};
enum sanitize_code {
SANITIZE_ADDRESS = 1 << 0,
SANITIZE_USER_ADDRESS = 1 << 1,
SANITIZE_KERNEL_ADDRESS = 1 << 2,
SANITIZE_THREAD = 1 << 3,
SANITIZE_LEAK = 1 << 4,
SANITIZE_SHIFT = 1 << 5,
SANITIZE_DIVIDE = 1 << 6,
SANITIZE_UNREACHABLE = 1 << 7,
SANITIZE_VLA = 1 << 8,
SANITIZE_NULL = 1 << 9,
SANITIZE_RETURN = 1 << 10,
SANITIZE_SI_OVERFLOW = 1 << 11,
SANITIZE_BOOL = 1 << 12,
SANITIZE_ENUM = 1 << 13,
SANITIZE_UNDEFINED = SANITIZE_SHIFT | SANITIZE_DIVIDE | SANITIZE_UNREACHABLE
| SANITIZE_VLA | SANITIZE_NULL | SANITIZE_RETURN
| SANITIZE_SI_OVERFLOW | SANITIZE_BOOL | SANITIZE_ENUM
};
enum vtv_priority {
VTV_NO_PRIORITY = 0,
VTV_STANDARD_PRIORITY = 1,
VTV_PREINIT_PRIORITY = 2
};
enum opt_code
{
OPT____ = 0,
OPT__help = 32,
OPT__help_ = 33,
OPT__no_sysroot_suffix = 60,
OPT__output_pch_ = 66,
OPT__param = 68,
OPT__sysroot_ = 101,
OPT__target_help = 102,
OPT__version = 112,
OPT_A = 115,
OPT_B = 116,
OPT_C = 117,
OPT_CC = 118,
OPT_D = 120,
OPT_E = 121,
OPT_F = 122,
OPT_H = 123,
OPT_I = 124,
OPT_J = 125,
OPT_L = 126,
OPT_M = 127,
OPT_MD = 128,
OPT_MD_ = 129,
OPT_MF = 130,
OPT_MG = 131,
OPT_MM = 132,
OPT_MMD = 133,
OPT_MMD_ = 134,
OPT_MP = 135,
OPT_MQ = 136,
OPT_MT = 137,
OPT_N = 138,
OPT_O = 139,
OPT_Ofast = 140,
OPT_Og = 141,
OPT_Os = 142,
OPT_P = 143,
OPT_Q = 144,
OPT_Qn = 145,
OPT_Qy = 146,
OPT_R = 147,
OPT_S = 148,
OPT_T = 149,
OPT_Tbss = 150,
OPT_Tbss_ = 151,
OPT_Tdata = 152,
OPT_Tdata_ = 153,
OPT_Ttext = 154,
OPT_Ttext_ = 155,
OPT_U = 156,
OPT_Wa_ = 158,
OPT_Wabi = 159,
OPT_Wabi_tag = 160,
OPT_Waddr_space_convert = 161,
OPT_Waddress = 162,
OPT_Waggregate_return = 163,
OPT_Waggressive_loop_optimizations = 164,
OPT_Waliasing = 165,
OPT_Walign_commons = 166,
OPT_Wall = 167,
OPT_Wall_deprecation = 168,
OPT_Wall_javadoc = 169,
OPT_Wampersand = 170,
OPT_Warray_bounds = 171,
OPT_Warray_temporaries = 172,
OPT_Wassert_identifier = 173,
OPT_Wassign_intercept = 174,
OPT_Wattributes = 175,
OPT_Wbad_function_cast = 176,
OPT_Wboxing = 177,
OPT_Wbuiltin_macro_redefined = 178,
OPT_Wc___compat = 179,
OPT_Wc__0x_compat = 180,
OPT_Wc_binding_type = 182,
OPT_Wcast_align = 183,
OPT_Wcast_qual = 184,
OPT_Wchar_concat = 185,
OPT_Wchar_subscripts = 186,
OPT_Wcharacter_truncation = 187,
OPT_Wclobbered = 188,
OPT_Wcomment = 189,
OPT_Wcompare_reals = 191,
OPT_Wcondition_assign = 192,
OPT_Wconditionally_supported = 193,
OPT_Wconstructor_name = 194,
OPT_Wconversion = 195,
OPT_Wconversion_extra = 196,
OPT_Wconversion_null = 197,
OPT_Wcoverage_mismatch = 198,
OPT_Wcpp = 199,
OPT_Wctor_dtor_privacy = 200,
OPT_Wdate_time = 201,
OPT_Wdeclaration_after_statement = 202,
OPT_Wdelete_incomplete = 203,
OPT_Wdelete_non_virtual_dtor = 204,
OPT_Wdep_ann = 205,
OPT_Wdeprecated = 206,
OPT_Wdeprecated_declarations = 207,
OPT_Wdisabled_optimization = 208,
OPT_Wdiscouraged = 209,
OPT_Wdiv_by_zero = 210,
OPT_Wdouble_promotion = 211,
OPT_Weffc__ = 212,
OPT_Wempty_block = 213,
OPT_Wempty_body = 214,
OPT_Wendif_labels = 215,
OPT_Wenum_compare = 216,
OPT_Wenum_identifier = 217,
OPT_Wenum_switch = 218,
OPT_Werror = 219,
OPT_Werror_ = 221,
OPT_Wextra = 222,
OPT_Wextraneous_semicolon = 223,
OPT_Wfallthrough = 224,
OPT_Wfatal_errors = 225,
OPT_Wfield_hiding = 226,
OPT_Wfinal_bound = 227,
OPT_Wfinally = 228,
OPT_Wfloat_conversion = 229,
OPT_Wfloat_equal = 230,
OPT_Wforbidden = 231,
OPT_Wformat_contains_nul = 233,
OPT_Wformat_extra_args = 234,
OPT_Wformat_nonliteral = 235,
OPT_Wformat_security = 236,
OPT_Wformat_y2k = 237,
OPT_Wformat_zero_length = 238,
OPT_Wformat_ = 239,
OPT_Wframe_larger_than_ = 240,
OPT_Wfree_nonheap_object = 241,
OPT_Wfunction_elimination = 242,
OPT_Whiding = 243,
OPT_Wignored_qualifiers = 244,
OPT_Wimplicit = 245,
OPT_Wimplicit_function_declaration = 246,
OPT_Wimplicit_int = 247,
OPT_Wimplicit_interface = 248,
OPT_Wimplicit_procedure = 249,
OPT_Windirect_static = 251,
OPT_Winherited_variadic_ctor = 252,
OPT_Winit_self = 253,
OPT_Winline = 254,
OPT_Wint_to_pointer_cast = 255,
OPT_Wintf_annotation = 256,
OPT_Wintf_non_inherited = 257,
OPT_Wintrinsic_shadow = 258,
OPT_Wintrinsics_std = 259,
OPT_Winvalid_memory_model = 260,
OPT_Winvalid_offsetof = 261,
OPT_Winvalid_pch = 262,
OPT_Wjavadoc = 263,
OPT_Wjump_misses_init = 264,
OPT_Wl_ = 265,
OPT_Wlarger_than_ = 267,
OPT_Wline_truncation = 268,
OPT_Wliteral_suffix = 269,
OPT_Wlocal_hiding = 270,
OPT_Wlogical_op = 271,
OPT_Wlong_long = 272,
OPT_Wmain = 273,
OPT_Wmasked_catch_block = 274,
OPT_Wmaybe_uninitialized = 275,
OPT_Wmissing_braces = 276,
OPT_Wmissing_declarations = 277,
OPT_Wmissing_field_initializers = 278,
OPT_Wmissing_include_dirs = 280,
OPT_Wmissing_parameter_type = 282,
OPT_Wmissing_prototypes = 283,
OPT_Wmultichar = 285,
OPT_Wnarrowing = 286,
OPT_Wnested_externs = 287,
OPT_Wnls = 288,
OPT_Wno_effect_assign = 289,
OPT_Wnoexcept = 290,
OPT_Wnon_template_friend = 291,
OPT_Wnon_virtual_dtor = 292,
OPT_Wnonnull = 293,
OPT_Wnormalized_ = 294,
OPT_Wnull = 295,
OPT_Wold_style_cast = 296,
OPT_Wold_style_declaration = 297,
OPT_Wold_style_definition = 298,
OPT_Wopenmp_simd = 299,
OPT_Wout_of_date = 300,
OPT_Wover_ann = 301,
OPT_Woverflow = 302,
OPT_Woverlength_strings = 303,
OPT_Woverloaded_virtual = 304,
OPT_Woverride_init = 305,
OPT_Wp_ = 306,
OPT_Wpacked = 307,
OPT_Wpacked_bitfield_compat = 308,
OPT_Wpadded = 309,
OPT_Wparam_assign = 310,
OPT_Wparentheses = 311,
OPT_Wpedantic = 312,
OPT_Wpkg_default_method = 313,
OPT_Wpmf_conversions = 314,
OPT_Wpointer_arith = 315,
OPT_Wpointer_sign = 316,
OPT_Wpointer_to_int_cast = 317,
OPT_Wpragmas = 318,
OPT_Wproperty_assign_default = 319,
OPT_Wprotocol = 320,
OPT_Wpsabi = 321,
OPT_Wraw = 322,
OPT_Wreal_q_constant = 323,
OPT_Wrealloc_lhs = 324,
OPT_Wrealloc_lhs_all = 325,
OPT_Wredundant_decls = 326,
OPT_Wredundant_modifiers = 327,
OPT_Wreorder = 328,
OPT_Wreturn_local_addr = 329,
OPT_Wreturn_type = 330,
OPT_Wselector = 331,
OPT_Wsequence_point = 332,
OPT_Wserial = 333,
OPT_Wshadow = 334,
OPT_Wsign_compare = 335,
OPT_Wsign_conversion = 336,
OPT_Wsign_promo = 337,
OPT_Wsizeof_pointer_memaccess = 338,
OPT_Wspecial_param_hiding = 339,
OPT_Wstack_protector = 340,
OPT_Wstack_usage_ = 341,
OPT_Wstatic_access = 342,
OPT_Wstatic_receiver = 343,
OPT_Wstrict_aliasing = 344,
OPT_Wstrict_aliasing_ = 345,
OPT_Wstrict_null_sentinel = 346,
OPT_Wstrict_overflow = 347,
OPT_Wstrict_overflow_ = 348,
OPT_Wstrict_prototypes = 349,
OPT_Wstrict_selector_match = 350,
OPT_Wsuggest_attribute_const = 351,
OPT_Wsuggest_attribute_format = 352,
OPT_Wsuggest_attribute_noreturn = 353,
OPT_Wsuggest_attribute_pure = 354,
OPT_Wsuppress = 355,
OPT_Wsurprising = 356,
OPT_Wswitch = 357,
OPT_Wswitch_default = 358,
OPT_Wswitch_enum = 359,
OPT_Wsync_nand = 360,
OPT_Wsynth = 361,
OPT_Wsynthetic_access = 362,
OPT_Wsystem_headers = 363,
OPT_Wtabs = 364,
OPT_Wtarget_lifetime = 365,
OPT_Wtasks = 366,
OPT_Wtraditional = 367,
OPT_Wtraditional_conversion = 368,
OPT_Wtrampolines = 369,
OPT_Wtrigraphs = 370,
OPT_Wtype_hiding = 371,
OPT_Wtype_limits = 372,
OPT_Wuncheck = 373,
OPT_Wundeclared_selector = 374,
OPT_Wundef = 375,
OPT_Wunderflow = 376,
OPT_Wuninitialized = 377,
OPT_Wunknown_pragmas = 378,
OPT_Wunnecessary_else = 379,
OPT_Wunqualified_field = 380,
OPT_Wunsafe_loop_optimizations = 382,
OPT_Wunsuffixed_float_constants = 383,
OPT_Wunused = 384,
OPT_Wunused_argument = 385,
OPT_Wunused_but_set_parameter = 386,
OPT_Wunused_but_set_variable = 387,
OPT_Wunused_dummy_argument = 388,
OPT_Wunused_function = 389,
OPT_Wunused_import = 390,
OPT_Wunused_label = 391,
OPT_Wunused_local = 392,
OPT_Wunused_local_typedefs = 393,
OPT_Wunused_macros = 394,
OPT_Wunused_parameter = 395,
OPT_Wunused_private = 396,
OPT_Wunused_result = 397,
OPT_Wunused_thrown = 398,
OPT_Wunused_value = 399,
OPT_Wunused_variable = 400,
OPT_Wuseless_cast = 401,
OPT_Wuseless_type_check = 402,
OPT_Wvarargs = 403,
OPT_Wvarargs_cast = 404,
OPT_Wvariadic_macros = 405,
OPT_Wvector_operation_performance = 406,
OPT_Wvirtual_move_assign = 407,
OPT_Wvla = 408,
OPT_Wvolatile_register_var = 409,
OPT_Wwarning_token = 410,
OPT_Wwrite_strings = 411,
OPT_Wzero_as_null_pointer_constant = 412,
OPT_Wzerotrip = 413,
OPT_Xassembler = 414,
OPT_Xlinker = 415,
OPT_Xpreprocessor = 416,
OPT_Z = 417,
OPT_ansi = 418,
OPT_aux_info = 419,
OPT_auxbase = 421,
OPT_auxbase_strip = 422,
OPT_c = 424,
OPT_coverage = 426,
OPT_cpp = 427,
OPT_cpp_ = 428,
OPT_d = 429,
OPT_dumpbase = 430,
OPT_dumpdir = 431,
OPT_dumpmachine = 432,
OPT_dumpspecs = 433,
OPT_dumpversion = 434,
OPT_e = 435,
OPT_export_dynamic = 437,
OPT_extdirs = 438,
OPT_fPIC = 440,
OPT_fPIE = 441,
OPT_fRTS_ = 442,
OPT_fabi_version_ = 443,
OPT_faccess_control = 444,
OPT_fada_spec_parent_ = 445,
OPT_faggressive_function_elimination = 446,
OPT_faggressive_loop_optimizations = 447,
OPT_falign_commons = 448,
OPT_falign_functions = 449,
OPT_falign_functions_ = 450,
OPT_falign_jumps = 451,
OPT_falign_jumps_ = 452,
OPT_falign_labels = 453,
OPT_falign_labels_ = 454,
OPT_falign_loops = 455,
OPT_falign_loops_ = 456,
OPT_fall_intrinsics = 457,
OPT_fallow_leading_underscore = 459,
OPT_fallow_parameterless_variadic_functions = 460,
OPT_fasm = 466,
OPT_fassert = 467,
OPT_fassociative_math = 468,
OPT_fassume_compiled = 469,
OPT_fassume_compiled_ = 470,
OPT_fasynchronous_unwind_tables = 471,
OPT_fauto_inc_dec = 472,
OPT_fautomatic = 473,
OPT_faux_classpath = 474,
OPT_fbackslash = 475,
OPT_fbacktrace = 476,
OPT_fblas_matmul_limit_ = 477,
OPT_fbootclasspath_ = 478,
OPT_fbootstrap_classes = 479,
OPT_fbounds_check = 480,
OPT_fbranch_count_reg = 481,
OPT_fbranch_probabilities = 482,
OPT_fbranch_target_load_optimize = 483,
OPT_fbranch_target_load_optimize2 = 484,
OPT_fbtr_bb_exclusive = 485,
OPT_fbuilding_libgcc = 486,
OPT_fbuiltin = 487,
OPT_fbuiltin_ = 488,
OPT_fcall_saved_ = 489,
OPT_fcall_used_ = 490,
OPT_fcaller_saves = 491,
OPT_fcanonical_system_headers = 492,
OPT_fcheck_array_temporaries = 493,
OPT_fcheck_data_deps = 494,
OPT_fcheck_new = 495,
OPT_fcheck_references = 496,
OPT_fcheck_ = 497,
OPT_fcilkplus = 498,
OPT_fclasspath_ = 499,
OPT_fcoarray_ = 500,
OPT_fcombine_stack_adjustments = 501,
OPT_fcommon = 502,
OPT_fcompare_debug = 503,
OPT_fcompare_debug_second = 504,
OPT_fcompare_debug_ = 505,
OPT_fcompare_elim = 506,
OPT_fcompile_resource_ = 507,
OPT_fcond_mismatch = 508,
OPT_fconserve_space = 509,
OPT_fconserve_stack = 510,
OPT_fconstant_string_class_ = 511,
OPT_fconstexpr_depth_ = 512,
OPT_fconvert_big_endian = 513,
OPT_fconvert_little_endian = 514,
OPT_fconvert_native = 515,
OPT_fconvert_swap = 516,
OPT_fcprop_registers = 517,
OPT_fcray_pointer = 518,
OPT_fcrossjumping = 519,
OPT_fcse_follow_jumps = 520,
OPT_fcx_fortran_rules = 522,
OPT_fcx_limited_range = 523,
OPT_fd_lines_as_code = 524,
OPT_fd_lines_as_comments = 525,
OPT_fdata_sections = 526,
OPT_fdbg_cnt_list = 527,
OPT_fdbg_cnt_ = 528,
OPT_fdce = 529,
OPT_fdebug_cpp = 530,
OPT_fdebug_prefix_map_ = 531,
OPT_fdebug_types_section = 532,
OPT_fdeclone_ctor_dtor = 533,
OPT_fdeduce_init_list = 534,
OPT_fdefault_double_8 = 535,
OPT_fdefault_integer_8 = 537,
OPT_fdefault_real_8 = 538,
OPT_fdefer_pop = 539,
OPT_fdelayed_branch = 540,
OPT_fdelete_dead_exceptions = 541,
OPT_fdelete_null_pointer_checks = 542,
OPT_fdevirtualize = 543,
OPT_fdevirtualize_speculatively = 544,
OPT_fdiagnostics_color_ = 546,
OPT_fdiagnostics_show_caret = 547,
OPT_fdiagnostics_show_location_ = 548,
OPT_fdiagnostics_show_option = 549,
OPT_fdirectives_only = 550,
OPT_fdisable_ = 551,
OPT_fdisable_assertions = 552,
OPT_fdisable_assertions_ = 553,
OPT_fdollar_ok = 554,
OPT_fdollars_in_identifiers = 555,
OPT_fdse = 556,
OPT_fdump_ = 557,
OPT_fdump_ada_spec = 558,
OPT_fdump_ada_spec_slim = 559,
OPT_fdump_final_insns = 561,
OPT_fdump_final_insns_ = 562,
OPT_fdump_fortran_optimized = 563,
OPT_fdump_fortran_original = 564,
OPT_fdump_go_spec_ = 565,
OPT_fdump_noaddr = 566,
OPT_fdump_parse_tree = 567,
OPT_fdump_passes = 568,
OPT_fdump_unnumbered = 569,
OPT_fdump_unnumbered_links = 570,
OPT_fdwarf2_cfi_asm = 571,
OPT_fearly_inlining = 572,
OPT_felide_constructors = 573,
OPT_feliminate_dwarf2_dups = 574,
OPT_feliminate_unused_debug_symbols = 575,
OPT_feliminate_unused_debug_types = 576,
OPT_femit_class_debug_always = 577,
OPT_femit_class_file = 578,
OPT_femit_class_files = 579,
OPT_femit_struct_debug_baseonly = 580,
OPT_femit_struct_debug_detailed_ = 581,
OPT_femit_struct_debug_reduced = 582,
OPT_fenable_ = 583,
OPT_fenable_assertions = 584,
OPT_fenable_assertions_ = 585,
OPT_fencoding_ = 586,
OPT_fenforce_eh_specs = 587,
OPT_fexceptions = 589,
OPT_fexcess_precision_ = 590,
OPT_fexec_charset_ = 591,
OPT_fexpensive_optimizations = 592,
OPT_fext_numeric_literals = 593,
OPT_fextdirs_ = 594,
OPT_fextended_identifiers = 595,
OPT_fextern_tls_init = 596,
OPT_fexternal_blas = 597,
OPT_ff2c = 599,
OPT_ffast_math = 600,
OPT_ffat_lto_objects = 601,
OPT_ffilelist_file = 602,
OPT_ffinite_math_only = 603,
OPT_ffixed_ = 604,
OPT_ffixed_form = 605,
OPT_ffixed_line_length_ = 606,
OPT_ffixed_line_length_none = 607,
OPT_ffloat_store = 608,
OPT_ffor_scope = 609,
OPT_fforce_classes_archive_check = 611,
OPT_fforward_propagate = 612,
OPT_ffp_contract_ = 613,
OPT_ffpe_summary_ = 614,
OPT_ffpe_trap_ = 615,
OPT_ffree_form = 616,
OPT_ffree_line_length_ = 617,
OPT_ffree_line_length_none = 618,
OPT_ffreestanding = 619,
OPT_ffriend_injection = 620,
OPT_ffrontend_optimize = 621,
OPT_ffunction_cse = 622,
OPT_ffunction_sections = 623,
OPT_fgcse = 624,
OPT_fgcse_after_reload = 625,
OPT_fgcse_las = 626,
OPT_fgcse_lm = 627,
OPT_fgcse_sm = 628,
OPT_fgnu_keywords = 629,
OPT_fgnu_runtime = 630,
OPT_fgnu_tm = 631,
OPT_fgnu_unique = 632,
OPT_fgnu89_inline = 633,
OPT_fgo_check_divide_overflow = 634,
OPT_fgo_check_divide_zero = 635,
OPT_fgo_dump_ = 636,
OPT_fgo_optimize_ = 637,
OPT_fgo_pkgpath_ = 638,
OPT_fgo_prefix_ = 639,
OPT_fgo_relative_import_path_ = 640,
OPT_fgraphite = 641,
OPT_fgraphite_identity = 642,
OPT_fguess_branch_probability = 643,
OPT_fhash_synchronization = 646,
OPT_fhoist_adjacent_loads = 649,
OPT_fhosted = 651,
OPT_fident = 653,
OPT_fif_conversion = 654,
OPT_fif_conversion2 = 655,
OPT_fimplement_inlines = 656,
OPT_fimplicit_inline_templates = 657,
OPT_fimplicit_none = 658,
OPT_fimplicit_templates = 659,
OPT_findirect_classes = 660,
OPT_findirect_dispatch = 661,
OPT_findirect_inlining = 662,
OPT_finhibit_size_directive = 663,
OPT_finit_character_ = 664,
OPT_finit_integer_ = 665,
OPT_finit_local_zero = 666,
OPT_finit_logical_ = 667,
OPT_finit_real_ = 668,
OPT_finline = 669,
OPT_finline_atomics = 670,
OPT_finline_functions = 671,
OPT_finline_functions_called_once = 672,
OPT_finline_limit_ = 674,
OPT_finline_small_functions = 675,
OPT_finput_charset_ = 676,
OPT_finstrument_functions = 677,
OPT_finstrument_functions_exclude_file_list_ = 678,
OPT_finstrument_functions_exclude_function_list_ = 679,
OPT_finteger_4_integer_8 = 680,
OPT_fintrinsic_modules_path = 681,
OPT_fintrinsic_modules_path_ = 682,
OPT_fipa_cp = 683,
OPT_fipa_cp_clone = 684,
OPT_fipa_profile = 686,
OPT_fipa_pta = 687,
OPT_fipa_pure_const = 688,
OPT_fipa_reference = 689,
OPT_fipa_sra = 690,
OPT_fira_algorithm_ = 692,
OPT_fira_hoist_pressure = 693,
OPT_fira_loop_pressure = 694,
OPT_fira_region_ = 695,
OPT_fira_share_save_slots = 696,
OPT_fira_share_spill_slots = 697,
OPT_fira_verbose_ = 698,
OPT_fisolate_erroneous_paths_attribute = 699,
OPT_fisolate_erroneous_paths_dereference = 700,
OPT_fivopts = 701,
OPT_fjni = 702,
OPT_fjump_tables = 703,
OPT_fkeep_inline_dllexport = 704,
OPT_fkeep_inline_functions = 705,
OPT_fkeep_static_consts = 706,
OPT_flax_vector_conversions = 708,
OPT_fleading_underscore = 709,
OPT_flive_range_shrinkage = 710,
OPT_floop_block = 711,
OPT_floop_interchange = 713,
OPT_floop_nest_optimize = 714,
OPT_floop_parallelize_all = 716,
OPT_floop_strip_mine = 717,
OPT_flto = 718,
OPT_flto_compression_level_ = 719,
OPT_flto_partition_1to1 = 720,
OPT_flto_partition_balanced = 721,
OPT_flto_partition_max = 722,
OPT_flto_partition_none = 723,
OPT_flto_report = 724,
OPT_flto_report_wpa = 725,
OPT_flto_ = 726,
OPT_fltrans = 727,
OPT_fltrans_output_list_ = 728,
OPT_fmain_ = 729,
OPT_fmath_errno = 730,
OPT_fmax_array_constructor_ = 731,
OPT_fmax_errors_ = 732,
OPT_fmax_identifier_length_ = 733,
OPT_fmax_stack_var_size_ = 734,
OPT_fmax_subrecord_length_ = 735,
OPT_fmem_report = 736,
OPT_fmem_report_wpa = 737,
OPT_fmerge_all_constants = 738,
OPT_fmerge_constants = 739,
OPT_fmerge_debug_strings = 740,
OPT_fmessage_length_ = 741,
OPT_fmodule_private = 742,
OPT_fmodulo_sched = 743,
OPT_fmodulo_sched_allow_regmoves = 744,
OPT_fmove_loop_invariants = 745,
OPT_fms_extensions = 746,
OPT_fnext_runtime = 752,
OPT_fnil_receivers = 753,
OPT_fnon_call_exceptions = 755,
OPT_fnonansi_builtins = 756,
OPT_fnothrow_opt = 758,
OPT_fobjc_abi_version_ = 759,
OPT_fobjc_call_cxx_cdtors = 760,
OPT_fobjc_direct_dispatch = 761,
OPT_fobjc_exceptions = 762,
OPT_fobjc_gc = 763,
OPT_fobjc_nilcheck = 764,
OPT_fobjc_sjlj_exceptions = 765,
OPT_fobjc_std_objc1 = 766,
OPT_fomit_frame_pointer = 767,
OPT_fopenmp = 768,
OPT_fopenmp_simd = 769,
OPT_foperator_names = 770,
OPT_fopt_info = 771,
OPT_fopt_info_ = 772,
OPT_foptimize_sibling_calls = 774,
OPT_foptimize_static_class_initialization = 775,
OPT_foptimize_strlen = 776,
OPT_foutput_class_dir_ = 778,
OPT_fpack_derived = 779,
OPT_fpack_struct = 780,
OPT_fpack_struct_ = 781,
OPT_fpartial_inlining = 782,
OPT_fpcc_struct_return = 783,
OPT_fpch_deps = 784,
OPT_fpch_preprocess = 785,
OPT_fpeel_loops = 786,
OPT_fpeephole = 787,
OPT_fpeephole2 = 788,
OPT_fpermissive = 789,
OPT_fpic = 790,
OPT_fpie = 791,
OPT_fplan9_extensions = 792,
OPT_fplugin_arg_ = 793,
OPT_fplugin_ = 794,
OPT_fpost_ipa_mem_report = 795,
OPT_fpre_ipa_mem_report = 796,
OPT_fpredictive_commoning = 797,
OPT_fprefetch_loop_arrays = 798,
OPT_fpreprocessed = 799,
OPT_fpretty_templates = 800,
OPT_fprofile = 801,
OPT_fprofile_arcs = 802,
OPT_fprofile_correction = 803,
OPT_fprofile_dir_ = 804,
OPT_fprofile_generate = 805,
OPT_fprofile_generate_ = 806,
OPT_fprofile_reorder_functions = 807,
OPT_fprofile_report = 808,
OPT_fprofile_use = 809,
OPT_fprofile_use_ = 810,
OPT_fprofile_values = 811,
OPT_fprotect_parens = 812,
OPT_frandom_seed = 813,
OPT_frandom_seed_ = 814,
OPT_frange_check = 815,
OPT_freal_4_real_10 = 816,
OPT_freal_4_real_16 = 817,
OPT_freal_4_real_8 = 818,
OPT_freal_8_real_10 = 819,
OPT_freal_8_real_16 = 820,
OPT_freal_8_real_4 = 821,
OPT_frealloc_lhs = 822,
OPT_freciprocal_math = 823,
OPT_frecord_gcc_switches = 824,
OPT_frecord_marker_4 = 825,
OPT_frecord_marker_8 = 826,
OPT_frecursive = 827,
OPT_freduced_reflection = 828,
OPT_free = 829,
OPT_freg_struct_return = 830,
OPT_frename_registers = 832,
OPT_freorder_blocks = 833,
OPT_freorder_blocks_and_partition = 834,
OPT_freorder_functions = 835,
OPT_frepack_arrays = 836,
OPT_freplace_objc_classes = 837,
OPT_frepo = 838,
OPT_frequire_return_statement = 839,
OPT_frerun_cse_after_loop = 840,
OPT_freschedule_modulo_scheduled_loops = 842,
OPT_fresolution_ = 843,
OPT_frounding_math = 844,
OPT_frtti = 845,
OPT_fsanitize_ = 846,
OPT_fsaw_java_file = 847,
OPT_fsched_critical_path_heuristic = 848,
OPT_fsched_dep_count_heuristic = 849,
OPT_fsched_group_heuristic = 850,
OPT_fsched_interblock = 851,
OPT_fsched_last_insn_heuristic = 852,
OPT_fsched_pressure = 853,
OPT_fsched_rank_heuristic = 854,
OPT_fsched_spec = 855,
OPT_fsched_spec_insn_heuristic = 856,
OPT_fsched_spec_load = 857,
OPT_fsched_spec_load_dangerous = 858,
OPT_fsched_stalled_insns = 859,
OPT_fsched_stalled_insns_dep = 860,
OPT_fsched_stalled_insns_dep_ = 861,
OPT_fsched_stalled_insns_ = 862,
OPT_fsched_verbose_ = 863,
OPT_fsched2_use_superblocks = 864,
OPT_fschedule_insns = 866,
OPT_fschedule_insns2 = 867,
OPT_fsecond_underscore = 868,
OPT_fsection_anchors = 869,
OPT_fsel_sched_pipelining = 871,
OPT_fsel_sched_pipelining_outer_loops = 872,
OPT_fsel_sched_reschedule_pipelined = 873,
OPT_fselective_scheduling = 874,
OPT_fselective_scheduling2 = 875,
OPT_fshort_double = 876,
OPT_fshort_enums = 877,
OPT_fshort_wchar = 878,
OPT_fshow_column = 879,
OPT_fshrink_wrap = 880,
OPT_fsign_zero = 881,
OPT_fsignaling_nans = 882,
OPT_fsigned_bitfields = 883,
OPT_fsigned_char = 884,
OPT_fsigned_zeros = 885,
OPT_fsimd_cost_model_ = 886,
OPT_fsingle_precision_constant = 887,
OPT_fsource_filename_ = 888,
OPT_fsource_ = 889,
OPT_fsplit_ivs_in_unroller = 890,
OPT_fsplit_stack = 891,
OPT_fsplit_wide_types = 892,
OPT_fstack_arrays = 894,
OPT_fstack_check_ = 896,
OPT_fstack_limit = 897,
OPT_fstack_limit_register_ = 898,
OPT_fstack_limit_symbol_ = 899,
OPT_fstack_protector = 900,
OPT_fstack_protector_all = 901,
OPT_fstack_protector_strong = 902,
OPT_fstack_reuse_ = 903,
OPT_fstack_usage = 904,
OPT_fstats = 905,
OPT_fstore_check = 906,
OPT_fstrict_aliasing = 908,
OPT_fstrict_enums = 909,
OPT_fstrict_overflow = 910,
OPT_fstrict_volatile_bitfields = 912,
OPT_fsync_libcalls = 913,
OPT_fsyntax_only = 914,
OPT_ftabstop_ = 915,
OPT_ftarget_ = 917,
OPT_ftemplate_backtrace_limit_ = 918,
OPT_ftemplate_depth_ = 920,
OPT_ftest_coverage = 921,
OPT_fthread_jumps = 923,
OPT_fthreadsafe_statics = 924,
OPT_ftime_report = 925,
OPT_ftls_model_ = 926,
OPT_ftoplevel_reorder = 927,
OPT_ftracer = 928,
OPT_ftrack_macro_expansion = 929,
OPT_ftrack_macro_expansion_ = 930,
OPT_ftrapping_math = 931,
OPT_ftrapv = 932,
OPT_ftree_bit_ccp = 933,
OPT_ftree_builtin_call_dce = 934,
OPT_ftree_ccp = 935,
OPT_ftree_ch = 936,
OPT_ftree_coalesce_inlined_vars = 937,
OPT_ftree_coalesce_vars = 938,
OPT_ftree_copy_prop = 939,
OPT_ftree_copyrename = 940,
OPT_ftree_cselim = 941,
OPT_ftree_dce = 942,
OPT_ftree_dominator_opts = 943,
OPT_ftree_dse = 944,
OPT_ftree_forwprop = 945,
OPT_ftree_fre = 946,
OPT_ftree_loop_distribute_patterns = 947,
OPT_ftree_loop_distribution = 948,
OPT_ftree_loop_if_convert = 949,
OPT_ftree_loop_if_convert_stores = 950,
OPT_ftree_loop_im = 951,
OPT_ftree_loop_ivcanon = 952,
OPT_ftree_loop_optimize = 954,
OPT_ftree_loop_vectorize = 955,
OPT_ftree_lrs = 956,
OPT_ftree_parallelize_loops_ = 957,
OPT_ftree_partial_pre = 958,
OPT_ftree_phiprop = 959,
OPT_ftree_pre = 960,
OPT_ftree_pta = 961,
OPT_ftree_reassoc = 962,
OPT_ftree_scev_cprop = 964,
OPT_ftree_sink = 965,
OPT_ftree_slp_vectorize = 966,
OPT_ftree_slsr = 967,
OPT_ftree_sra = 968,
OPT_ftree_switch_conversion = 971,
OPT_ftree_tail_merge = 972,
OPT_ftree_ter = 973,
OPT_ftree_vectorize = 975,
OPT_ftree_vrp = 977,
OPT_funderscoring = 978,
OPT_funit_at_a_time = 979,
OPT_funroll_all_loops = 980,
OPT_funroll_loops = 981,
OPT_funsafe_loop_optimizations = 982,
OPT_funsafe_math_optimizations = 983,
OPT_funsigned_bitfields = 984,
OPT_funsigned_char = 985,
OPT_funswitch_loops = 986,
OPT_funwind_tables = 987,
OPT_fuse_atomic_builtins = 988,
OPT_fuse_boehm_gc = 989,
OPT_fuse_cxa_atexit = 990,
OPT_fuse_cxa_get_exception_ptr = 991,
OPT_fuse_divide_subroutine = 992,
OPT_fuse_ld_bfd = 993,
OPT_fuse_ld_gold = 994,
OPT_fuse_linker_plugin = 995,
OPT_fvar_tracking = 996,
OPT_fvar_tracking_assignments = 997,
OPT_fvar_tracking_assignments_toggle = 998,
OPT_fvar_tracking_uninit = 999,
OPT_fvariable_expansion_in_unroller = 1000,
OPT_fvect_cost_model_ = 1002,
OPT_fverbose_asm = 1003,
OPT_fvisibility_inlines_hidden = 1005,
OPT_fvisibility_ms_compat = 1006,
OPT_fvisibility_ = 1007,
OPT_fvpt = 1008,
OPT_fvtable_verify_ = 1011,
OPT_fvtv_counts = 1012,
OPT_fvtv_debug = 1013,
OPT_fweak = 1014,
OPT_fweb = 1015,
OPT_fwhole_program = 1017,
OPT_fwide_exec_charset_ = 1018,
OPT_fworking_directory = 1019,
OPT_fwpa = 1020,
OPT_fwpa_ = 1021,
OPT_fwrapv = 1022,
OPT_fzero_initialized_in_bss = 1025,
OPT_fzero_link = 1026,
OPT_g = 1027,
OPT_gant = 1028,
OPT_gcoff = 1029,
OPT_gdwarf = 1030,
OPT_gdwarf_ = 1031,
OPT_gen_decls = 1032,
OPT_ggdb = 1033,
OPT_ggnu_pubnames = 1034,
OPT_gnat = 1035,
OPT_gnatO = 1036,
OPT_gno_pubnames = 1037,
OPT_gno_record_gcc_switches = 1038,
OPT_gno_split_dwarf = 1039,
OPT_gno_strict_dwarf = 1040,
OPT_gpubnames = 1041,
OPT_grecord_gcc_switches = 1042,
OPT_gsplit_dwarf = 1043,
OPT_gstabs = 1044,
OPT_gstabs_ = 1045,
OPT_gstrict_dwarf = 1046,
OPT_gtoggle = 1047,
OPT_gvms = 1048,
OPT_gxcoff = 1049,
OPT_gxcoff_ = 1050,
OPT_h = 1051,
OPT_idirafter = 1052,
OPT_imacros = 1053,
OPT_imultiarch = 1054,
OPT_imultilib = 1055,
OPT_include = 1056,
OPT_iplugindir_ = 1057,
OPT_iprefix = 1058,
OPT_iquote = 1059,
OPT_isysroot = 1060,
OPT_isystem = 1061,
OPT_iwithprefix = 1062,
OPT_iwithprefixbefore = 1063,
OPT_k8 = 1064,
OPT_l = 1065,
OPT_lang_asm = 1066,
OPT_maccumulate_args = 1067,
OPT_mbranch_cost_ = 1068,
OPT_mcall_prologues = 1069,
OPT_mdeb = 1070,
OPT_mfract_convert_truncate = 1071,
OPT_mint8 = 1072,
OPT_mlog_ = 1073,
OPT_mmcu_ = 1074,
OPT_mno_interrupts = 1075,
OPT_morder1 = 1076,
OPT_morder2 = 1077,
OPT_mpmem_wrap_around = 1078,
OPT_mrelax = 1079,
OPT_msp8 = 1080,
OPT_mstrict_X = 1081,
OPT_mtiny_stack = 1082,
OPT_n = 1083,
OPT_no_canonical_prefixes = 1084,
OPT_no_integrated_cpp = 1085,
OPT_nocpp = 1086,
OPT_nodefaultlibs = 1087,
OPT_nostartfiles = 1088,
OPT_nostdinc = 1089,
OPT_nostdinc__ = 1090,
OPT_nostdlib = 1091,
OPT_o = 1092,
OPT_p = 1093,
OPT_pass_exit_codes = 1094,
OPT_pedantic_errors = 1096,
OPT_pg = 1097,
OPT_pie = 1098,
OPT_pipe = 1099,
OPT_print_file_name_ = 1100,
OPT_print_libgcc_file_name = 1101,
OPT_print_multi_directory = 1102,
OPT_print_multi_lib = 1103,
OPT_print_multi_os_directory = 1104,
OPT_print_multiarch = 1105,
OPT_print_objc_runtime_info = 1106,
OPT_print_prog_name_ = 1107,
OPT_print_search_dirs = 1108,
OPT_print_sysroot = 1109,
OPT_print_sysroot_headers_suffix = 1110,
OPT_quiet = 1111,
OPT_r = 1112,
OPT_remap = 1113,
OPT_s = 1114,
OPT_s_bc_abi = 1115,
OPT_save_temps = 1116,
OPT_save_temps_ = 1117,
OPT_shared = 1118,
OPT_shared_libgcc = 1119,
OPT_specs_ = 1121,
OPT_static = 1122,
OPT_static_libasan = 1123,
OPT_static_libgcc = 1124,
OPT_static_libgcj = 1125,
OPT_static_libgfortran = 1126,
OPT_static_libgo = 1127,
OPT_static_liblsan = 1128,
OPT_static_libstdc__ = 1129,
OPT_static_libtsan = 1130,
OPT_static_libubsan = 1131,
OPT_std_c__11 = 1134,
OPT_std_c__1y = 1136,
OPT_std_c__98 = 1137,
OPT_std_c11 = 1138,
OPT_std_c90 = 1141,
OPT_std_c99 = 1142,
OPT_std_f2003 = 1144,
OPT_std_f2008 = 1145,
OPT_std_f2008ts = 1146,
OPT_std_f95 = 1147,
OPT_std_gnu = 1148,
OPT_std_gnu__11 = 1151,
OPT_std_gnu__1y = 1153,
OPT_std_gnu__98 = 1154,
OPT_std_gnu11 = 1155,
OPT_std_gnu90 = 1158,
OPT_std_gnu99 = 1159,
OPT_std_iso9899_199409 = 1162,
OPT_std_legacy = 1166,
OPT_symbolic = 1167,
OPT_t = 1168,
OPT_time = 1169,
OPT_time_ = 1170,
OPT_traditional = 1171,
OPT_traditional_cpp = 1172,
OPT_trigraphs = 1173,
OPT_u = 1174,
OPT_undef = 1175,
OPT_v = 1176,
OPT_version = 1177,
OPT_w = 1178,
OPT_wrapper = 1179,
OPT_x = 1180,
OPT_z = 1181,
N_OPTS,
OPT_SPECIAL_unknown,
OPT_SPECIAL_ignore,
OPT_SPECIAL_program_name,
OPT_SPECIAL_input_file
};
enum unspec {
UNSPEC_STRLEN = 0,
UNSPEC_MOVMEM = 1,
UNSPEC_INDEX_JMP = 2,
UNSPEC_FMUL = 3,
UNSPEC_FMULS = 4,
UNSPEC_FMULSU = 5,
UNSPEC_COPYSIGN = 6,
UNSPEC_IDENTITY = 7,
UNSPEC_INSERT_BITS = 8,
UNSPEC_ROUND = 9
};
extern const char *const unspec_strings[];
enum unspecv {
UNSPECV_PROLOGUE_SAVES = 0,
UNSPECV_EPILOGUE_RESTORES = 1,
UNSPECV_WRITE_SP = 2,
UNSPECV_GOTO_RECEIVER = 3,
UNSPECV_ENABLE_IRQS = 4,
UNSPECV_MEMORY_BARRIER = 5,
UNSPECV_NOP = 6,
UNSPECV_SLEEP = 7,
UNSPECV_WDR = 8,
UNSPECV_DELAY_CYCLES = 9
};
extern const char *const unspecv_strings[];
enum avr_arch
{
ARCH_UNKNOWN,
ARCH_AVR1,
ARCH_AVR2,
ARCH_AVR25,
ARCH_AVR3,
ARCH_AVR31,
ARCH_AVR35,
ARCH_AVR4,
ARCH_AVR5,
ARCH_AVR51,
ARCH_AVR6,
ARCH_AVRXMEGA2,
ARCH_AVRXMEGA4,
ARCH_AVRXMEGA5,
ARCH_AVRXMEGA6,
ARCH_AVRXMEGA7
};
typedef struct
{
int asm_only;
int have_mul;
int have_jmp_call;
int have_movw_lpmx;
int have_elpm;
int have_elpmx;
int have_eijmp_eicall;
int xmega_p;
int have_rampd;
int default_data_section_start;
int sfr_offset;
const char *const macro;
const char *const arch_name;
} avr_arch_t;
typedef struct
{
const char *const name;
enum avr_arch arch;
int dev_attribute;
const char *const macro;
int data_section_start;
int n_flash;
const char *const library_name;
} avr_mcu_t;
enum avr_device_specific_features
{
AVR_ISA_NONE,
AVR_ISA_RMW = 0x1,
AVR_SHORT_SP = 0x2,
AVR_ERRATA_SKIP = 0x4
};
typedef struct
{
enum avr_arch arch;
const char *texinfo;
} avr_arch_info_t;
extern const avr_arch_t avr_arch_types[];
extern const avr_arch_t *avr_current_arch;
extern const avr_mcu_t avr_mcu_types[];
extern const avr_mcu_t *avr_current_device;
typedef struct
{
unsigned char id;
int memory_class;
int pointer_size;
const char *name;
int segment;
const char *section_name;
} avr_addrspace_t;
extern const avr_addrspace_t avr_addrspace[];
enum
{
ADDR_SPACE_RAM,
ADDR_SPACE_FLASH,
ADDR_SPACE_FLASH1,
ADDR_SPACE_FLASH2,
ADDR_SPACE_FLASH3,
ADDR_SPACE_FLASH4,
ADDR_SPACE_FLASH5,
ADDR_SPACE_MEMX,
ADDR_SPACE_COUNT
};
enum reg_class {
NO_REGS,
R0_REG,
POINTER_X_REGS,
POINTER_Y_REGS,
POINTER_Z_REGS,
STACK_REG,
BASE_POINTER_REGS,
POINTER_REGS,
ADDW_REGS,
SIMPLE_LD_REGS,
LD_REGS,
NO_LD_REGS,
GENERAL_REGS,
ALL_REGS, LIM_REG_CLASSES
};
typedef struct avr_args
{
int nregs;
int regno;
} CUMULATIVE_ARGS;
extern const char *avr_device_to_as (int argc, const char **argv);
extern const char *avr_device_to_ld (int argc, const char **argv);
extern const char *avr_device_to_data_start (int argc, const char **argv);
extern const char *avr_device_to_startfiles (int argc, const char **argv);
extern const char *avr_device_to_devicelib (int argc, const char **argv);
extern const char *avr_device_to_sp8 (int argc, const char **argv);
struct machine_function
{
int is_naked;
int is_interrupt;
int is_signal;
int is_OS_task;
int is_OS_main;
int stack_usage;
int sibcall_fails;
int attributes_checked_p;
int dead_notes_pass_number;
};
extern int avr_accumulate_outgoing_args (void);
enum machine_mode
{
VOIDmode,
BLKmode,
CCmode,
BImode,
QImode,
HImode,
PSImode,
SImode,
DImode,
TImode,
QQmode,
HQmode,
SQmode,
DQmode,
TQmode,
UQQmode,
UHQmode,
USQmode,
UDQmode,
UTQmode,
HAmode,
SAmode,
DAmode,
TAmode,
UHAmode,
USAmode,
UDAmode,
UTAmode,
SFmode,
DFmode,
SDmode,
DDmode,
TDmode,
CQImode,
CHImode,
CPSImode,
CSImode,
CDImode,
CTImode,
SCmode,
DCmode,
MAX_MACHINE_MODE,
MIN_MODE_RANDOM = VOIDmode,
MAX_MODE_RANDOM = BLKmode,
MIN_MODE_CC = CCmode,
MAX_MODE_CC = CCmode,
MIN_MODE_INT = QImode,
MAX_MODE_INT = TImode,
MIN_MODE_PARTIAL_INT = VOIDmode,
MAX_MODE_PARTIAL_INT = VOIDmode,
MIN_MODE_FRACT = QQmode,
MAX_MODE_FRACT = TQmode,
MIN_MODE_UFRACT = UQQmode,
MAX_MODE_UFRACT = UTQmode,
MIN_MODE_ACCUM = HAmode,
MAX_MODE_ACCUM = TAmode,
MIN_MODE_UACCUM = UHAmode,
MAX_MODE_UACCUM = UTAmode,
MIN_MODE_FLOAT = SFmode,
MAX_MODE_FLOAT = DFmode,
MIN_MODE_DECIMAL_FLOAT = SDmode,
MAX_MODE_DECIMAL_FLOAT = TDmode,
MIN_MODE_COMPLEX_INT = CQImode,
MAX_MODE_COMPLEX_INT = CTImode,
MIN_MODE_COMPLEX_FLOAT = SCmode,
MAX_MODE_COMPLEX_FLOAT = DCmode,
MIN_MODE_VECTOR_INT = VOIDmode,
MAX_MODE_VECTOR_INT = VOIDmode,
MIN_MODE_VECTOR_FRACT = VOIDmode,
MAX_MODE_VECTOR_FRACT = VOIDmode,
MIN_MODE_VECTOR_UFRACT = VOIDmode,
MAX_MODE_VECTOR_UFRACT = VOIDmode,
MIN_MODE_VECTOR_ACCUM = VOIDmode,
MAX_MODE_VECTOR_ACCUM = VOIDmode,
MIN_MODE_VECTOR_UACCUM = VOIDmode,
MAX_MODE_VECTOR_UACCUM = VOIDmode,
MIN_MODE_VECTOR_FLOAT = VOIDmode,
MAX_MODE_VECTOR_FLOAT = VOIDmode,
NUM_MACHINE_MODES = MAX_MACHINE_MODE
};
typedef unsigned _Fract UTAtype __attribute__ ((mode (UTA)));
typedef _Fract TAtype __attribute__ ((mode (TA)));
extern int __gcc_bcmp (const unsigned char *, const unsigned char *, size_t);
extern void __clear_cache (char *, char *);
extern void __eprintf (const char *, const char *, unsigned int, const char *)
__attribute__ ((__noreturn__));
typedef int QItype __attribute__ ((mode (QI)));
typedef unsigned int UQItype __attribute__ ((mode (QI)));
typedef int HItype __attribute__ ((mode (HI)));
typedef unsigned int UHItype __attribute__ ((mode (HI)));
typedef int SItype __attribute__ ((mode (SI)));
typedef unsigned int USItype __attribute__ ((mode (SI)));
typedef int DItype __attribute__ ((mode (DI)));
typedef unsigned int UDItype __attribute__ ((mode (DI)));
typedef float SFtype __attribute__ ((mode (SF)));
typedef _Complex float SCtype __attribute__ ((mode (SC)));
typedef int cmp_return_type __attribute__((mode (__libgcc_cmp_return__)));
typedef int shift_count_type __attribute__((mode (__libgcc_shift_count__)));
extern SItype __mulsi3 (SItype, SItype);
extern SItype __divsi3 (SItype, SItype);
extern USItype __udivsi3 (USItype, USItype);
extern USItype __umodsi3 (USItype, USItype);
extern SItype __modsi3 (SItype, SItype);
extern USItype __udivmodsi4 (USItype, USItype, USItype *);
extern SItype __negsi2 (SItype);
extern SItype __lshrsi3 (SItype, shift_count_type);
extern SItype __ashlsi3 (SItype, shift_count_type);
extern SItype __ashrsi3 (SItype, shift_count_type);
extern UHItype __udiv_w_sdiv (UHItype *, UHItype, UHItype, UHItype);
extern cmp_return_type __cmpsi2 (SItype, SItype);
extern cmp_return_type __ucmpsi2 (SItype, SItype);
extern SItype __bswapsi2 (SItype);
extern DItype __bswapdi2 (DItype);
extern HItype __absvhi2 (HItype);
extern HItype __addvhi3 (HItype, HItype);
extern HItype __subvhi3 (HItype, HItype);
extern HItype __mulvhi3 (HItype, HItype);
extern HItype __negvhi2 (HItype);
extern SItype __absvsi2 (SItype);
extern SItype __addvsi3 (SItype, SItype);
extern SItype __subvsi3 (SItype, SItype);
extern SItype __mulvsi3 (SItype, SItype);
extern SItype __negvsi2 (SItype);
extern SItype __fixsfsi (SFtype);
extern SFtype __floatsisf (SItype);
extern SFtype __floatunsisf (USItype);
extern UHItype __fixunssfhi (SFtype);
extern USItype __fixunssfsi (SFtype);
extern SFtype __powisf2 (SFtype, int);
extern SCtype __divsc3 (SFtype, SFtype, SFtype, SFtype);
extern SCtype __mulsc3 (SFtype, SFtype, SFtype, SFtype);
struct DWstruct {HItype low, high;};
typedef union
{
struct DWstruct s;
SItype ll;
} DWunion;
extern const UQItype __popcount_tab[256];
extern const UQItype __clz_tab[256];
extern const UQItype __clz_tab[256] ;
extern int __clzsi2 (USItype);
extern int __clzhi2 (UHItype);
extern int __ctzhi2 (UHItype);
extern int __ctzsi2 (USItype);
extern int __clrsbhi2 (HItype);
extern int __clrsbsi2 (SItype);
extern int __ffshi2 (UHItype);
extern int __ffssi2 (SItype);
extern int __popcounthi2 (UHItype);
extern int __popcountsi2 (USItype);
extern int __parityhi2 (UHItype);
extern int __paritysi2 (USItype);
extern void __enable_execute_stack (void *);
HItype
__addvhi3 (HItype a, HItype b)
{
const HItype w = (UHItype) a + (UHItype) b;
if (b >= 0 ? w < a : w > a)
abort ();
return w;
}