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???

Reply via email to