gccint: Subst Iterators

1 
1 17.23.4 Subst Iterators
1 -----------------------
1 
1 Subst iterators are special type of iterators with the following
1 restrictions: they could not be declared explicitly, they always have
1 only two values, and they do not have explicit dedicated name.
1 Subst-iterators are triggered only when corresponding subst-attribute is
1 used in RTL-pattern.
1 
1  Subst iterators transform templates in the following way: the templates
1 are duplicated, the subst-attributes in these templates are replaced
1 with the corresponding values, and a new attribute is implicitly added
1 to the given 'define_insn'/'define_expand'.  The name of the added
1 attribute matches the name of 'define_subst'.  Such attributes are
1 declared implicitly, and it is not allowed to have a 'define_attr' named
1 as a 'define_subst'.
1 
1  Each subst iterator is linked to a 'define_subst'.  It is declared
1 implicitly by the first appearance of the corresponding
1 'define_subst_attr', and it is not allowed to define it explicitly.
1 
1  Declarations of subst-attributes have the following syntax:
1 
1      (define_subst_attr "NAME"
1        "SUBST-NAME"
1        "NO-SUBST-VALUE"
1        "SUBST-APPLIED-VALUE")
1 
1  NAME is a string with which the given subst-attribute could be referred
1 to.
1 
1  SUBST-NAME shows which 'define_subst' should be applied to an
1 RTL-template if the given subst-attribute is present in the
1 RTL-template.
1 
1  NO-SUBST-VALUE is a value with which subst-attribute would be replaced
1 in the first copy of the original RTL-template.
1 
1  SUBST-APPLIED-VALUE is a value with which subst-attribute would be
1 replaced in the second copy of the original RTL-template.
1