https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106219
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target| |x86_64-*-* Component|tree-optimization |target CC| |crazylht at gmail dot com --- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- So it's __builtin_ia32_gathersiv4sf not marked as PURE which means we think it writes to memory. I see /* AVX512PF */ def_builtin (OPTION_MASK_ISA_AVX512PF, 0, "__builtin_ia32_gatherpfdpd", VOID_FTYPE_QI_V8SI_PCVOID_INT_INT, IX86_BUILTIN_GATHERPFDPD); def_builtin (OPTION_MASK_ISA_AVX512PF, 0, "__builtin_ia32_gatherpfdps", VOID_FTYPE_HI_V16SI_PCVOID_INT_INT, IX86_BUILTIN_GATHERPFDPS); def_builtin (OPTION_MASK_ISA_AVX512PF, 0, "__builtin_ia32_gatherpfqpd", VOID_FTYPE_QI_V8DI_PCVOID_INT_INT, IX86_BUILTIN_GATHERPFQPD); def_builtin (OPTION_MASK_ISA_AVX512PF, 0, "__builtin_ia32_gatherpfqps", VOID_FTYPE_QI_V8DI_PCVOID_INT_INT, IX86_BUILTIN_GATHERPFQPS); shouldn't those use def_builtin_pure as well? Tracing down why def_builtin_pure doesn't work here.