diff mbox series

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

Message ID 5a060c50-e578-44f9-cab2-59ed4a46ccdb@redhat.com
State New
Headers show
Series [committed,PR99422] LRA: Don't check unknown constraint, use X for empty constraint | expand

Commit Message

Vladimir Makarov March 10, 2021, 9:20 p.m. UTC
Here is one more patch for PR99422.  The patch was successfully tested 
and bootstrapped on x86-64.
diff mbox series

Patch

commit e647130d441887657cf0e1c2c3b40ab1ca9beb47 (HEAD -> master)
Author: Vladimir N. Makarov <vmakarov@redhat.com>
Date:   Wed Mar 10 16:15:08 2021 -0500

    [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.

diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c
index 05cb493852f..9205826960c 100644
--- a/gcc/lra-constraints.c
+++ b/gcc/lra-constraints.c
@@ -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)))