On Sep 10, 2013, at 3:43 PM, Joseph S. Myers <jos...@codesourcery.com> wrote: > For target-specific types with more fine-grained > restrictions on permitted operations, there are several target hooks such > as invalid_unary_op, invalid_binary_op and invalid_parameter_type. That's > how the errors should be given, so that the invalid GIMPLE is never > generated.
Ah… yes, that does the trick, however, the disconnect between rtl and gimple is annoying. gimply (or rtl) is free to decompose operations, for example, xor can be decomposed into n independent xors of the parts of a larger piece of data, and if it does that, then the port should not give an error, and if gimple is does not do this, then the port should, but, the port can't know to do this or not, and to retain the flexibility to allow gimple lowering to improve over time. As a concrete example, xor, or, gt, ge, lt, le lower on plain integer modes; but eq and ne don't. Odd that. I'd claim it is a mere implementation detail of lowering and requiring port work for an internal implementation detail is odd. But, with the interfaces you mentioned I can solve the problem… I'll plan on doing it that way, not ideal, but reasonable. Thanks for the help.