llvm-capstone/clang/test/Frontend/mfpmath.c
Rafael Espindola eb26547177 Move -mfpmath handling to -cc1 and implement it for x86.
The original idea was to implement it all on the driver, but to do that the
driver needs to know the sse level and to do that it has to know the default
features of a cpu.

Benjamin Kramer pointed out that if one day we decide to implement support for
' __attribute__ ((__target__ ("arch=core2")))', then the frontend needs to
keep its knowledge of default features of a cpu.

To avoid duplicating which part of clang handles default cpu features,
it is probably better to handle -mfpmath in the frontend.

For ARM this patch is just a small improvement. Instead of a cpu list, we
check if neon is enabled, which allows us to reject things like

-mcpu=cortex-a9 -mfpu=vfp -mfpmath=neon

For X86, since LLVM doesn't support an independent ssefp feature, we just
make sure the selected -mfpmath matches the sse level.

llvm-svn: 188939
2013-08-21 21:59:03 +00:00

44 lines
1.8 KiB
C

// RUN: %clang_cc1 -triple i686-pc-linux -target-feature -sse %s
// RUN: %clang_cc1 -triple i686-pc-linux -target-feature -sse -mfpmath 387 %s
// RUN: %clang_cc1 -triple i686-pc-linux -target-feature +sse %s
// RUN: %clang_cc1 -triple i686-pc-linux -target-feature +sse -mfpmath sse %s
// RUN: not %clang_cc1 -triple i686-pc-linux -target-feature +sse \
// RUN: -mfpmath xyz %s 2>&1 | FileCheck --check-prefix=CHECK-XYZ %s
// CHECK-XYZ: error: unknown FP unit 'xyz'
// RUN: not %clang_cc1 -triple i686-pc-linux -target-feature +sse \
// RUN: -mfpmath 387 %s 2>&1 | FileCheck --check-prefix=CHECK-NO-387 %s
// CHECK-NO-387: error: the '387' unit is not supported with this instruction set
// RUN: not %clang_cc1 -triple i686-pc-linux -target-feature -sse \
// RUN: -mfpmath sse %s 2>&1 | FileCheck --check-prefix=CHECK-NO-SSE %s
// CHECK-NO-SSE: error: the 'sse' unit is not supported with this instruction set
// RUN: %clang_cc1 -triple arm-apple-darwin10 -mfpmath vfp %s
// RUN: %clang_cc1 -triple arm-apple-darwin10 -mfpmath vfp2 %s
// RUN: %clang_cc1 -triple arm-apple-darwin10 -mfpmath vfp3 %s
// RUN: %clang_cc1 -triple arm-apple-darwin10 -mfpmath vfp4 %s
// RUN: %clang_cc1 -triple arm-apple-darwin10 -target-cpu cortex-a9 \
// RUN: -mfpmath neon %s
// RUN: not %clang_cc1 -triple arm-apple-darwin10 -mfpmath foo %s 2>&1 \
// RUN: FileCheck --check-prefix=CHECK-FOO %s
// CHECK-FOO: unknown FP unit 'foo'
// RUN: not %clang_cc1 -triple arm-apple-darwin10 -target-cpu arm1136j-s \
// RUN: -mfpmath neon %s 2>&1 | FileCheck --check-prefix=CHECK-NO-NEON %s
// RUN: not %clang_cc1 -triple arm-apple-darwin10 -target-cpu cortex-a9 \
// RUN: -target-feature -neon -mfpmath neon %s 2>&1 | FileCheck --check-prefix=CHECK-NO-NEON %s
// CHECK-NO-NEON: error: the 'neon' unit is not supported with this instruction set