aboutsummaryrefslogtreecommitdiff
path: root/gcc/toplev.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-07-17 11:19:27 +0200
committerMartin Liska <marxin@gcc.gnu.org>2018-07-17 09:19:27 +0000
commite6de53356769e13178975c18b4ce019a800ea946 (patch)
tree76fa6fbb2e76fcb986efcbb0143316749fbf1e29 /gcc/toplev.c
parent118f2d8bc3e6804996ca2953b86454ec950054bf (diff)
downloadgcc-e6de53356769e13178975c18b4ce019a800ea946.zip
gcc-e6de53356769e13178975c18b4ce019a800ea946.tar.gz
gcc-e6de53356769e13178975c18b4ce019a800ea946.tar.bz2
Clean up of new format of -falign-FOO.
2018-07-17 Martin Liska <mliska@suse.cz> * align.h: New file. * config/alpha/alpha.c (alpha_align_insns_1): Use align_functions directly. * config/i386/i386.c (ix86_avoid_jump_mispredicts): Use new return type align_flags of label_to_alignment. * config/m32r/m32r.h (LOOP_ALIGN): Wrap returned values into align_flags class. * config/m68k/m68k.c: Do not use removed align_labels_value and align_loops_value. * config/nds32/nds32.h (JUMP_ALIGN): Wrap result into align_flags class. (LOOP_ALIGN): Likewise. (LABEL_ALIGN): Likewise. * config/powerpcspe/powerpcspe.c (TARGET_ASM_LOOP_ALIGN_MAX_SKIP): Remove not used macro. (rs6000_loop_align): Change return type to align_flags. (rs6000_loop_align_max_skip): Remove. * config/rs6000/rs6000-protos.h (rs6000_loop_align): Change return type to align_flags. * config/rs6000/rs6000.c (TARGET_ASM_LOOP_ALIGN_MAX_SKIP): Remove not used macro. (rs6000_loop_align): Change return type to align_flags. (rs6000_loop_align_max_skip): Remove. * config/rx/rx.h (JUMP_ALIGN): Wrap integer values * config/rx/rx-protos.h (rx_align_for_label): Make it static function. * config/rx/rx.c (rx_align_for_label): Change return type to align_flags. (rx_max_skip_for_label): Remove TARGET_ASM_*_ALIGN_MAX_SKIP macro definitions. into align_flags class. (LABEL_ALIGN): Likewise. (LOOP_ALIGN): Likewise. * config/s390/s390.c (s390_label_align): Use align_flags class member. (s390_asm_output_function_label): Likewise. * config/sh/sh.c (sh_override_options_after_change): Use align_flags class directly without macros. (find_barrier): Likewise. (barrier_align): Likewise. (sh_loop_align): Likewise. * config/spu/spu.c (spu_option_override): Use align_flags_tuple::get_value instead of removed macros. (spu_sched_init): Likewise. * config/spu/spu.h (GTY): Likewise. * config/visium/visium.c (visium_option_override): Set "8" as default secondary alignment. * config/visium/visium.h (SUBALIGN_LOG): Define to 3 in order to guarantee secondary alignment of 8. * coretypes.h: Include align.h header file. * doc/tm.texi: Remove TARGET_ASM_JUMP_ALIGN_MAX_SKIP, TARGET_ASM_LOOP_ALIGN_MAX_SKIP, TARGET_ASM_LABEL_ALIGN_MAX_SKIP and TARGET_ASM_LABEL_ALIGN_AFTER_BARRIER_MAX_SKIP macros. * doc/tm.texi.in: Likewise. * final.c (struct label_alignment): Remove not used structure. (LABEL_ALIGN): Change type to align_flags. (LOOP_ALIGN): Likewise. (JUMP_ALIGN): Likewise. (default_loop_align_max_skip): Remove. (default_label_align_max_skip): Likewise. (default_jump_align_max_skip): Likewise. (default_label_align_after_barrier_max_skip): (LABEL_TO_ALIGNMENT): Change to access label_align vector. (LABEL_TO_MAX_SKIP): Remove. (label_to_alignment): Return align_flags type instead of integer. (label_to_max_skip): Remove. (align_fuzz): Use align_flags type. (compute_alignments): Use align_flags type and use align_flags::max to combine multiple alignments. (grow_label_align): Grow vec instead of C array. (update_alignments): Assign just LABEL_TO_ALIGNMENT. (shorten_branches): Use align_flags type and use align_flags::max to combine multiple alignments. (final_scan_insn_1): Remove usage of secondary alignment that comes from label alignment, but instead use proper secondary alignment which is computed in grow_label_align. * flags.h (struct align_flags_tuple): Move to align.h. (struct align_flags): Likewise. (state_align_loops): Rename to align_loops. (state_align_jumps): Rename to align_jumps. (state_align_labels): Rename to align_labels. (state_align_functions): Rename to align_functions. (align_loops_log): Remove. (align_jumps_log): Remove. (align_labels_log): Remove. (align_functions_log): Remove. (align_loops_max_skip): Remove. (align_jumps_max_skip): Remove. (align_labels_max_skip): Remove. (align_functions_max_skip): Remove. (align_loops_value): Remove. (align_jumps_value): Remove. (align_labels_value): Remove. (align_functions_value): Remove. * output.h (label_to_alignment): Change return type to align_flags. (label_to_max_skip): Remove. * target.def: Remove loop_align_max_skip, label_align_max_skip, jump_align_max_skip macros. * targhooks.h (default_loop_align_max_skip): Remove. (default_label_align_max_skip): Likewise. (default_jump_align_max_skip): Likewise. (default_label_align_after_barrier_max_skip): Remove. * toplev.c (read_log_maxskip): Use ::normalize function. (parse_N_M): Remove not used argument and also call ::normalize. (parse_alignment_opts): Do not pass unused arguments. * varasm.c (assemble_start_function): Use directly align_functions instead of removed macros. * system.h: Do not poison removed macros. 2018-07-17 Martin Liska <mliska@suse.cz> * gcc.target/powerpc/loop_align.c: Update scanned pattern. From-SVN: r262804
Diffstat (limited to 'gcc/toplev.c')
-rw-r--r--gcc/toplev.c44
1 files changed, 13 insertions, 31 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c
index cf7bab6..1fb8fcc 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1207,24 +1207,26 @@ read_log_maxskip (auto_vec<unsigned> &values, align_flags_tuple *a)
unsigned n = values.pop ();
if (n != 0)
a->log = floor_log2 (n * 2 - 1);
+
if (values.is_empty ())
a->maxskip = n ? n - 1 : 0;
else
{
unsigned m = values.pop ();
- if (m > n)
- m = n;
/* -falign-foo=N:M means M-1 max bytes of padding, not M. */
if (m > 0)
m--;
a->maxskip = m;
}
+
+ /* Normalize the tuple. */
+ a->normalize ();
}
/* Parse "N[:M[:N2[:M2]]]" string FLAG into a pair of struct align_flags. */
static void
-parse_N_M (const char *flag, align_flags &a, unsigned int min_align_log)
+parse_N_M (const char *flag, align_flags &a)
{
if (flag)
{
@@ -1269,7 +1271,10 @@ parse_N_M (const char *flag, align_flags &a, unsigned int min_align_log)
{
/* Set N2 unless subalign can never have any effect. */
if (align > a.levels[0].maxskip + 1)
- a.levels[1].log = SUBALIGN_LOG;
+ {
+ a.levels[1].log = SUBALIGN_LOG;
+ a.levels[1].normalize ();
+ }
}
}
#endif
@@ -1277,40 +1282,17 @@ parse_N_M (const char *flag, align_flags &a, unsigned int min_align_log)
/* Cache seen value. */
cache.put (flag, a);
}
- else
- {
- /* Reset values to zero. */
- for (unsigned i = 0; i < 2; i++)
- {
- a.levels[i].log = 0;
- a.levels[i].maxskip = 0;
- }
- }
-
- if ((unsigned int)a.levels[0].log < min_align_log)
- {
- a.levels[0].log = min_align_log;
- a.levels[0].maxskip = (1 << min_align_log) - 1;
- }
}
-/* Minimum alignment requirements, if arch has them. */
-
-unsigned int min_align_loops_log = 0;
-unsigned int min_align_jumps_log = 0;
-unsigned int min_align_labels_log = 0;
-unsigned int min_align_functions_log = 0;
-
/* Process -falign-foo=N[:M[:N2[:M2]]] options. */
void
parse_alignment_opts (void)
{
- parse_N_M (str_align_loops, state_align_loops, min_align_loops_log);
- parse_N_M (str_align_jumps, state_align_jumps, min_align_jumps_log);
- parse_N_M (str_align_labels, state_align_labels, min_align_labels_log);
- parse_N_M (str_align_functions, state_align_functions,
- min_align_functions_log);
+ parse_N_M (str_align_loops, align_loops);
+ parse_N_M (str_align_jumps, align_jumps);
+ parse_N_M (str_align_labels, align_labels);
+ parse_N_M (str_align_functions, align_functions);
}
/* Process the options that have been parsed. */