From d686eece5bdee1444d19b9d6b2451c8582f06a2b Mon Sep 17 00:00:00 2001 From: jakub Date: Fri, 16 Feb 2018 09:04:00 +0000 Subject: PR rtl-optimization/83723 * lra-int.h (lra_substitute_pseudo): Add DEBUG_P argument. * lra.c (lra_substitute_pseudo): Likewise. If true, use gen_rtx_raw_SUBREG instead of gen_rtx_SUBREG. Pass DEBUG_P to recursive calls. (lra_substitute_pseudo_within_insn): Adjust lra_substitute_pseudo callers. * lra-constraints.c (inherit_reload_reg, split_reg): Likewise. * gcc.dg/pr83723.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257725 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/lra-constraints.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'gcc/lra-constraints.c') diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 125bbb6c02b..9d22da232f4 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -5287,7 +5287,8 @@ inherit_reload_reg (bool def_p, int original_regno, lra_assert (DEBUG_INSN_P (usage_insn)); next_usage_insns = XEXP (next_usage_insns, 1); } - lra_substitute_pseudo (&usage_insn, original_regno, new_reg, false); + lra_substitute_pseudo (&usage_insn, original_regno, new_reg, false, + DEBUG_INSN_P (usage_insn)); lra_update_insn_regno_info (as_a (usage_insn)); if (lra_dump_file != NULL) { @@ -5608,7 +5609,8 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn, usage_insn = XEXP (next_usage_insns, 0); lra_assert (DEBUG_INSN_P (usage_insn)); next_usage_insns = XEXP (next_usage_insns, 1); - lra_substitute_pseudo (&usage_insn, original_regno, new_reg, false); + lra_substitute_pseudo (&usage_insn, original_regno, new_reg, false, + true); lra_update_insn_regno_info (as_a (usage_insn)); if (lra_dump_file != NULL) { -- cgit v1.2.1 From fbaab4863b983b55fed5a2b99843aea1ce3090fb Mon Sep 17 00:00:00 2001 From: vmakarov Date: Fri, 16 Feb 2018 18:17:09 +0000 Subject: 2018-02-16 Vladimir Makarov PR rtl-optimization/70023 * lra-constraints.c (inherit_in_ebb): Take hard reg mode of src_regno into account. 2018-02-16 Vladimir Makarov PR rtl-optimization/70023 * gcc.target/i386/pr70023.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257751 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/lra-constraints.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'gcc/lra-constraints.c') diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 9d22da232f4..d730f36fba0 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -6346,7 +6346,13 @@ inherit_in_ebb (rtx_insn *head, rtx_insn *tail) PSEUDO_REGNO_MODE (src_regno), reg_renumber[src_regno]); } - add_next_usage_insn (src_regno, use_insn, reloads_num); + if (src_regno >= FIRST_PSEUDO_REGISTER) + add_next_usage_insn (src_regno, use_insn, reloads_num); + else + { + for (i = 0; i < hard_regno_nregs (src_regno, reg->biggest_mode); i++) + add_next_usage_insn (src_regno + i, use_insn, reloads_num); + } } } /* Process used call regs. */ -- cgit v1.2.1 From 71d47a145dd9cea2a8e9e067eb4eee26e4efb4af Mon Sep 17 00:00:00 2001 From: vmakarov Date: Thu, 22 Feb 2018 21:17:51 +0000 Subject: 2018-02-22 Vladimir Makarov PR target/81572 * lra-int.h (LRA_UNKNOWN_ALT, LRA_NON_CLOBBERED_ALT): New macros. * lra.c (lra_set_insn_recog_data, lra_update_insn_recog_data): Use LRA_UNKNOWN_ALT. * lra-constraints.c (curr_insn_transform): Set up LRA_NON_CLOBBERED_ALT for moves processed on the fast path. Use LRA_UNKNOWN_ALT. (remove_inheritance_pseudos): Use LRA_UNKNOWN_ALT. * lra-eliminations.c (spill_pseudos): Ditto. (process_insn_for_elimination): Ditto. * lra-lives.c (reg_early_clobber_p): Use the new macros. * lra-spills.c (spill_pseudos): Use LRA_UNKNOWN_ALT and LRA_NON_CLOBBERED_ALT. 2018-02-22 Vladimir Makarov PR target/81572 * gcc.target/powerpc/pr81572.c: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@257915 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/lra-constraints.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'gcc/lra-constraints.c') diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index d730f36fba0..59b97540d98 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -3730,7 +3730,13 @@ curr_insn_transform (bool check_only_p) curr_insn_set = single_set (curr_insn); if (curr_insn_set != NULL_RTX && simple_move_p ()) - return false; + { + /* We assume that the corresponding insn alternative has no + earlier clobbers. If it is not the case, don't define move + cost equal to 2 for the corresponding register classes. */ + lra_set_used_insn_alternative (curr_insn, LRA_NON_CLOBBERED_ALT); + return false; + } no_input_reloads_p = no_output_reloads_p = false; goal_alt_number = -1; @@ -3838,7 +3844,7 @@ curr_insn_transform (bool check_only_p) if (change_p) /* If we've changed the instruction then any alternative that we chose previously may no longer be valid. */ - lra_set_used_insn_alternative (curr_insn, -1); + lra_set_used_insn_alternative (curr_insn, LRA_UNKNOWN_ALT); if (! check_only_p && curr_insn_set != NULL_RTX && check_and_process_move (&change_p, &sec_mem_p)) @@ -3846,7 +3852,7 @@ curr_insn_transform (bool check_only_p) try_swapped: - reused_alternative_num = check_only_p ? -1 : curr_id->used_insn_alternative; + reused_alternative_num = check_only_p ? LRA_UNKNOWN_ALT : curr_id->used_insn_alternative; if (lra_dump_file != NULL && reused_alternative_num >= 0) fprintf (lra_dump_file, "Reusing alternative %d for insn #%u\n", reused_alternative_num, INSN_UID (curr_insn)); @@ -6752,7 +6758,7 @@ remove_inheritance_pseudos (bitmap remove_pseudos) } lra_push_insn_and_update_insn_regno_info (curr_insn); lra_set_used_insn_alternative_by_uid - (INSN_UID (curr_insn), -1); + (INSN_UID (curr_insn), LRA_UNKNOWN_ALT); done_p = true; if (lra_dump_file != NULL) { @@ -6791,7 +6797,7 @@ remove_inheritance_pseudos (bitmap remove_pseudos) constraints pass. */ lra_push_insn_and_update_insn_regno_info (curr_insn); lra_set_used_insn_alternative_by_uid - (INSN_UID (curr_insn), -1); + (INSN_UID (curr_insn), LRA_UNKNOWN_ALT); } else if (restored_regs_p) /* The instruction has been restored to the form that -- cgit v1.2.1