Hi!

On Sat, Mar 20, 2021 at 10:53:32AM -0400, Vladimir Makarov via Gcc-patches 
wrote:
> It seems CONSTRAINT_LEN treats constraint '\0' as one having length 1.

Maybe we should fix that?  See attached patch.


Segher


diff --git a/gcc/genpreds.c b/gcc/genpreds.c
index 8499a2a2383b..b83a030d6a5d 100644
--- a/gcc/genpreds.c
+++ b/gcc/genpreds.c
@@ -1141,6 +1141,9 @@ write_insn_constraint_len (void)
        "  switch (fc)\n"
        "    {");
 
+  /* Empty constraints have length 0.  */
+  printf ("    case 0: return 0;\n");
+
   for (i = 0; i < ARRAY_SIZE (constraints_by_letter_table); i++)
     {
       class constraint_data *c = constraints_by_letter_table[i];
@@ -1470,14 +1473,9 @@ write_tm_preds_h (void)
                            address_start, address_end);
       write_allows_reg_mem_function ();
 
-      if (constraint_max_namelen > 1)
-        {
-         write_insn_constraint_len ();
-         puts ("#define CONSTRAINT_LEN(c_,s_) "
-               "insn_constraint_len (c_,s_)\n");
-       }
-      else
-       puts ("#define CONSTRAINT_LEN(c_,s_) 1\n");
+      write_insn_constraint_len ();
+      puts ("#define CONSTRAINT_LEN(c_,s_) insn_constraint_len (c_,s_)\n");
+
       if (have_register_constraints)
        puts ("extern enum reg_class reg_class_for_constraint_1 "
              "(enum constraint_num);\n"

Reply via email to