[PR99422] LRA: Don't check unknown constraint, use X for empty constraint
authorVladimir N. Makarov <vmakarov@redhat.com>
Wed, 10 Mar 2021 21:15:08 +0000 (16:15 -0500)
committerVladimir N. Makarov <vmakarov@redhat.com>
Wed, 10 Mar 2021 21:15:51 +0000 (16:15 -0500)
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.

gcc/lra-constraints.c

index 05cb493..9205826 100644 (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)))