error message for unsupported intrinsic?

Do we have some mechanism for reporting nice errors messages about processor-specific intrinsics that are not supported for the current target?

I'm trying to set up a comprehensive test for all the Neon intrinsics in Clang. I discovered that a few of them (vcvt_f32_f16 and vcvt_f16_f32) are only supported on ARM processors with the half-precision floating-point extension (e.g., Cortex-A9), so I added support for those operations in the ARM backend. But, when I re-ran the test, I left the -mcpu option set to "cortex-a8" and got this cryptic message:

fatal error: error in backend: Cannot yet select: intrinsic

It would be better to have an error message from the front-end when an unsupported builtin is used. The back-end can't give a very helpful error message because the internal LLVM intrinsic name is not necessarily meaningful to the user. I'm hoping there is already a mechanism in place for checking that.

It turns out that there is! Check out the !srcloc mechanism that we slap on inline asm calls. It would make a lot of sense to do the same for builtins when expanding to intrinsics. Then if we get a selection failure, the backend can pass the sourceloc back through to the fatal error handling stuff (just like inline asm errors) and get a caret pointing to the builtin.

This would be a really great improvement for these kinds of problems.


I recently added language specific intrinsics support to clang. You need to add something similar for
processor specific intrinsics. See Builtins.def and related files for detail.

- Fariborz