rs6000: Escalate warning to error for VSX with explicit no-altivec etc.

As the discussion in PR115688, for now when users specify
-mvsx and -mno-altivec explicitly, compiler emits warning
rather than error, but considering both options are given
explicitly, emitting hard error should be better.

So this patch is to escalate some related warning to error
when both are incompatible.

	PR target/115713

gcc/ChangeLog:

	* config/rs6000/rs6000.cc (rs6000_option_override_internal): Emit error
	messages when explicit VSX encounters explicit soft-float, no-altivec
	or avoid-indexed-addresses.

gcc/testsuite/ChangeLog:

	* gcc.target/powerpc/warn-1.c: Move to ...
	* gcc.target/powerpc/error-1.c: ... here.  Adjust dg-warning with
	dg-error and remove ineffective scan.
This commit is contained in:
Kewen Lin 2024-07-23 00:47:49 -05:00 committed by Kewen Lin
parent 062e46a813
commit 04da747a06
2 changed files with 25 additions and 21 deletions

View file

@ -3830,32 +3830,37 @@ rs6000_option_override_internal (bool global_init_p)
/* Add some warnings for VSX. */
if (TARGET_VSX)
{
const char *msg = NULL;
bool explicit_vsx_p = rs6000_isa_flags_explicit & OPTION_MASK_VSX;
if (!TARGET_HARD_FLOAT)
{
if (rs6000_isa_flags_explicit & OPTION_MASK_VSX)
msg = N_("%<-mvsx%> requires hardware floating point");
else
if (explicit_vsx_p)
{
rs6000_isa_flags &= ~ OPTION_MASK_VSX;
rs6000_isa_flags_explicit |= OPTION_MASK_VSX;
if (rs6000_isa_flags_explicit & OPTION_MASK_SOFT_FLOAT)
error ("%<-mvsx%> and %<-msoft-float%> are incompatible");
else
warning (0, N_("%<-mvsx%> requires hardware floating-point"));
}
rs6000_isa_flags &= ~OPTION_MASK_VSX;
rs6000_isa_flags_explicit |= OPTION_MASK_VSX;
}
else if (TARGET_AVOID_XFORM > 0)
msg = N_("%<-mvsx%> needs indexed addressing");
else if (!TARGET_ALTIVEC && (rs6000_isa_flags_explicit
& OPTION_MASK_ALTIVEC))
{
if (rs6000_isa_flags_explicit & OPTION_MASK_VSX)
msg = N_("%<-mvsx%> and %<-mno-altivec%> are incompatible");
else
msg = N_("%<-mno-altivec%> disables vsx");
}
if (msg)
{
warning (0, msg);
rs6000_isa_flags &= ~ OPTION_MASK_VSX;
if (explicit_vsx_p && OPTION_SET_P (TARGET_AVOID_XFORM))
error ("%<-mvsx%> and %<-mavoid-indexed-addresses%>"
" are incompatible");
else
warning (0, N_("%<-mvsx%> needs indexed addressing"));
rs6000_isa_flags &= ~OPTION_MASK_VSX;
rs6000_isa_flags_explicit |= OPTION_MASK_VSX;
}
else if (!TARGET_ALTIVEC
&& (rs6000_isa_flags_explicit & OPTION_MASK_ALTIVEC))
{
if (explicit_vsx_p)
error ("%<-mvsx%> and %<-mno-altivec%> are incompatible");
else
warning (0, N_("%<-mno-altivec%> disables vsx"));
rs6000_isa_flags &= ~OPTION_MASK_VSX;
rs6000_isa_flags_explicit |= OPTION_MASK_VSX;
}
}

View file

@ -3,7 +3,7 @@
/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-O -mvsx -mno-altivec" } */
/* { dg-warning "'-mvsx' and '-mno-altivec' are incompatible" "" { target *-*-* } 0 } */
/* { dg-error "'-mvsx' and '-mno-altivec' are incompatible" "" { target *-*-* } 0 } */
double
foo (double *x, double *y)
@ -16,4 +16,3 @@ foo (double *x, double *y)
return z[0] * z[1];
}
/* { dg-final { scan-assembler-not "xsadddp" } } */