From: Geoff Keating Date: Sun, 14 May 2000 21:40:33 +0000 (+0000) Subject: rs6000.md (movsi): Don't modify RTL in-place. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f176e826a0833cf5b4cc81430cdda9b980aae9de;p=gcc.git rs6000.md (movsi): Don't modify RTL in-place. * config/rs6000/rs6000.md (movsi): Don't modify RTL in-place. (movdi): Make similar to movsi. * config/rs6000/rs6000.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): There is no such thing as a DImode CONST_DOUBLE. * config/rs6000/rs6000.c (output_toc): Likewise. From-SVN: r33898 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b909d3ec721..99793e2fe61 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,7 +1,13 @@ 2000-05-14 Geoffrey Keating - * rs6000.c (output_cbranch): Don't output prediction codes - when old mnemonics are in use. Print register names + * config/rs6000/rs6000.md (movsi): Don't modify RTL in-place. + (movdi): Make similar to movsi. + * config/rs6000/rs6000.h (ASM_OUTPUT_SPECIAL_POOL_ENTRY_P): There + is no such thing as a DImode CONST_DOUBLE. + * config/rs6000/rs6000.c (output_toc): Likewise. + + * config/rs6000/rs6000.c (output_cbranch): Don't output prediction + codes when old mnemonics are in use. Print register names for cc registers when requested. * optabs.c (expand_float): Don't allow mode widening that causes diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 104cc8d9dfa..7a8f1b74e7d 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -6228,7 +6228,7 @@ output_toc (file, x, labelno) return; } } - else if (GET_MODE (x) == DImode + else if (GET_MODE (x) == VOIDmode && (GET_CODE (x) == CONST_INT || GET_CODE (x) == CONST_DOUBLE) && ! (TARGET_NO_FP_IN_TOC && ! TARGET_MINIMAL_TOC)) { diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h index b0dcbf42ff9..9959ab503d0 100644 --- a/gcc/config/rs6000/rs6000.h +++ b/gcc/config/rs6000/rs6000.h @@ -2355,7 +2355,7 @@ extern int toc_initialized; || (! (TARGET_NO_FP_IN_TOC && ! TARGET_MINIMAL_TOC) \ && GET_CODE (X) == CONST_DOUBLE \ && (GET_MODE_CLASS (GET_MODE (X)) == MODE_FLOAT \ - || (TARGET_POWERPC64 && GET_MODE (X) == DImode))))) + || TARGET_POWERPC64)))) #if 0 && BITS_PER_WORD == HOST_BITS_PER_INT))) #endif diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 66a23508cf7..1f54ec1358a 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -8087,7 +8087,8 @@ && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant ( XEXP (operands[1], 0)))) { - XEXP (operands[1], 0) = create_TOC_reference (XEXP (operands[1], 0)); + operands[1] = gen_rtx_MEM (SImode, + create_TOC_reference (XEXP (operands[1], 0))); MEM_ALIAS_SET (operands[1]) = get_TOC_alias_set (); RTX_UNCHANGING_P (operands[1]) = 1; } @@ -8709,27 +8710,24 @@ } operands[1] = force_const_mem (DImode, operands[1]); - if (TARGET_TOC && CONSTANT_POOL_EXPR_P (XEXP (operands[1], 0))) + + if (TARGET_TOC + && CONSTANT_POOL_EXPR_P (XEXP (operands[1], 0)) + && ASM_OUTPUT_SPECIAL_POOL_ENTRY_P (get_pool_constant ( + XEXP (operands[1], 0)))) { - XEXP (operands[1], 0) = create_TOC_reference (XEXP (operands[1], 0)); + operands[1] = gen_rtx_MEM (DImode, + create_TOC_reference (XEXP (operands[1], 0))); + MEM_ALIAS_SET (operands[1]) = get_TOC_alias_set (); RTX_UNCHANGING_P (operands[1]) = 1; } + if (! memory_address_p (DImode, XEXP (operands[1], 0)) && ! reload_in_progress) operands[1] = change_address (operands[1], DImode, XEXP (operands[1], 0)); } - - if (TARGET_TOC - && GET_CODE (operands[1]) == MEM - && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF) - { - XEXP (operands[1], 0) = create_TOC_reference (XEXP (operands[1], 0)); - MEM_ALIAS_SET (operands[1]) = get_TOC_alias_set (); - RTX_UNCHANGING_P (operands[1]) = 1; - } - }") (define_insn "*movdi_32"