This change adds a method to modify the ConversionTarget used during
transform.apply_conversion_patterns to the
ConversionPatternDescriptorOpInterface. This is needed when the TypeConverter
is used to dictate the dynamic legality of operations, as in "structural"
conversion patterns present in, for example, the SCF and func dialects.
As a first use case/test, this change also adds a
transform.apply_patterns.scf.structural_conversions operation to the SCF
dialect.
I'd mention structural type conversions as an example use case here. Mention that type converters are set up such that legal types are converted to themselves and an op is considered illegal (a property of the conversion target) if one of its result/operand types maps to a type different from itself. (To clarify the connection between the conversion target and the type converter; at first glance they seem unrelated.)