[PR99422] LRA: Don't check unknown constraint, use X for empty constraint

Using CONSTRAINT__UNKNOWN was a bad idea, although it triggered a lot
hidden bugs.  It is better to use X instead of empty constraint.

gcc/ChangeLog:

	PR target/99422
	* lra-constraints.c (process_address_1): Don't check unknown
	constraint, use X for empty constraint.
This commit is contained in:
Vladimir N. Makarov 2021-03-10 16:15:08 -05:00
parent 8f316f41ce
commit d38bbb8511

View File

@ -3459,7 +3459,7 @@ process_address_1 (int nop, bool check_only_p,
constraint
= skip_contraint_modifiers (curr_static_id->operand[dup].constraint);
}
cn = lookup_constraint (constraint);
cn = lookup_constraint (*constraint == '\0' ? "X" : constraint);
if (insn_extra_address_constraint (cn)
/* When we find an asm operand with an address constraint that
doesn't satisfy address_operand to begin with, we clear
@ -3475,9 +3475,8 @@ process_address_1 (int nop, bool check_only_p,
i.e. bcst_mem_operand in i386 backend. */
else if (MEM_P (mem)
&& !(INSN_CODE (curr_insn) < 0
&& ((cn == CONSTRAINT__UNKNOWN && *constraint != 'g')
|| (get_constraint_type (cn) == CT_FIXED_FORM
&& constraint_satisfied_p (op, cn)))))
&& get_constraint_type (cn) == CT_FIXED_FORM
&& constraint_satisfied_p (op, cn)))
decompose_mem_address (&ad, mem);
else if (GET_CODE (op) == SUBREG
&& MEM_P (SUBREG_REG (op)))