Author: David Majnemer Date: 2022-08-22T18:32:58Z New Revision: 3d89323d1896fde5dc69ecb8306917718c5e3aed
URL: https://github.com/llvm/llvm-project/commit/3d89323d1896fde5dc69ecb8306917718c5e3aed DIFF: https://github.com/llvm/llvm-project/commit/3d89323d1896fde5dc69ecb8306917718c5e3aed.diff LOG: [clang-cl] Increase /fp flag fidelity They were mapped as follows: - /fp:except to --ftrapping-math - /fp:except- to --fno-trapping-math - /fp:strict to --fno-fast-math - /fp:precise to --fno-fast-math Let's map them as follows: - /fp:except to --ffp-exception-behavior=strict - /fp:except- to --ffp-exception-behavior=ignore - /fp:strict to --ffp-model=strict - /fp:precise to --ffp-model=ignore I believe the changes to /fp:except are technically a no-op but it makes the mapping a lot clearer. The changes for /fp:strict and /fp:precise are not no-ops, they now match MSVC's behavior. While we are here, also add support for /fp:contract by mapping it to -ffp-contract=on. Added: Modified: clang/include/clang/Driver/Options.td clang/test/Driver/cl-options.c Removed: ################################################################################ diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 1939312ffd685..aadd516cf6209 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -6447,13 +6447,12 @@ def _SLASH_E : CLFlag<"E">, HelpText<"Preprocess to stdout">, Alias<E>; def _SLASH_external_COLON_I : CLJoinedOrSeparate<"external:I">, Alias<isystem>, HelpText<"Add directory to include search path with warnings suppressed">, MetaVarName<"<dir>">; -def _SLASH_fp_except : CLFlag<"fp:except">, HelpText<"">, Alias<ftrapping_math>; -def _SLASH_fp_except_ : CLFlag<"fp:except-">, - HelpText<"">, Alias<fno_trapping_math>; +def _SLASH_fp_contract : CLFlag<"fp:contract">, HelpText<"">, Alias<ffp_contract>, AliasArgs<["on"]>; +def _SLASH_fp_except : CLFlag<"fp:except">, HelpText<"">, Alias<ffp_exception_behavior_EQ>, AliasArgs<["strict"]>; +def _SLASH_fp_except_ : CLFlag<"fp:except-">, HelpText<"">, Alias<ffp_exception_behavior_EQ>, AliasArgs<["ignore"]>; def _SLASH_fp_fast : CLFlag<"fp:fast">, HelpText<"">, Alias<ffast_math>; -def _SLASH_fp_precise : CLFlag<"fp:precise">, - HelpText<"">, Alias<fno_fast_math>; -def _SLASH_fp_strict : CLFlag<"fp:strict">, HelpText<"">, Alias<fno_fast_math>; +def _SLASH_fp_precise : CLFlag<"fp:precise">, HelpText<"">, Alias<ffp_model_EQ>, AliasArgs<["precise"]>; +def _SLASH_fp_strict : CLFlag<"fp:strict">, HelpText<"">, Alias<ffp_model_EQ>, AliasArgs<["strict"]>; def _SLASH_fsanitize_EQ_address : CLFlag<"fsanitize=address">, HelpText<"Enable AddressSanitizer">, Alias<fsanitize_EQ>, AliasArgs<["address"]>; diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c index a2e350a0a8355..35caf2722c5f9 100644 --- a/clang/test/Driver/cl-options.c +++ b/clang/test/Driver/cl-options.c @@ -44,9 +44,11 @@ // RUN: %clang_cl /fp:fast /fp:except -### -- %s 2>&1 | FileCheck -check-prefix=fpexcept %s // fpexcept-NOT: -menable-unsafe-fp-math +// fpexcept: -ffp-exception-behavior=strict // RUN: %clang_cl /fp:fast /fp:except /fp:except- -### -- %s 2>&1 | FileCheck -check-prefix=fpexcept_ %s // fpexcept_: -menable-unsafe-fp-math +// fpexcept_: -ffp-exception-behavior=ignore // RUN: %clang_cl /fp:precise /fp:fast -### -- %s 2>&1 | FileCheck -check-prefix=fpfast %s // fpfast: -menable-unsafe-fp-math @@ -59,6 +61,10 @@ // RUN: %clang_cl /fp:fast /fp:strict -### -- %s 2>&1 | FileCheck -check-prefix=fpstrict %s // fpstrict-NOT: -menable-unsafe-fp-math // fpstrict-NOT: -ffast-math +// fpstrict: -ffp-contract=off + +// RUN: %clang_cl /fp:strict /fp:contract -### -- %s 2>&1 | FileCheck -check-prefix=fpcontract %s +// fpcontract: -ffp-contract=on // RUN: %clang_cl /fsanitize=address -### -- %s 2>&1 | FileCheck -check-prefix=fsanitize_address %s // fsanitize_address: -fsanitize=address _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits