From c07a0a226b6904995d785662bab74c2c68481539 Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Fri, 22 Mar 2019 16:59:21 +0000 Subject: re PR rtl-optimization/89676 (Redundant moves for long long shift on 32bit x86) 2019-03-22 Vladimir Makarov PR rtl-optimization/89676 * lra-constraints.c (curr_insn_transform): Do match reload for early clobbers even if the match was successful. 2019-03-22 Vladimir Makarov PR rtl-optimization/89676 * gcc.target/i386/pr89676.c: New. From-SVN: r269878 --- gcc/lra-constraints.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'gcc/lra-constraints.c') diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index cba87eb..78932cc 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -4256,6 +4256,20 @@ curr_insn_transform (bool check_only_p) || MEM_P (SET_DEST (curr_insn_set)) || GET_CODE (SET_DEST (curr_insn_set)) == SUBREG)))) optional_p = true; + else if (goal_alt_matched[i][0] != -1 + && curr_static_id->operand[i].type == OP_OUT + && (curr_static_id->operand_alternative + [goal_alt_number * n_operands + i].earlyclobber)) + { + /* Generate reloads for output and matched inputs. This + is the easiest way to avoid creation of non-existing + conflicts in lra-lives.c. */ + match_reload (i, goal_alt_matched[i], outputs, goal_alt[i], &before, + &after, TRUE); + outputs[n_outputs++] = i; + outputs[n_outputs] = -1; + continue; + } else continue; } -- cgit v1.1