aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2014-05-06 17:44:15 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2014-05-06 17:44:15 +0000
commitaa3a12d66e691508961992aaba0d13914c274afe (patch)
tree405677cb108c46f727cf1f1bb6116433f35f3e44 /gcc
parent1d60af086712da018dbdf2a31b0fa6513ccc4487 (diff)
downloadgcc-aa3a12d66e691508961992aaba0d13914c274afe.zip
gcc-aa3a12d66e691508961992aaba0d13914c274afe.tar.gz
gcc-aa3a12d66e691508961992aaba0d13914c274afe.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/emit-rtl.c56
-rw-r--r--gcc/rtl.h1
-rw-r--r--gcc/toplev.c1
4 files changed, 36 insertions, 30 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0644a4d..ac74e45 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,11 @@
+2014-05-06 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * 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 <zadeck@naturalbridge.com>
Mike Stump <mikestump@comcast.net>
Richard Sandiford <rdsandiford@googlemail.com>
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index f2b8257..1eacb8f 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 9fb7557..dbf24f3 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 0f7d452..4c334bd 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)