[gensupport] PR 91255: Do not error out immediately on set_attr_alternative with...
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Fri, 16 Aug 2019 09:32:36 +0000 (09:32 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Fri, 16 Aug 2019 09:32:36 +0000 (09:32 +0000)
I'm trying to add a define_subst use in the arm backend but am getting many build errors complaining about:
`set_attr_alternative' is unsupported by `define_subst'

Looking at the gensupport.c code it iterates over all define_insns and errors if any of them have set_attr_alternative.

The usecase I'm targetting doesn't involve patterns with set_attr_alternative, so I would like to make the define_subst handling
more robust to only error out if the define_subst is actually attempted on a set_attr_alternative.

This patch produces the error only if the set_attr_alternative attr matches the subst name.
This allows a build of the arm backend with a define_subst usage to succeed.

PR other/91255
* gensupport.c (has_subst_attribute): Error out on set_attr_alternative
only if subst_name matches curr_attr string.

From-SVN: r274564

gcc/ChangeLog
gcc/gensupport.c

index e447aabb367205d8aba97577b84945345cfd1b2b..6bd5e9b370ba8b9bf6adf15289a6475a124bee1b 100644 (file)
@@ -1,3 +1,9 @@
+2019-08-16  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       PR other/91255
+       * gensupport.c (has_subst_attribute): Error out on set_attr_alternative
+       only if subst_name matches curr_attr string.
+
 2019-08-16  Richard Biener  <rguenther@suse.de>
 
        * tree-ssa-forwprop.c (simplify_builtin_call): Do not remove
index 1aab711990184346eda51391c01b37aeb35b7d73..c64f683bc5c77aa993b201cc22db0b6fc7dedf58 100644 (file)
@@ -788,9 +788,10 @@ has_subst_attribute (class queue_elem *elem, class queue_elem *subst_elem)
          return false;
 
        case SET_ATTR_ALTERNATIVE:
-         error_at (elem->loc,
-                   "%s: `set_attr_alternative' is unsupported by "
-                   "`define_subst'", XSTR (elem->data, 0));
+         if (strcmp (XSTR (cur_attr, 0), subst_name) == 0)
+           error_at (elem->loc,
+                     "%s: `set_attr_alternative' is unsupported by "
+                     "`define_subst'", XSTR (elem->data, 0));
          return false;