diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-08-30 11:21:04 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-08-30 11:21:04 +0000 |
commit | a97390bf6e92f6f9b0f4e20aff4390ca5c609e37 (patch) | |
tree | 887cbbdf7eab9b228fc8dbc63e7d4c06f9b255eb /gcc/function.c | |
parent | 382615c64cad28fb4aa0566b25b3f1921b3d6a3d (diff) | |
download | gcc-a97390bf6e92f6f9b0f4e20aff4390ca5c609e37.zip gcc-a97390bf6e92f6f9b0f4e20aff4390ca5c609e37.tar.gz gcc-a97390bf6e92f6f9b0f4e20aff4390ca5c609e37.tar.bz2 |
[77/77] Add a complex_mode class
This patch adds another machine_mode wrapper for modes that are
known to be COMPLEX_MODE_P. There aren't yet many places that make
use of it, but that might change in future.
2017-08-30 Richard Sandiford <richard.sandiford@linaro.org>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
gcc/
* coretypes.h (complex_mode): New type.
* gdbhooks.py (build_pretty_printer): Handle it.
* machmode.h (complex_mode): New class.
(complex_mode::includes_p): New function.
(is_complex_int_mode): Likewise.
(is_complex_float_mode): Likewise.
* genmodes.c (get_mode_class): Handle complex mode classes.
* function.c (expand_function_end): Use is_complex_int_mode.
gcc/go/
* go-lang.c (go_langhook_type_for_mode): Use is_complex_float_mode.
Co-Authored-By: Alan Hayward <alan.hayward@arm.com>
Co-Authored-By: David Sherwood <david.sherwood@arm.com>
From-SVN: r251527
Diffstat (limited to 'gcc/function.c')
-rw-r--r-- | gcc/function.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/function.c b/gcc/function.c index af5e050..4c77e19 100644 --- a/gcc/function.c +++ b/gcc/function.c @@ -5491,6 +5491,7 @@ expand_function_end (void) : DECL_REGISTER (decl_result)) { rtx real_decl_rtl = crtl->return_rtx; + complex_mode cmode; /* This should be set in assign_parms. */ gcc_assert (REG_FUNCTION_VALUE_P (real_decl_rtl)); @@ -5531,8 +5532,8 @@ expand_function_end (void) need to generate some non-trivial bitfield insertions. Do that on a pseudo and not the hard register. */ else if (GET_CODE (decl_rtl) == CONCAT - && GET_MODE_CLASS (GET_MODE (decl_rtl)) == MODE_COMPLEX_INT - && GET_MODE_BITSIZE (GET_MODE (decl_rtl)) <= BITS_PER_WORD) + && is_complex_int_mode (GET_MODE (decl_rtl), &cmode) + && GET_MODE_BITSIZE (cmode) <= BITS_PER_WORD) { int old_generating_concat_p; rtx tmp; |