https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96791
Peter Bergner <bergner at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |meissner at gcc dot gnu.org --- Comment #18 from Peter Bergner <bergner at gcc dot gnu.org> --- (In reply to Peter Bergner from comment #14) > This looks to be an attribute target issue. When we ICE, we have: > > (gdb) p TARGET_POWER10 > $6 = true > (gdb) p TARGET_MMA > $7 = true > (gdb) p TARGET_VSX > $8 = false > (gdb) p TARGET_POWERPC64 > $9 = false So this happens in rs6000_option_override_internal(). We initially do have everything set mask rs6000_isa_flags wise, but then we hit the following which disables VSX causing our problem: /* Disable VSX and Altivec silently if the user switched cpus to power7 in a target attribute or pragma which automatically enables both options, unless the altivec ABI was set. This is set by default for 64-bit, but not for 32-bit. */ if (main_target_opt != NULL && !main_target_opt->x_rs6000_altivec_abi) { TARGET_FLOAT128_TYPE = 0; rs6000_isa_flags &= ~((OPTION_MASK_VSX | OPTION_MASK_ALTIVEC | OPTION_MASK_FLOAT128_KEYWORD) & ~rs6000_isa_flags_explicit); } So why don't we default to the Altivec ABI with -m32 on cpus that have Altivec and VSX units???