From 3af0c6bce5e4343a6099ba07e9dbfc3288de40a6 Mon Sep 17 00:00:00 2001 From: Aaron Sawdey Date: Thu, 1 Nov 2018 20:41:08 +0000 Subject: [PATCH] rs6000-protos.h (rs6000_address_for_fpconvert): Remove prototype. 2018-11-01 Aaron Sawdey * config/rs6000/rs6000-protos.h (rs6000_address_for_fpconvert): Remove prototype. * config/rs6000/rs6000.c (rs6000_force_indexed_or_indirect_mem): Combine with rs6000_address_for_fpconvert. (rs6000_address_for_fpconvert): Combine with rs6000_force_indexed_or_indirect_mem. (rs6000_expand_vector_init): Change function call from rs6000_address_for_fpconvert to rs6000_force_indexed_or_indirect_mem. * config/rs6000/rs6000.md (floatsi2_lfiwax): Change call from rs6000_address_for_fpconvert to rs6000_force_indexed_or_indirect_mem. (floatsi2_lfiwax_mem): Ditto. (floatunssi2_lfiwzx): Ditto. (floatunssi2_lfiwzx_mem): Ditto. (float2): Ditto. (floatuns2): Ditto. (fix_truncsi2_stfiwx): Ditto. (fixuns_truncsi2_stfiwx): Ditto. (float_si2_hw): Ditto. (floatuns_si2_hw): Ditto. * config/rs6000/vsx.md (*vsx_extract_si): Ditto. (vsx_splat_): Ditto. From-SVN: r265733 --- gcc/ChangeLog | 24 ++++++++++++++++++++++++ gcc/config/rs6000/rs6000-protos.h | 1 - gcc/config/rs6000/rs6000.c | 39 ++++++++++----------------------------- gcc/config/rs6000/rs6000.md | 20 ++++++++++---------- gcc/config/rs6000/vsx.md | 4 ++-- 5 files changed, 46 insertions(+), 42 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 003979b..f3c5949 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,27 @@ +2018-11-01 Aaron Sawdey + + * config/rs6000/rs6000-protos.h (rs6000_address_for_fpconvert): Remove + prototype. + * config/rs6000/rs6000.c (rs6000_force_indexed_or_indirect_mem): + Combine with rs6000_address_for_fpconvert. + (rs6000_address_for_fpconvert): Combine with + rs6000_force_indexed_or_indirect_mem. + (rs6000_expand_vector_init): Change function call from + rs6000_address_for_fpconvert to rs6000_force_indexed_or_indirect_mem. + * config/rs6000/rs6000.md (floatsi2_lfiwax): Change call from + rs6000_address_for_fpconvert to rs6000_force_indexed_or_indirect_mem. + (floatsi2_lfiwax_mem): Ditto. + (floatunssi2_lfiwzx): Ditto. + (floatunssi2_lfiwzx_mem): Ditto. + (float2): Ditto. + (floatuns2): Ditto. + (fix_truncsi2_stfiwx): Ditto. + (fixuns_truncsi2_stfiwx): Ditto. + (float_si2_hw): Ditto. + (floatuns_si2_hw): Ditto. + * config/rs6000/vsx.md (*vsx_extract_si): Ditto. + (vsx_splat_): Ditto. + 2018-11-01 Joseph Myers * configure.ac (gcc_cv_as_ia64_ltoffx_ldxmov_relocs): Add newline diff --git a/gcc/config/rs6000/rs6000-protos.h b/gcc/config/rs6000/rs6000-protos.h index 30dc896..fb69019 100644 --- a/gcc/config/rs6000/rs6000-protos.h +++ b/gcc/config/rs6000/rs6000-protos.h @@ -153,7 +153,6 @@ extern void rs6000_emit_parity (rtx, rtx); extern rtx rs6000_machopic_legitimize_pic_address (rtx, machine_mode, rtx); -extern rtx rs6000_address_for_fpconvert (rtx); extern rtx rs6000_allocate_stack_temp (machine_mode, bool, bool); extern align_flags rs6000_loop_align (rtx); extern void rs6000_split_logical (rtx [], enum rtx_code, bool, bool, bool); diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 30b7266..75b197f 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -6560,7 +6560,7 @@ rs6000_expand_vector_init (rtx target, rtx vals) { rtx element0 = XVECEXP (vals, 0, 0); if (MEM_P (element0)) - element0 = rs6000_address_for_fpconvert (element0); + element0 = rs6000_force_indexed_or_indirect_mem (element0); else element0 = force_reg (SImode, element0); @@ -6601,7 +6601,7 @@ rs6000_expand_vector_init (rtx target, rtx vals) if (TARGET_P9_VECTOR) { if (MEM_P (element0)) - element0 = rs6000_address_for_fpconvert (element0); + element0 = rs6000_force_indexed_or_indirect_mem (element0); emit_insn (gen_vsx_splat_v4sf (target, element0)); } @@ -8423,23 +8423,6 @@ rs6000_const_not_ok_for_debug_p (rtx x) return false; } -/* Helper function for making sure we will make full - use of indexed addressing. */ - -rtx -rs6000_force_indexed_or_indirect_mem (rtx x) -{ - machine_mode m = GET_MODE (x); - if (!indexed_or_indirect_operand (x, m)) - { - rtx addr = XEXP (x, 0); - addr = force_reg (Pmode, addr); - x = replace_equiv_address_nv (x, addr); - } - return x; -} - - /* Implement the TARGET_LEGITIMATE_COMBINED_INSN hook. */ static bool @@ -37312,21 +37295,19 @@ rs6000_allocate_stack_temp (machine_mode mode, return stack; } -/* Given a memory reference, if it is not a reg or reg+reg addressing, convert - to such a form to deal with memory reference instructions like STFIWX that - only take reg+reg addressing. */ +/* Given a memory reference, if it is not a reg or reg+reg addressing, + convert to such a form to deal with memory reference instructions + like STFIWX and LDBRX that only take reg+reg addressing. */ rtx -rs6000_address_for_fpconvert (rtx x) +rs6000_force_indexed_or_indirect_mem (rtx x) { - rtx addr; + machine_mode mode = GET_MODE (x); gcc_assert (MEM_P (x)); - addr = XEXP (x, 0); - if (can_create_pseudo_p () - && ! legitimate_indirect_address_p (addr, reload_completed) - && ! legitimate_indexed_address_p (addr, reload_completed)) + if (can_create_pseudo_p () && !indexed_or_indirect_operand (x, mode)) { + rtx addr = XEXP (x, 0); if (GET_CODE (addr) == PRE_INC || GET_CODE (addr) == PRE_DEC) { rtx reg = XEXP (addr, 0); @@ -37346,7 +37327,7 @@ rs6000_address_for_fpconvert (rtx x) addr = reg; } - x = replace_equiv_address (x, copy_addr_to_reg (addr)); + x = replace_equiv_address (x, force_reg (Pmode, addr)); } return x; diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 4feb18a..2b0538c 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -5225,7 +5225,7 @@ tmp = gen_reg_rtx (DImode); if (MEM_P (src)) { - src = rs6000_address_for_fpconvert (src); + src = rs6000_force_indexed_or_indirect_mem (src); emit_insn (gen_lfiwax (tmp, src)); } else @@ -5252,7 +5252,7 @@ "" [(pc)] { - operands[1] = rs6000_address_for_fpconvert (operands[1]); + operands[1] = rs6000_force_indexed_or_indirect_mem (operands[1]); if (GET_CODE (operands[2]) == SCRATCH) operands[2] = gen_reg_rtx (DImode); if (TARGET_P8_VECTOR) @@ -5300,7 +5300,7 @@ tmp = gen_reg_rtx (DImode); if (MEM_P (src)) { - src = rs6000_address_for_fpconvert (src); + src = rs6000_force_indexed_or_indirect_mem (src); emit_insn (gen_lfiwzx (tmp, src)); } else @@ -5327,7 +5327,7 @@ "" [(pc)] { - operands[1] = rs6000_address_for_fpconvert (operands[1]); + operands[1] = rs6000_force_indexed_or_indirect_mem (operands[1]); if (GET_CODE (operands[2]) == SCRATCH) operands[2] = gen_reg_rtx (DImode); if (TARGET_P8_VECTOR) @@ -5513,7 +5513,7 @@ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64" { if (MEM_P (operands[1])) - operands[1] = rs6000_address_for_fpconvert (operands[1]); + operands[1] = rs6000_force_indexed_or_indirect_mem (operands[1]); }) (define_insn_and_split "*float2_internal" @@ -5565,7 +5565,7 @@ "TARGET_P9_VECTOR && TARGET_DIRECT_MOVE && TARGET_POWERPC64" { if (MEM_P (operands[1])) - operands[1] = rs6000_address_for_fpconvert (operands[1]); + operands[1] = rs6000_force_indexed_or_indirect_mem (operands[1]); }) (define_insn_and_split "*floatuns2_internal" @@ -5646,7 +5646,7 @@ emit_insn (gen_fctiwz_ (tmp, src)); if (MEM_P (dest)) { - dest = rs6000_address_for_fpconvert (dest); + dest = rs6000_force_indexed_or_indirect_mem (dest); emit_insn (gen_stfiwx (dest, tmp)); DONE; } @@ -5793,7 +5793,7 @@ emit_insn (gen_fctiwuz_ (tmp, src)); if (MEM_P (dest)) { - dest = rs6000_address_for_fpconvert (dest); + dest = rs6000_force_indexed_or_indirect_mem (dest); emit_insn (gen_stfiwx (dest, tmp)); DONE; } @@ -14387,7 +14387,7 @@ operands[2] = gen_reg_rtx (DImode); if (MEM_P (operands[1])) - operands[1] = rs6000_address_for_fpconvert (operands[1]); + operands[1] = rs6000_force_indexed_or_indirect_mem (operands[1]); }) (define_insn_and_split "float2" @@ -14453,7 +14453,7 @@ operands[2] = gen_reg_rtx (DImode); if (MEM_P (operands[1])) - operands[1] = rs6000_address_for_fpconvert (operands[1]); + operands[1] = rs6000_force_indexed_or_indirect_mem (operands[1]); }) (define_insn_and_split "floatuns2" diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index 13842cb..52dee7d 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -3624,7 +3624,7 @@ if (MEM_P (operands[0])) { if (can_create_pseudo_p ()) - dest = rs6000_address_for_fpconvert (dest); + dest = rs6000_force_indexed_or_indirect_mem (dest); if (TARGET_P8_VECTOR) emit_move_insn (dest, gen_rtx_REG (SImode, REGNO (vec_tmp))); @@ -4088,7 +4088,7 @@ { rtx op1 = operands[1]; if (MEM_P (op1)) - operands[1] = rs6000_address_for_fpconvert (op1); + operands[1] = rs6000_force_indexed_or_indirect_mem (op1); else if (!REG_P (op1)) op1 = force_reg (mode, op1); }) -- 2.7.4