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:
parent
062e46a813
commit
04da747a06
2 changed files with 25 additions and 21 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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" } } */
|
Loading…
Add table
Reference in a new issue