https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80867
--- Comment #9 from kelvin at gcc dot gnu.org --- I've been investigating this and have identified the origin of the problem. The ICE occurs because tree-vect-stmts.c: vectorizable_call () is calling targetm.vectorize.builtin_md_vectorized_function (callee, vectype_out, vectype_in) with a NULL value for callee. I can "fix" the Power backend by checking for callee == NULL and returning NULL_TREE from rs6000_builtin_md_vectorized_function. But I'm wondering if the generic code should be fixed instead. I don't fully understand the implementation of vectorizable_call (). I suspect it is getting confused because we are invoking the "vectorizable call" through a pointer to a function. In general, I don't think we can vectorize that. On the other hand, if the function is in-lined (as it is in this case), then it may be possible to find the definition of the function pointer, in which case it should be possible to vectorize the call. Here's the offending source code: function Value (Map : Character_Mapping; Element : Character) return Character is begin return Map (Element); end Value; Bottom line: I'm wondering if the "better" fix to this problem is to adjust the generic implementation of vectorizable_call rather than requiring each target to independently check for callee equal to NULL. The changes would be to: 1. Not call targetm.vectorize.builtin_md_vectorized_function if callee equals NULL. 2. Give more "sophisticated" handling to calls through function pointers, identifying the callee if it is possible to find the definition of the function pointer.