From aa3a12d66e691508961992aaba0d13914c274afe Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 6 May 2014 17:44:15 +0000 Subject: [PATCH] emit-rtl.c (init_derived_machine_modes): New functionm, split out from... gcc/ * emit-rtl.c (init_derived_machine_modes): New functionm, split out from... (init_emit_once): ...here. * rtl.h (init_derived_machine_modes): Declare. * toplev.c (do_compile): Call it even if no_backend. From-SVN: r210118 --- gcc/ChangeLog | 8 ++++++++ gcc/emit-rtl.c | 56 +++++++++++++++++++++++--------------------------- gcc/rtl.h | 1 + gcc/toplev.c | 1 + 4 files changed, 36 insertions(+), 30 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0644a4d3d71..ac74e45aad5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2014-05-06 Richard Sandiford + + * emit-rtl.c (init_derived_machine_modes): New functionm, split + out from... + (init_emit_once): ...here. + * rtl.h (init_derived_machine_modes): Declare. + * toplev.c (do_compile): Call it even if no_backend. + 2014-05-06 Kenneth Zadeck Mike Stump Richard Sandiford diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index f2b8257de7c..1eacb8f6ac6 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -5720,6 +5720,30 @@ init_emit_regs (void) } } +/* Initialize global machine_mode variables. */ + +void +init_derived_machine_modes (void) +{ + byte_mode = VOIDmode; + word_mode = VOIDmode; + + for (enum machine_mode mode = GET_CLASS_NARROWEST_MODE (MODE_INT); + mode != VOIDmode; + mode = GET_MODE_WIDER_MODE (mode)) + { + if (GET_MODE_BITSIZE (mode) == BITS_PER_UNIT + && byte_mode == VOIDmode) + byte_mode = mode; + + if (GET_MODE_BITSIZE (mode) == BITS_PER_WORD + && word_mode == VOIDmode) + word_mode = mode; + } + + ptr_mode = mode_for_size (POINTER_SIZE, GET_MODE_CLASS (Pmode), 0); +} + /* Create some permanent unique rtl objects shared between all functions. */ void @@ -5747,36 +5771,6 @@ init_emit_once (void) reg_attrs_htab = htab_create_ggc (37, reg_attrs_htab_hash, reg_attrs_htab_eq, NULL); - /* Compute the word and byte modes. */ - - byte_mode = VOIDmode; - word_mode = VOIDmode; - double_mode = VOIDmode; - - for (mode = GET_CLASS_NARROWEST_MODE (MODE_INT); - mode != VOIDmode; - mode = GET_MODE_WIDER_MODE (mode)) - { - if (GET_MODE_BITSIZE (mode) == BITS_PER_UNIT - && byte_mode == VOIDmode) - byte_mode = mode; - - if (GET_MODE_BITSIZE (mode) == BITS_PER_WORD - && word_mode == VOIDmode) - word_mode = mode; - } - - for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT); - mode != VOIDmode; - mode = GET_MODE_WIDER_MODE (mode)) - { - if (GET_MODE_BITSIZE (mode) == DOUBLE_TYPE_SIZE - && double_mode == VOIDmode) - double_mode = mode; - } - - ptr_mode = mode_for_size (POINTER_SIZE, GET_MODE_CLASS (Pmode), 0); - #ifdef INIT_EXPANDERS /* This is to initialize {init|mark|free}_machine_status before the first call to push_function_context_to. This is needed by the Chill front @@ -5799,6 +5793,8 @@ init_emit_once (void) else const_true_rtx = gen_rtx_CONST_INT (VOIDmode, STORE_FLAG_VALUE); + double_mode = mode_for_size (DOUBLE_TYPE_SIZE, MODE_FLOAT, 0); + real_from_integer (&dconst0, double_mode, 0, SIGNED); real_from_integer (&dconst1, double_mode, 1, SIGNED); real_from_integer (&dconst2, double_mode, 2, SIGNED); diff --git a/gcc/rtl.h b/gcc/rtl.h index 9fb75574e95..dbf24f328b3 100644 --- a/gcc/rtl.h +++ b/gcc/rtl.h @@ -2734,6 +2734,7 @@ extern int get_max_insn_count (void); extern int in_sequence_p (void); extern void init_emit (void); extern void init_emit_regs (void); +extern void init_derived_machine_modes (void); extern void init_emit_once (void); extern void push_topmost_sequence (void); extern void pop_topmost_sequence (void); diff --git a/gcc/toplev.c b/gcc/toplev.c index 0f7d452f378..4c334bd451a 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1891,6 +1891,7 @@ do_compile (void) predefined macros, such as __LDBL_MAX__, for targets using non default FP formats. */ init_adjust_machine_modes (); + init_derived_machine_modes (); /* Set up the back-end if requested. */ if (!no_backend)