aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir N. Makarov <vmakarov@redhat.com>2021-03-18 15:58:26 -0400
committerVladimir N. Makarov <vmakarov@redhat.com>2021-03-18 15:59:15 -0400
commita4670f58ebff805e35268542aac35f9791980954 (patch)
tree6e64b3485f422e51ff2fa34b9b6060f50f3cf3ea
parent30b10dacd0a8c926c22eab7d4aeb52ff86534acf (diff)
downloadgcc-a4670f58ebff805e35268542aac35f9791980954.zip
gcc-a4670f58ebff805e35268542aac35f9791980954.tar.gz
gcc-a4670f58ebff805e35268542aac35f9791980954.tar.bz2
[PR99422] LRA: Use lookup_constraint only for a single constraint in process_address_1.
This is an additional patch for PR99422. In process_address_1 we look only at the first constraint in the 1st alternative and ignore all other possibilities. As we don't know what alternative and constraint will be used at this stage, we can be sure only for a single constraint with one alternative and should use unknown constraint for all other cases. gcc/ChangeLog: PR target/99422 * lra-constraints.c (process_address_1): Use lookup_constraint only for a single constraint.
-rw-r--r--gcc/lra-constraints.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 9205826..64801b6 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -3459,7 +3459,12 @@ process_address_1 (int nop, bool check_only_p,
constraint
= skip_contraint_modifiers (curr_static_id->operand[dup].constraint);
}
- cn = lookup_constraint (*constraint == '\0' ? "X" : constraint);
+ if (*skip_contraint_modifiers (constraint
+ + CONSTRAINT_LEN (constraint[0],
+ constraint)) != '\0')
+ cn = CONSTRAINT__UNKNOWN;
+ else
+ 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