]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/flags.h
2003-06-30 Bruno Haible <bruno@clisp.org>
[thirdparty/gcc.git] / gcc / flags.h
CommitLineData
f12b58b3 1/* Compilation switch flag definitions for GCC.
bc233f0c 2 Copyright (C) 1987, 1988, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002,
3 2003
b278476e 4 Free Software Foundation, Inc.
addd8f36 5
f12b58b3 6This file is part of GCC.
addd8f36 7
f12b58b3 8GCC is free software; you can redistribute it and/or modify it under
9the terms of the GNU General Public License as published by the Free
10Software Foundation; either version 2, or (at your option) any later
11version.
addd8f36 12
f12b58b3 13GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14WARRANTY; without even the implied warranty of MERCHANTABILITY or
15FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
16for more details.
addd8f36 17
18You should have received a copy of the GNU General Public License
f12b58b3 19along with GCC; see the file COPYING. If not, write to the Free
20Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2102111-1307, USA. */
addd8f36 22
518796ad 23#ifndef GCC_FLAGS_H
24#define GCC_FLAGS_H
25
addd8f36 26enum debug_info_type
27{
28 NO_DEBUG, /* Write no debug info. */
29 DBX_DEBUG, /* Write BSD .stabs for DBX (using dbxout.c). */
30 SDB_DEBUG, /* Write COFF for (old) SDB (using sdbout.c). */
f9e15121 31 DWARF_DEBUG, /* Write Dwarf debug info (using dwarfout.c). */
be6eb971 32 DWARF2_DEBUG, /* Write Dwarf v2 debug info (using dwarf2out.c). */
8d60d2bc 33 XCOFF_DEBUG, /* Write IBM/Xcoff debug info (using dbxout.c). */
00e0eb3d 34 VMS_DEBUG, /* Write VMS debug info (using vmsdbgout.c). */
8d60d2bc 35 VMS_AND_DWARF2_DEBUG /* Write VMS debug info (using vmsdbgout.c).
00e0eb3d 36 and DWARF v2 debug info (using dwarf2out.c). */
addd8f36 37};
38
39/* Specify which kind of debugging info to generate. */
40extern enum debug_info_type write_symbols;
41
cc4ca723 42/* Names of debug_info_type, for error messages. */
43extern const char *const debug_type_names[];
44
addd8f36 45enum debug_info_level
46{
47 DINFO_LEVEL_NONE, /* Write no debugging info. */
48 DINFO_LEVEL_TERSE, /* Write minimal info to support tracebacks only. */
a7dce381 49 DINFO_LEVEL_NORMAL, /* Write info for all declarations (and line table). */
addd8f36 50 DINFO_LEVEL_VERBOSE /* Write normal info plus #define/#undef info. */
51};
52
53/* Specify how much debugging info to generate. */
54extern enum debug_info_level debug_info_level;
55
51d7935f 56/* Nonzero means use GNU-only extensions in the generated symbolic
57 debugging information. */
58extern int use_gnu_debug_info_extensions;
addd8f36 59
bd4acb88 60/* Nonzero means emit debugging information only for symbols which are used. */
61extern int flag_debug_only_used_symbols;
62
addd8f36 63/* Nonzero means do optimizations. -opt. */
64
65extern int optimize;
66
57361983 67/* Nonzero means optimize for size. -Os. */
68
69extern int optimize_size;
70
addd8f36 71/* Don't print functions as they are compiled and don't print
72 times taken by the various passes. -quiet. */
73
74extern int quiet_flag;
75
2a8997e8 76/* Print memory still in use at end of compilation (which may have little
77 to do with peak memory consumption). -fmem-report. */
78
79extern int mem_report;
80
addd8f36 81/* Don't print warning messages. -w. */
82
6f2f567f 83extern bool inhibit_warnings;
addd8f36 84
02c09dab 85/* Don't suppress warnings from system headers. -Wsystem-headers. */
86
6f2f567f 87extern bool warn_system_headers;
02c09dab 88
56421f52 89/* Do print extra warnings (such as for uninitialized variables).
90 -W/-Wextra. */
addd8f36 91
6f2f567f 92extern bool extra_warnings;
93
94/* If -Werror. */
95
96extern bool warnings_are_errors;
addd8f36 97
6dfd0eba 98/* Nonzero to warn about unused variables, functions et.al. Use
99 set_Wunused() to update the -Wunused-* flags that correspond to the
a7dce381 100 -Wunused option. */
addd8f36 101
6dfd0eba 102extern void set_Wunused PARAMS ((int setting));
103
6f2f567f 104extern bool warn_unused_function;
105extern bool warn_unused_label;
106extern bool warn_unused_parameter;
107extern bool warn_unused_variable;
108extern bool warn_unused_value;
addd8f36 109
71a3455a 110/* Nonzero to warn about code which is never reached. */
111
6f2f567f 112extern bool warn_notreached;
71a3455a 113
8d7ceea4 114/* Nonzero means warn if inline function is too large. */
115
6f2f567f 116extern bool warn_inline;
8d7ceea4 117
addd8f36 118/* Nonzero to warn about variables used before they are initialized. */
119
120extern int warn_uninitialized;
121
a7dce381 122/* Nonzero means warn about all declarations which shadow others. */
addd8f36 123
6f2f567f 124extern bool warn_shadow;
addd8f36 125
91b18148 126/* Warn if a switch on an enum, that does not have a default case,
127 fails to have a case for every enum value. */
addd8f36 128
6f2f567f 129extern bool warn_switch;
addd8f36 130
91b18148 131/* Warn if a switch does not have a default case. */
132
6f2f567f 133extern bool warn_switch_default;
91b18148 134
7dc61659 135/* Warn if a switch on an enum fails to have a case for every enum
136 value (regardless of the presence or otherwise of a default case). */
137
6f2f567f 138extern bool warn_switch_enum;
7dc61659 139
addd8f36 140/* Nonzero means warn about function definitions that default the return type
141 or that use a null return and have a return-type other than void. */
142
143extern int warn_return_type;
144
a7dce381 145/* Warn about functions which might be candidates for attribute noreturn. */
fbc1c83e 146
6f2f567f 147extern bool warn_missing_noreturn;
fbc1c83e 148
addd8f36 149/* Nonzero means warn about pointer casts that increase the required
150 alignment of the target type (and might therefore lead to a crash
151 due to a misaligned access). */
152
6f2f567f 153extern bool warn_cast_align;
addd8f36 154
75db8365 155/* Nonzero means warn about any objects definitions whose size is larger
156 than N bytes. Also want about function definitions whose returned
157 values are larger than N bytes. The value N is in `larger_than_size'. */
158
6f2f567f 159extern bool warn_larger_than;
b278476e 160extern HOST_WIDE_INT larger_than_size;
addd8f36 161
162/* Warn if a function returns an aggregate,
163 since there are often incompatible calling conventions for doing this. */
164
6f2f567f 165extern bool warn_aggregate_return;
addd8f36 166
fca12917 167/* Warn if packed attribute on struct is unnecessary and inefficient. */
168
6f2f567f 169extern bool warn_packed;
fca12917 170
171/* Warn when gcc pads a structure to an alignment boundary. */
172
6f2f567f 173extern bool warn_padded;
fca12917 174
3ad51423 175/* Warn when an optimization pass is disabled. */
176
6f2f567f 177extern bool warn_disabled_optimization;
3ad51423 178
88da234d 179/* Nonzero means warn about uses of __attribute__((deprecated))
180 declarations. */
181
6f2f567f 182extern bool warn_deprecated_decl;
88da234d 183
812f3fa9 184/* Nonzero means warn about constructs which might not be strict
185 aliasing safe. */
186
6f2f567f 187extern bool warn_strict_aliasing;
812f3fa9 188
addd8f36 189/* Nonzero if generating code to do profiling. */
190
191extern int profile_flag;
192
a7dce381 193/* Nonzero if generating code to profile program flow graph arcs. */
1f902f41 194
195extern int profile_arc_flag;
196
0a9d9b9c 197/* Nonzero if value profile should be measured. */
198
199extern int flag_profile_values;
200
a7dce381 201/* Nonzero if generating info for gcov to calculate line test coverage. */
1f902f41 202
203extern int flag_test_coverage;
204
a7dce381 205/* Nonzero indicates that branch taken probabilities should be calculated. */
1f902f41 206
207extern int flag_branch_probabilities;
208
7565f115 209/* Nonzero if basic blocks should be reordered. */
210
211extern int flag_reorder_blocks;
212
429fa7fa 213/* Nonzero if functions should be reordered. */
214
215extern int flag_reorder_functions;
216
7565f115 217/* Nonzero if registers should be renamed. */
218
219extern int flag_rename_registers;
220
addd8f36 221/* Nonzero for -pedantic switch: warn about anything
222 that standard C forbids. */
223
224extern int pedantic;
225
226/* Temporarily suppress certain warnings.
227 This is set while reading code from a system header file. */
228
229extern int in_system_header;
230
231/* Nonzero for -dp: annotate the assembly with a comment describing the
232 pattern and alternative used. */
233
234extern int flag_print_asm_name;
235\f
236/* Now the symbols that are set with `-f' switches. */
237
238/* Nonzero means `char' should be signed. */
239
240extern int flag_signed_char;
241
242/* Nonzero means give an enum type only as many bytes as it needs. */
243
244extern int flag_short_enums;
245
246/* Nonzero for -fcaller-saves: allocate values in regs that need to
247 be saved across function calls, if that produces overall better code.
248 Optional now, so people can test it. */
249
250extern int flag_caller_saves;
251
252/* Nonzero for -fpcc-struct-return: return values the same way PCC does. */
253
254extern int flag_pcc_struct_return;
255
256/* Nonzero for -fforce-mem: load memory value into a register
257 before arithmetic on it. This makes better cse but slower compilation. */
258
259extern int flag_force_mem;
260
261/* Nonzero for -fforce-addr: load memory address into a register before
262 reference to memory. This makes better cse but slower compilation. */
263
264extern int flag_force_addr;
265
266/* Nonzero for -fdefer-pop: don't pop args after each function call;
267 instead save them up to pop many calls' args with one insns. */
268
269extern int flag_defer_pop;
270
271/* Nonzero for -ffloat-store: don't allocate floats and doubles
272 in extended-precision registers. */
273
274extern int flag_float_store;
275
276/* Nonzero enables strength-reduction in loop.c. */
277
278extern int flag_strength_reduce;
279
280/* Nonzero enables loop unrolling in unroll.c. Only loops for which the
281 number of iterations can be calculated at compile-time (UNROLL_COMPLETELY,
282 UNROLL_MODULO) or at run-time (preconditioned to be UNROLL_MODULO) are
283 unrolled. */
284
ce32fe65 285extern int flag_old_unroll_loops;
addd8f36 286
287/* Nonzero enables loop unrolling in unroll.c. All loops are unrolled.
288 This is generally not a win. */
289
ce32fe65 290extern int flag_old_unroll_all_loops;
addd8f36 291
a539e2e6 292/* Nonzero forces all invariant computations in loops to be moved
a7dce381 293 outside the loop. */
a539e2e6 294
295extern int flag_move_all_movables;
296
ba38e12b 297/* Nonzero enables prefetch optimizations for arrays in loops. */
298
299extern int flag_prefetch_loop_arrays;
300
a539e2e6 301/* Nonzero forces all general induction variables in loops to be
a7dce381 302 strength reduced. */
a539e2e6 303
304extern int flag_reduce_all_givs;
305
addd8f36 306/* Nonzero for -fcse-follow-jumps:
307 have cse follow jumps to do a more extensive job. */
308
309extern int flag_cse_follow_jumps;
310
ed84fed1 311/* Nonzero for -fcse-skip-blocks:
312 have cse follow a branch around a block. */
313
314extern int flag_cse_skip_blocks;
315
addd8f36 316/* Nonzero for -fexpensive-optimizations:
317 perform miscellaneous relatively-expensive optimizations. */
318extern int flag_expensive_optimizations;
319
320/* Nonzero for -fwritable-strings:
321 store string constants in data segment and don't uniquize them. */
322
323extern int flag_writable_strings;
324
325/* Nonzero means don't put addresses of constant functions in registers.
326 Used for compiling the Unix kernel, where strange substitutions are
327 done on the assembly output. */
328
329extern int flag_no_function_cse;
330
331/* Nonzero for -fomit-frame-pointer:
332 don't make a frame pointer in simple functions that don't require one. */
333
334extern int flag_omit_frame_pointer;
335
336/* Nonzero to inhibit use of define_optimization peephole opts. */
337
338extern int flag_no_peephole;
339
70d4a8b7 340/* Nonzero allows GCC to optimize sibling and tail recursive calls. */
341
342extern int flag_optimize_sibling_calls;
343
6dac5541 344/* Nonzero means the front end generally wants `errno' maintained by math
7f3be425 345 operations, like built-in SQRT. */
6dac5541 346
347extern int flag_errno_math;
348
7f3be425 349/* Nonzero means that unsafe floating-point math optimizations are allowed
350 for the sake of speed. IEEE compliance is not guaranteed, and operations
351 are allowed to assume that their arguments and results are "normal"
352 (e.g., nonnegative for SQRT). */
353
354extern int flag_unsafe_math_optimizations;
355
7eece8c3 356/* Nonzero means that no NaNs or +-Infs are expected. */
357
358extern int flag_finite_math_only;
359
7f3be425 360/* Zero means that floating-point math operations cannot generate a
361 (user-visible) trap. This is the case, for example, in nonstop
362 IEEE 754 arithmetic. */
363
364extern int flag_trapping_math;
365
27bc6aee 366/* 0 means straightforward implementation of complex divide acceptable.
367 1 means wide ranges of inputs must work for complex divide.
ea15b501 368 2 means C99-like requirements for complex divide (not yet implemented). */
27bc6aee 369
370extern int flag_complex_divide_method;
371
943e2912 372/* Nonzero means to run loop optimizations twice. */
373
374extern int flag_rerun_loop_opt;
375
addd8f36 376/* Nonzero means make functions that look like good inline candidates
377 go inline. */
378
379extern int flag_inline_functions;
380
381/* Nonzero for -fkeep-inline-functions: even if we make a function
99c2edb0 382 go inline everywhere, keep its definition around for debugging
addd8f36 383 purposes. */
384
385extern int flag_keep_inline_functions;
386
387/* Nonzero means that functions declared `inline' will be treated
388 as `static'. Prevents generation of zillions of copies of unused
389 static inline functions; instead, `inlines' are written out
390 only when actually used. Used in conjunction with -g. Also
391 does the right thing with #pragma interface. */
392
393extern int flag_no_inline;
394
c31da6e7 395/* Nonzero means that we don't want inlining by virtue of -fno-inline,
396 not just because the tree inliner turned us off. */
397
398extern int flag_really_no_inline;
399
addd8f36 400/* Nonzero if we are only using compiler to check syntax errors. */
401
402extern int flag_syntax_only;
403
f9e15121 404/* Nonzero means we should save auxiliary info into a .X file. */
addd8f36 405
406extern int flag_gen_aux_info;
407
408/* Nonzero means make the text shared if supported. */
409
410extern int flag_shared_data;
411
412/* flag_schedule_insns means schedule insns within basic blocks (before
413 local_alloc).
414 flag_schedule_insns_after_reload means schedule insns after
415 global_alloc. */
416
417extern int flag_schedule_insns;
418extern int flag_schedule_insns_after_reload;
38099b6a 419extern int flag_sched2_use_superblocks;
420extern int flag_sched2_use_traces;
addd8f36 421
3eb9a99d 422/* The following flags have effect only for scheduling before register
423 allocation:
424
76903ae1 425 flag_schedule_interblock means schedule insns across basic blocks.
3eb9a99d 426 flag_schedule_speculative means allow speculative motion of non-load insns.
427 flag_schedule_speculative_load means allow speculative motion of some
428 load insns.
429 flag_schedule_speculative_load_dangerous allows speculative motion of more
12c2cca5 430 load insns. */
3eb9a99d 431
432extern int flag_schedule_interblock;
433extern int flag_schedule_speculative;
434extern int flag_schedule_speculative_load;
435extern int flag_schedule_speculative_load_dangerous;
3eb9a99d 436
9641f63c 437/* flag_branch_on_count_reg means try to replace add-1,compare,branch tupple
a7dce381 438 by a cheaper branch, on a count register. */
3eb9a99d 439extern int flag_branch_on_count_reg;
3eb9a99d 440
082ea57a 441/* This option is set to 1 on -fsingle-precision-constant option which is
442 used to convert the floating point constants to single precision
a7dce381 443 constants. */
082ea57a 444
445extern int flag_single_precision_constant;
3eb9a99d 446
a7dce381 447/* Nonzero means put things in delayed-branch slots if supported. */
addd8f36 448
449extern int flag_delayed_branch;
450
fd63ca43 451/* Nonzero means suppress output of instruction numbers and line number
452 notes in debugging dumps. */
453
454extern int flag_dump_unnumbered;
455
addd8f36 456/* Nonzero means change certain warnings into errors.
457 Usually these are warnings about failure to conform to some standard. */
458
459extern int flag_pedantic_errors;
460
2a6f0f81 461/* Nonzero means generate position-independent code. 1 vs 2 for a
462 target-dependent "small" or "large" mode. */
addd8f36 463
464extern int flag_pic;
465
c3ce66b0 466/* Nonzero if we are compiling position independent code for executable.
467 1 vs 2 for a target-dependent "small" or "large" mode. */
468
469extern int flag_pie;
470
471/* Nonzero if we are compiling code for a shared library, zero for
472 executable. */
473
474extern int flag_shlib;
475
a92771b8 476/* Nonzero means generate extra code for exception handling and enable
477 exception handling. */
478
479extern int flag_exceptions;
480
2358393e 481/* Nonzero means generate frame unwind info table when supported. */
155b05dc 482
483extern int flag_unwind_tables;
484
2358393e 485/* Nonzero means generate frame unwind info table exact at each insn boundary. */
9645fa4f 486
487extern int flag_asynchronous_unwind_tables;
488
9493f142 489/* Nonzero means don't place uninitialized global data in common storage
490 by default. */
addd8f36 491
492extern int flag_no_common;
493
494/* -finhibit-size-directive inhibits output of .size for ELF.
495 This is used only for compiling crtstuff.c,
496 and it may be extended to other effects
497 needed for crtstuff.c on other systems. */
498extern int flag_inhibit_size_directive;
499
f6e3ef26 500/* Nonzero means place each function into its own section on those platforms
501 which support arbitrary section names and unlimited numbers of sections. */
502
503extern int flag_function_sections;
504
e70c91fb 505/* ... and similar for data. */
506
507extern int flag_data_sections;
508
88ef61d1 509/* -fverbose-asm causes extra commentary information to be produced in
510 the generated assembly code (to make it more readable). This option
511 is generally only of use to those who actually need to read the
4f96aab5 512 generated assembly code (perhaps while debugging the compiler itself).
220345e0 513 -fno-verbose-asm, the default, causes the extra information
4f96aab5 514 to not be added and is useful when comparing two assembler files. */
88ef61d1 515
516extern int flag_verbose_asm;
517
4f96aab5 518/* -dA causes debug information to be produced in
519 the generated assembly code (to make it more readable). This option
520 is generally only of use to those who actually need to read the
521 generated assembly code (perhaps while debugging the compiler itself).
522 Currently, this switch is only used by dwarfout.c; however, it is intended
523 to be a catchall for printing debug information in the assembler file. */
524
525extern int flag_debug_asm;
526
af5e5fd0 527extern int flag_dump_rtl_in_asm;
528
5d364be7 529/* Greater than zero if user symbols are prepended by a leading underscore
530 in generated assembly code. */
531extern int flag_leading_underscore;
532
addd8f36 533/* -fgnu-linker specifies use of the GNU linker for initializations.
534 -fno-gnu-linker says that collect will be used. */
535extern int flag_gnu_linker;
a6a1ab64 536
537/* Tag all structures with __attribute__(packed) */
538extern int flag_pack_struct;
f345c71e 539
ea0cb7ae 540/* This flag is only tested if alias checking is enabled.
541 0 if pointer arguments may alias each other. True in C.
542 1 if pointer arguments may not alias each other but may alias
543 global variables.
544 2 if pointer arguments may not alias each other and may not
545 alias global variables. True in Fortran.
546 The value is ignored if flag_alias_check is 0. */
547extern int flag_argument_noalias;
548
b5ba9f3a 549/* Nonzero if we should do (language-dependent) alias analysis.
550 Typically, this analysis will assume that expressions of certain
551 types do not alias expressions of certain other types. Only used
552 if alias analysis (in general) is enabled. */
553extern int flag_strict_aliasing;
554
8f8ac140 555/* Emit code to probe the stack, to help detect stack overflow; also
556 may cause large objects to be allocated dynamically. */
f345c71e 557extern int flag_stack_check;
97bcb74e 558
559/* Do the full regmove optimization pass. */
560extern int flag_regmove;
abd28cef 561
562/* Instrument functions with calls at entry and exit, for profiling. */
563extern int flag_instrument_function_entry_exit;
82575fa7 564
a7dce381 565/* Perform a peephole pass before sched2. */
82575fa7 566extern int flag_peephole2;
5e57d7a8 567
98667efb 568/* Try to guess branch probabilities. */
97d97fcc 569extern int flag_guess_branch_prob;
570
5e57d7a8 571/* -fcheck-bounds causes gcc to generate array bounds checks.
76903ae1 572 For C, C++ and ObjC: defaults off.
5e57d7a8 573 For Java: defaults to on.
76903ae1 574 For Fortran: defaults to off. */
5e57d7a8 575extern int flag_bounds_check;
214d02d0 576
bb2821c0 577/* This will attempt to merge constant section constants, if 1 only
578 string constants and constants from constant pool, if 2 also constant
579 variables. */
580extern int flag_merge_constants;
581
214d02d0 582/* If one, renumber instruction UIDs to reduce the number of
583 unused UIDs if there are a lot of instructions. If greater than
584 one, unconditionally renumber instruction UIDs. */
585extern int flag_renumber_insns;
addd8f36 586\f
587/* Other basic status info about current function. */
588
589/* Nonzero means current function must be given a frame pointer.
590 Set in stmt.c if anything is allocated on the stack there.
591 Set in reload1.c if anything is allocated on the stack there. */
592
593extern int frame_pointer_needed;
594
bec2d490 595/* Nonzero if the generated code should trap on signed overflow
596 for PLUS / SUB / MULT. */
597extern int flag_trapv;
598
b24bee03 599/* Nonzero if the signed arithmetic overflow should wrap around. */
600extern int flag_wrapv;
601
a9fa9190 602/* Value of the -G xx switch, and whether it was passed or not. */
3be2f219 603extern unsigned HOST_WIDE_INT g_switch_value;
e690b385 604extern bool g_switch_set;
3eaf50a4 605
61e95947 606/* Values of the -falign-* flags: how much to align labels in code.
607 0 means `use default', 1 means `don't align'.
608 For each variable, there is an _log variant which is the power
609 of two not less than the variable, for .align output. */
610
611extern int align_loops;
612extern int align_loops_log;
93429286 613extern int align_loops_max_skip;
61e95947 614extern int align_jumps;
615extern int align_jumps_log;
93429286 616extern int align_jumps_max_skip;
61e95947 617extern int align_labels;
618extern int align_labels_log;
93429286 619extern int align_labels_max_skip;
61e95947 620extern int align_functions;
621extern int align_functions_log;
622
fc5cb4c0 623/* Like align_functions_log above, but used by front-ends to force the
624 minimum function alignment. Zero means no alignment is forced. */
625extern int force_align_functions_log;
626
3eaf50a4 627/* Nonzero if we dump in VCG format, not plain text. */
628extern int dump_for_graph;
629
630/* Selection of the graph form. */
631enum graph_dump_types
632{
633 no_graph = 0,
634 vcg
635};
636extern enum graph_dump_types graph_dump_format;
5bbb9f06 637
638/* Nonzero means ignore `#ident' directives. 0 means handle them.
639 On SVR4 targets, it also controls whether or not to emit a
640 string identifying the compiler. */
641
642extern int flag_no_ident;
19f716e5 643
c7926a82 644/* Nonzero means perform global CSE. */
645
646extern int flag_gcse;
647
8e802be9 648/* Nonzero if we want to perform enhanced load motion during gcse. */
649
650extern int flag_gcse_lm;
651
652/* Nonzero if we want to perform store motion after gcse. */
653
654extern int flag_gcse_sm;
655
8af3db02 656/* Perform branch target register optimization before prologue / epilogue
657 threading. */
658
659extern int flag_branch_target_load_optimize;
660
661/* Perform branch target register optimization after prologue / epilogue
662 threading and jump2. */
663
664extern int flag_branch_target_load_optimize2;
665
8e802be9 666
19f716e5 667/* Nonzero means we should do dwarf2 duplicate elimination. */
668
669extern int flag_eliminate_dwarf2_dups;
518796ad 670
c83a163c 671/* Nonzero means we should do unused type elimination. */
672
673extern int flag_eliminate_unused_debug_types;
674
6ef828f9 675/* Nonzero means to collect statistics which might be expensive
518796ad 676 and to print them when we are done. */
677extern int flag_detailed_statistics;
678
be5ed96c 679/* Nonzero means enable synchronous exceptions for non-call instructions. */
680extern int flag_non_call_exceptions;
681
e19896a4 682/* Nonzero means put zero initialized data in the bss section. */
683extern int flag_zero_initialized_in_bss;
684
0a8176f3 685/* Nonzero means disable transformations observable by signaling NaNs. */
686extern int flag_signaling_nans;
687
833eb724 688extern int flag_unit_at_a_time;
689
eb54bdbd 690/* A string that's used when a random name is required. NULL means
691 to make it really random. */
692
693extern const char *flag_random_seed;
694
920d0fb5 695/* True if the given mode has a NaN representation and the treatment of
696 NaN operands is important. Certain optimizations, such as folding
697 x * 0 into x, are not correct for NaN operands, and are normally
698 disabled for modes with NaNs. The user can ask for them to be
699 done anyway using the -funsafe-math-optimizations switch. */
700#define HONOR_NANS(MODE) \
7eece8c3 701 (MODE_HAS_NANS (MODE) && !flag_finite_math_only)
920d0fb5 702
0a8176f3 703/* Like HONOR_NANs, but true if we honor signaling NaNs (or sNaNs). */
704#define HONOR_SNANS(MODE) (flag_signaling_nans && HONOR_NANS (MODE))
705
920d0fb5 706/* As for HONOR_NANS, but true if the mode can represent infinity and
707 the treatment of infinite values is important. */
708#define HONOR_INFINITIES(MODE) \
7eece8c3 709 (MODE_HAS_INFINITIES (MODE) && !flag_finite_math_only)
920d0fb5 710
711/* Like HONOR_NANS, but true if the given mode distinguishes between
98667efb 712 positive and negative zero, and the sign of zero is important. */
920d0fb5 713#define HONOR_SIGNED_ZEROS(MODE) \
714 (MODE_HAS_SIGNED_ZEROS (MODE) && !flag_unsafe_math_optimizations)
715
716/* Like HONOR_NANS, but true if given mode supports sign-dependent rounding,
717 and the rounding mode is important. */
718#define HONOR_SIGN_DEPENDENT_ROUNDING(MODE) \
719 (MODE_HAS_SIGN_DEPENDENT_ROUNDING (MODE) && !flag_unsafe_math_optimizations)
720
2a281353 721#endif /* ! GCC_FLAGS_H */