[FPEnv] Enable strict fp for AArch64 in clang
The AArch64 target now has the necessary support for strict fp, so enable it in clang. Differential Revision: https://reviews.llvm.org/D138143
This commit is contained in:
parent
f77403be27
commit
9e3264ab20
|
@ -765,6 +765,9 @@ Arm and AArch64 Support in Clang
|
||||||
* Arm Cortex-A715 (cortex-a715).
|
* Arm Cortex-A715 (cortex-a715).
|
||||||
* Arm Cortex-X3 (cortex-x3).
|
* Arm Cortex-X3 (cortex-x3).
|
||||||
* Arm Neoverse V2 (neoverse-v2)
|
* Arm Neoverse V2 (neoverse-v2)
|
||||||
|
- Strict floating point has been enabled for AArch64, which means that
|
||||||
|
``-ftrapping-math``, ``-frounding-math``, ``-ffp-model=strict``, and
|
||||||
|
``-ffp-exception-behaviour=<arg>`` are now accepted.
|
||||||
|
|
||||||
Floating Point Support in Clang
|
Floating Point Support in Clang
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
|
@ -84,6 +84,7 @@ AArch64TargetInfo::AArch64TargetInfo(const llvm::Triple &Triple,
|
||||||
HasLegalHalfType = true;
|
HasLegalHalfType = true;
|
||||||
HalfArgsAndReturns = true;
|
HalfArgsAndReturns = true;
|
||||||
HasFloat16 = true;
|
HasFloat16 = true;
|
||||||
|
HasStrictFP = true;
|
||||||
|
|
||||||
if (Triple.isArch64Bit())
|
if (Triple.isArch64Bit())
|
||||||
LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
|
LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
// RUN: | FileCheck --check-prefixes=COMMON,COMMONIR,UNCONSTRAINED %s
|
// RUN: | FileCheck --check-prefixes=COMMON,COMMONIR,UNCONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
|
||||||
// RUN: -S -disable-O0-optnone \
|
// RUN: -S -disable-O0-optnone \
|
||||||
// RUN: -ffp-exception-behavior=strict -fexperimental-strict-floating-point \
|
// RUN: -ffp-exception-behavior=strict \
|
||||||
// RUN: -flax-vector-conversions=none -emit-llvm -o - %s | opt -S -passes=mem2reg \
|
// RUN: -flax-vector-conversions=none -emit-llvm -o - %s | opt -S -passes=mem2reg \
|
||||||
// RUN: | FileCheck --check-prefixes=COMMON,COMMONIR,CONSTRAINED %s
|
// RUN: | FileCheck --check-prefixes=COMMON,COMMONIR,CONSTRAINED %s
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
// RUN: | opt -S -passes=mem2reg | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s
|
// RUN: | opt -S -passes=mem2reg | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
|
||||||
// RUN: -ffp-exception-behavior=strict \
|
// RUN: -ffp-exception-behavior=strict \
|
||||||
// RUN: -fexperimental-strict-floating-point \
|
|
||||||
// RUN: -disable-O0-optnone -emit-llvm -o - %s \
|
// RUN: -disable-O0-optnone -emit-llvm -o - %s \
|
||||||
// RUN: | opt -S -passes=mem2reg | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s
|
// RUN: | opt -S -passes=mem2reg | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
|
||||||
|
@ -11,7 +10,6 @@
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon \
|
||||||
// RUN: -ffp-exception-behavior=strict \
|
// RUN: -ffp-exception-behavior=strict \
|
||||||
// RUN: -fexperimental-strict-floating-point \
|
|
||||||
// RUN: -disable-O0-optnone -S -o - %s \
|
// RUN: -disable-O0-optnone -S -o - %s \
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-cpu cyclone \
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-cpu cyclone \
|
||||||
// RUN: -ffp-exception-behavior=strict \
|
// RUN: -ffp-exception-behavior=strict \
|
||||||
// RUN: -fexperimental-strict-floating-point \
|
|
||||||
// RUN: -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg \
|
// RUN: -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg \
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-cpu cyclone \
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-cpu cyclone \
|
||||||
|
@ -11,7 +10,6 @@
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-cpu cyclone \
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-cpu cyclone \
|
||||||
// RUN: -ffp-exception-behavior=strict \
|
// RUN: -ffp-exception-behavior=strict \
|
||||||
// RUN: -fexperimental-strict-floating-point \
|
|
||||||
// RUN: -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | llc -o=- - \
|
// RUN: -disable-O0-optnone -emit-llvm -o - %s | opt -S -passes=mem2reg | llc -o=- - \
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// RUN: %clang_cc1 %s -emit-llvm -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -o - -triple arm64-none-linux-gnu | FileCheck %s
|
// RUN: %clang_cc1 %s -emit-llvm -ffp-exception-behavior=maytrap -o - -triple arm64-none-linux-gnu | FileCheck %s
|
||||||
|
|
||||||
// Test that the constrained intrinsics are picking up the exception
|
// Test that the constrained intrinsics are picking up the exception
|
||||||
// metadata from the AST instead of the global default from the command line.
|
// metadata from the AST instead of the global default from the command line.
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
// RUN: | FileCheck --check-prefixes=COMMON,COMMONIR,UNCONSTRAINED %s
|
// RUN: | FileCheck --check-prefixes=COMMON,COMMONIR,UNCONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +fullfp16 \
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +fullfp16 \
|
||||||
// RUN: -S -disable-O0-optnone \
|
// RUN: -S -disable-O0-optnone \
|
||||||
// RUN: -ffp-exception-behavior=strict -fexperimental-strict-floating-point -emit-llvm -o - %s | opt -S -passes=mem2reg \
|
// RUN: -ffp-exception-behavior=strict -emit-llvm -o - %s | opt -S -passes=mem2reg \
|
||||||
// RUN: | FileCheck --check-prefixes=COMMON,COMMONIR,CONSTRAINED %s
|
// RUN: | FileCheck --check-prefixes=COMMON,COMMONIR,CONSTRAINED %s
|
||||||
|
|
||||||
// REQUIRES: aarch64-registered-target
|
// REQUIRES: aarch64-registered-target
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=UNCONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-feature +fullfp16 -target-feature +v8.2a\
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-feature +fullfp16 -target-feature +v8.2a\
|
||||||
// RUN: -ffp-exception-behavior=maytrap -DEXCEPT=1 \
|
// RUN: -ffp-exception-behavior=maytrap -DEXCEPT=1 \
|
||||||
// RUN: -fexperimental-strict-floating-point \
|
|
||||||
// RUN: -flax-vector-conversions=none -S -disable-O0-optnone -emit-llvm -o - %s \
|
// RUN: -flax-vector-conversions=none -S -disable-O0-optnone -emit-llvm -o - %s \
|
||||||
// RUN: | opt -S -passes=mem2reg \
|
// RUN: | opt -S -passes=mem2reg \
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=COMMONIR --check-prefix=CONSTRAINED %s
|
||||||
|
@ -14,7 +13,6 @@
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
||||||
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-feature +fullfp16 -target-feature +v8.2a\
|
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-feature +fullfp16 -target-feature +v8.2a\
|
||||||
// RUN: -ffp-exception-behavior=maytrap -DEXCEPT=1 \
|
// RUN: -ffp-exception-behavior=maytrap -DEXCEPT=1 \
|
||||||
// RUN: -fexperimental-strict-floating-point \
|
|
||||||
// RUN: -flax-vector-conversions=none -S -disable-O0-optnone -emit-llvm -o - %s \
|
// RUN: -flax-vector-conversions=none -S -disable-O0-optnone -emit-llvm -o - %s \
|
||||||
// RUN: | opt -S -passes=mem2reg | llc -o=- - \
|
// RUN: | opt -S -passes=mem2reg | llc -o=- - \
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
// RUN: opt -S -passes=mem2reg | FileCheck -check-prefixes=COMMON,COMMONIR,CONSTRAINED %s
|
// RUN: opt -S -passes=mem2reg | FileCheck -check-prefixes=COMMON,COMMONIR,CONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-linux-gnueabihf -target-feature +neon \
|
// RUN: %clang_cc1 -triple arm64-linux-gnueabihf -target-feature +neon \
|
||||||
// RUN: -ffp-exception-behavior=strict \
|
// RUN: -ffp-exception-behavior=strict \
|
||||||
// RUN: -fexperimental-strict-floating-point \
|
|
||||||
// RUN: -ffreestanding -disable-O0-optnone -emit-llvm %s -o - | \
|
// RUN: -ffreestanding -disable-O0-optnone -emit-llvm %s -o - | \
|
||||||
// RUN: opt -S -passes=mem2reg | FileCheck -check-prefixes=COMMON,COMMONIR,CONSTRAINED %s
|
// RUN: opt -S -passes=mem2reg | FileCheck -check-prefixes=COMMON,COMMONIR,CONSTRAINED %s
|
||||||
|
|
||||||
|
@ -30,7 +29,6 @@
|
||||||
// RUN: opt -S -passes=mem2reg | llc -o=- - | FileCheck -check-prefixes=COMMON,CHECK-ASM32 %s
|
// RUN: opt -S -passes=mem2reg | llc -o=- - | FileCheck -check-prefixes=COMMON,CHECK-ASM32 %s
|
||||||
// RUN: %clang_cc1 -triple arm64-linux-gnueabihf -target-feature +neon \
|
// RUN: %clang_cc1 -triple arm64-linux-gnueabihf -target-feature +neon \
|
||||||
// RUN: -ffp-exception-behavior=strict \
|
// RUN: -ffp-exception-behavior=strict \
|
||||||
// RUN: -fexperimental-strict-floating-point \
|
|
||||||
// RUN: -ffreestanding -disable-O0-optnone -emit-llvm %s -o - | \
|
// RUN: -ffreestanding -disable-O0-optnone -emit-llvm %s -o - | \
|
||||||
// RUN: opt -S -passes=mem2reg | llc -o=- - | FileCheck -check-prefixes=COMMON,CHECK-ASM64 %s
|
// RUN: opt -S -passes=mem2reg | llc -o=- - | FileCheck -check-prefixes=COMMON,CHECK-ASM64 %s
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
// RUN: %clang_cc1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -flax-vector-conversions=none -emit-llvm -o - %s \
|
// RUN: %clang_cc1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -flax-vector-conversions=none -emit-llvm -o - %s \
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=UNCONSTRAINED %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=UNCONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -flax-vector-conversions=none -fexperimental-strict-floating-point -ffp-exception-behavior=strict -emit-llvm -o - %s \
|
// RUN: %clang_cc1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -flax-vector-conversions=none -ffp-exception-behavior=strict -emit-llvm -o - %s \
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CONSTRAINED %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CONSTRAINED %s
|
||||||
// RUN: %clang_cc1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -flax-vector-conversions=none -emit-llvm -o - %s | llc -o=- - \
|
// RUN: %clang_cc1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -flax-vector-conversions=none -emit-llvm -o - %s | llc -o=- - \
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
||||||
// RUN: %clang_cc1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -flax-vector-conversions=none -fexperimental-strict-floating-point -ffp-exception-behavior=strict -emit-llvm -o - %s | llc -o=- - \
|
// RUN: %clang_cc1 -triple arm64-apple-ios7 -target-feature +neon -ffreestanding -flax-vector-conversions=none -ffp-exception-behavior=strict -emit-llvm -o - %s | llc -o=- - \
|
||||||
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
// RUN: | FileCheck --check-prefix=COMMON --check-prefix=CHECK-ASM %s
|
||||||
|
|
||||||
// REQUIRES: aarch64-registered-target
|
// REQUIRES: aarch64-registered-target
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
// REQUIRES: arm-registered-target
|
// REQUIRES: arm-registered-target
|
||||||
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -emit-llvm -o - -triple arm-none-linux-gnueabi %s | FileCheck %s --check-prefix=NOTNATIVE --check-prefix=CHECK -vv -dump-input=fail
|
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -emit-llvm -o - -triple arm-none-linux-gnueabi %s | FileCheck %s --check-prefix=NOTNATIVE --check-prefix=CHECK -vv -dump-input=fail
|
||||||
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -emit-llvm -o - -triple aarch64-none-linux-gnueabi %s | FileCheck %s --check-prefix=NOTNATIVE --check-prefix=CHECK
|
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -emit-llvm -o - -triple aarch64-none-linux-gnueabi %s | FileCheck %s --check-prefix=NOTNATIVE --check-prefix=CHECK
|
||||||
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -emit-llvm -o - -triple x86_64-linux-gnu %s | FileCheck %s --check-prefix=NOTNATIVE --check-prefix=CHECK
|
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -emit-llvm -o - -triple x86_64-linux-gnu %s | FileCheck %s --check-prefix=NOTNATIVE --check-prefix=CHECK
|
||||||
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -emit-llvm -o - -triple arm-none-linux-gnueabi -fnative-half-type %s \
|
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -emit-llvm -o - -triple arm-none-linux-gnueabi -fnative-half-type %s \
|
||||||
// RUN: | FileCheck %s --check-prefix=NATIVE-HALF --check-prefix=CHECK
|
// RUN: | FileCheck %s --check-prefix=NATIVE-HALF --check-prefix=CHECK
|
||||||
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -fexperimental-strict-floating-point -emit-llvm -o - -triple aarch64-none-linux-gnueabi -fnative-half-type %s \
|
// RUN: %clang_cc1 -ffp-exception-behavior=maytrap -emit-llvm -o - -triple aarch64-none-linux-gnueabi -fnative-half-type %s \
|
||||||
// RUN: | FileCheck %s --check-prefix=NATIVE-HALF --check-prefix=CHECK
|
// RUN: | FileCheck %s --check-prefix=NATIVE-HALF --check-prefix=CHECK
|
||||||
//
|
//
|
||||||
// Test that the constrained intrinsics are picking up the exception
|
// Test that the constrained intrinsics are picking up the exception
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
// RUN: %clang_cc1 -triple wasm32 -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
// RUN: %clang_cc1 -triple wasm32 -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
||||||
// RUN: %clang_cc1 -triple thumbv7 -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
// RUN: %clang_cc1 -triple thumbv7 -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
||||||
// RUN: %clang_cc1 -triple aarch64 -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
// RUN: %clang_cc1 -DEXPOK -triple aarch64 -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
||||||
// RUN: %clang_cc1 -DEXPOK -triple x86_64 -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
// RUN: %clang_cc1 -DEXPOK -triple x86_64 -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
||||||
// RUN: %clang_cc1 -DEXPOK -triple systemz -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
// RUN: %clang_cc1 -DEXPOK -triple systemz -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
||||||
// RUN: %clang_cc1 -DEXPOK -triple powerpc -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
// RUN: %clang_cc1 -DEXPOK -triple powerpc -fsyntax-only -Wno-unknown-pragmas -Wignored-pragmas -verify %s
|
||||||
|
|
Loading…
Reference in New Issue