https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101849
--- Comment #2 from Peter Bergner <bergner at gcc dot gnu.org> --- So it seems when we go to expand the gimple builtin, the cast of the pointer is already stripped away: (gdb) ps gsi_stmt(*gsi) _1 = __builtin_vsx_lxvp (0, x); We will only will get as far as expanding the builtin if there is a cast of the double *x pointer to a __vector_pair * pointer, so the simple fix seems to be just to look for a non __vector_pair pointer and cast it during the expansion to the correct __vector_pair * pointer. Doing that fixes the ICE for me. I'll kick off a round of testing.