Moved from https://reviews.llvm.org/D126302 The current behaviour with these three options is quite undesirable: -mno-altivec -mvsx allows VSX to override no Altivec, thereby turning on both -msoft-float -maltivec causes a crash if an actual Altivec instruction is required because soft float turns of Altivec -msoft-float -mvsx is also accepted with both Altivec and VSX turned off (potentially causing crashes as above) This patch diagnoses these impossible combinations in the driver so the user does not end up with surprises in terms of their options being ignored or silently overridden. Fixes https://github.com/llvm/llvm-project/issues/55556 --------- Co-authored-by: Nemanja Ivanovic <nemanja.i.ibm@gmail.com>
132 lines
5.8 KiB
C++
132 lines
5.8 KiB
C++
// REQUIRES: powerpc-registered-target
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power8 -std=c++11 %s 2>&1 | FileCheck %s \
|
|
// RUN: -check-prefix=CHECK-DEFAULT
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power8 -std=c++11 -mno-vsx -mpower8-vector %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NVSX-P8V
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power8 -std=c++11 -mno-vsx -mdirect-move %s 2>&1 | FileCheck %s \
|
|
// RUN: -check-prefix=CHECK-NVSX-DMV
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power8 -std=c++11 -mno-vsx -mpower8-vector -mvsx %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-DEFAULT
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power8 -std=c++11 -mno-vsx -mdirect-move -mvsx %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-DEFAULT
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power8 -std=c++11 -mpower8-vector -mno-vsx %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NVSX-P8V
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power8 -std=c++11 -mdirect-move -mno-vsx %s 2>&1 | FileCheck %s \
|
|
// RUN: -check-prefix=CHECK-NVSX-DMV
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power8 -std=c++11 -mno-vsx %s 2>&1 | FileCheck %s \
|
|
// RUN: -check-prefix=CHECK-NVSX
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power6 -std=c++11 %s 2>&1 | FileCheck %s -check-prefix=CHECK-NVSX
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power6 -std=c++11 -mpower8-vector %s 2>&1 | FileCheck %s \
|
|
// RUN: -check-prefix=CHECK-DEFAULT
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power6 -std=c++11 -mdirect-move %s 2>&1 | FileCheck %s \
|
|
// RUN: -check-prefix=CHECK-VSX
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power9 -std=c++11 %s 2>&1 | FileCheck %s \
|
|
// RUN: -check-prefix=CHECK-DEFAULT-P9
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power9 -std=c++11 -mno-vsx -mpower9-vector %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NVSX-P9V
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power9 -std=c++11 -mno-vsx -mfloat128 %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NVSX-FLT128
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power10 -std=c++11 -mno-vsx -mpaired-vector-memops %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NVSX-PAIRED-VEC-MEMOPS
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power10 -std=c++11 -mno-vsx -mmma %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NVSX-MMA
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=future -std=c++11 -mno-vsx -mmma %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NVSX-MMA
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power9 -std=c++11 -mno-vsx -mfloat128 -mpower9-vector %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NVSX-MULTI
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power10 -std=c++11 %s 2>&1 | FileCheck %s \
|
|
// RUN: -check-prefix=CHECK-DEFAULT-P10
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -mcpu=power10 -std=c++11 -mno-vsx -mpower10-vector %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NVSX-P10V
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -std=c++11 -mvsx -mno-altivec %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-NALTI-VSX
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -std=c++11 -msoft-float -maltivec %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-ALTI
|
|
|
|
// RUN: not %clang -target powerpc64le-unknown-unknown -fsyntax-only \
|
|
// RUN: -std=c++11 -msoft-float -mvsx %s 2>&1 | \
|
|
// RUN: FileCheck %s -check-prefix=CHECK-SOFTFLT-VSX
|
|
|
|
#ifdef __VSX__
|
|
static_assert(false, "VSX enabled");
|
|
#endif
|
|
|
|
#ifdef __POWER8_VECTOR__
|
|
static_assert(false, "P8V enabled");
|
|
#endif
|
|
|
|
#ifdef __POWER9_VECTOR__
|
|
static_assert(false, "P9V enabled");
|
|
#endif
|
|
|
|
#ifdef __POWER10_VECTOR__
|
|
static_assert(false, "P10V enabled");
|
|
#endif
|
|
|
|
#if !defined(__VSX__) && !defined(__POWER8_VECTOR__) && \
|
|
!defined(__POWER9_VECTOR__)
|
|
static_assert(false, "Neither enabled");
|
|
#endif
|
|
|
|
// CHECK-DEFAULT: VSX enabled
|
|
// CHECK-DEFAULT: P8V enabled
|
|
// CHECK-DEFAULT-P9: P9V enabled
|
|
// CHECK-DEFAULT-P10: P10V enabled
|
|
// CHECK-NVSX-P8V: error: option '-mpower8-vector' cannot be specified with '-mno-vsx'
|
|
// CHECK-NVSX-P9V: error: option '-mpower9-vector' cannot be specified with '-mno-vsx'
|
|
// CHECK-NVSX-P10V: error: option '-mpower10-vector' cannot be specified with '-mno-vsx'
|
|
// CHECK-NVSX-FLT128: error: option '-mfloat128' cannot be specified with '-mno-vsx'
|
|
// CHECK-NVSX-DMV: error: option '-mdirect-move' cannot be specified with '-mno-vsx'
|
|
// CHECK-NVSX-PAIRED-VEC-MEMOPS: error: option '-mpaired-vector-memops' cannot be specified with '-mno-vsx'
|
|
// CHECK-NVSX-MULTI: error: option '-mfloat128' cannot be specified with '-mno-vsx'
|
|
// CHECK-NVSX-MULTI: error: option '-mpower9-vector' cannot be specified with '-mno-vsx'
|
|
// CHECK-NVSX-MMA: error: option '-mmma' cannot be specified with '-mno-vsx'
|
|
// CHECK-NVSX: Neither enabled
|
|
// CHECK-VSX: VSX enabled
|
|
// CHECK-NALTI-VSX: error: option '-mvsx' cannot be specified with '-mno-altivec'
|
|
// CHECK-SOFTFLT-ALTI: error: option '-msoft-float' cannot be specified with '-maltivec'
|
|
// CHECK-SOFTFLT-VSX: error: option '-msoft-float' cannot be specified with '-mvsx'
|