This revision was landed with ongoing or failed builds. This revision was automatically updated to reflect the committed changes. xiongji90 marked an inline comment as not done. Closed by commit rGb38aa2971711: Add __builtin_set_flt_rounds (authored by xiongji90).
Changed prior to commit: https://reviews.llvm.org/D145765?vs=504957&id=505353#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D145765/new/ https://reviews.llvm.org/D145765 Files: clang/docs/ReleaseNotes.rst clang/include/clang/Basic/Builtins.def clang/lib/CodeGen/CGBuiltin.cpp clang/lib/Sema/SemaChecking.cpp clang/test/CodeGen/builtin_set_flt_rounds.c clang/test/Sema/builtin_set_flt_rounds.c Index: clang/test/Sema/builtin_set_flt_rounds.c =================================================================== --- /dev/null +++ clang/test/Sema/builtin_set_flt_rounds.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple mipsel-unknown-linux -fsyntax-only %s -verify=expected,unsupported +// RUN: %clang_cc1 -triple x86_64-gnu-linux -fsyntax-only %s -verify +struct S {int a;}; +void test_builtin_set_flt_rounds() { + __builtin_set_flt_rounds(1); // unsupported-error {{builtin is not supported on this target}} + struct S s; + __builtin_set_flt_rounds(s); // expected-error {{passing 'struct S' to parameter of incompatible type}} +} Index: clang/test/CodeGen/builtin_set_flt_rounds.c =================================================================== --- /dev/null +++ clang/test/CodeGen/builtin_set_flt_rounds.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple x86_64-gnu-linux %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-windows-msvc %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -triple aarch64-gnu-linux %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -triple aarch64-windows-msvc %s -emit-llvm -o - | FileCheck %s +void test_builtin_set_flt_rounds() { + __builtin_set_flt_rounds(1); + // CHECK: call void @llvm.set.rounding(i32 1) +} Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -2146,6 +2146,14 @@ return ExprError(); break; + case Builtin::BI__builtin_set_flt_rounds: + if (CheckBuiltinTargetInSupported(*this, BuiltinID, TheCall, + {llvm::Triple::x86, llvm::Triple::x86_64, + llvm::Triple::arm, llvm::Triple::thumb, + llvm::Triple::aarch64})) + return ExprError(); + break; + case Builtin::BI__builtin_isgreater: case Builtin::BI__builtin_isgreaterequal: case Builtin::BI__builtin_isless: Index: clang/lib/CodeGen/CGBuiltin.cpp =================================================================== --- clang/lib/CodeGen/CGBuiltin.cpp +++ clang/lib/CodeGen/CGBuiltin.cpp @@ -3381,6 +3381,14 @@ return RValue::get(Result); } + case Builtin::BI__builtin_set_flt_rounds: { + Function *F = CGM.getIntrinsic(Intrinsic::set_rounding); + + Value *V = EmitScalarExpr(E->getArg(0)); + Builder.CreateCall(F, V); + return RValue::get(nullptr); + } + case Builtin::BI__builtin_fpclassify: { CodeGenFunction::CGFPOptionsRAII FPOptsRAII(*this, E); // FIXME: for strictfp/IEEE-754 we need to not trap on SNaN here. Index: clang/include/clang/Basic/Builtins.def =================================================================== --- clang/include/clang/Basic/Builtins.def +++ clang/include/clang/Basic/Builtins.def @@ -397,6 +397,7 @@ // Access to floating point environment BUILTIN(__builtin_flt_rounds, "i", "n") +BUILTIN(__builtin_set_flt_rounds, "vi", "n") // C99 complex builtins BUILTIN(__builtin_cabs, "dXd", "Fne") Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -304,6 +304,7 @@ - Add ``__builtin_elementwise_log2`` builtin for floating point types only. - Add ``__builtin_elementwise_exp`` builtin for floating point types only. - Add ``__builtin_elementwise_exp2`` builtin for floating point types only. +- Add ``__builtin_set_flt_rounds`` builtin for X86, x86_64, Arm and AArch64 only. AST Matchers ------------
Index: clang/test/Sema/builtin_set_flt_rounds.c =================================================================== --- /dev/null +++ clang/test/Sema/builtin_set_flt_rounds.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple mipsel-unknown-linux -fsyntax-only %s -verify=expected,unsupported +// RUN: %clang_cc1 -triple x86_64-gnu-linux -fsyntax-only %s -verify +struct S {int a;}; +void test_builtin_set_flt_rounds() { + __builtin_set_flt_rounds(1); // unsupported-error {{builtin is not supported on this target}} + struct S s; + __builtin_set_flt_rounds(s); // expected-error {{passing 'struct S' to parameter of incompatible type}} +} Index: clang/test/CodeGen/builtin_set_flt_rounds.c =================================================================== --- /dev/null +++ clang/test/CodeGen/builtin_set_flt_rounds.c @@ -0,0 +1,8 @@ +// RUN: %clang_cc1 -triple x86_64-gnu-linux %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-windows-msvc %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -triple aarch64-gnu-linux %s -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 -triple aarch64-windows-msvc %s -emit-llvm -o - | FileCheck %s +void test_builtin_set_flt_rounds() { + __builtin_set_flt_rounds(1); + // CHECK: call void @llvm.set.rounding(i32 1) +} Index: clang/lib/Sema/SemaChecking.cpp =================================================================== --- clang/lib/Sema/SemaChecking.cpp +++ clang/lib/Sema/SemaChecking.cpp @@ -2146,6 +2146,14 @@ return ExprError(); break; + case Builtin::BI__builtin_set_flt_rounds: + if (CheckBuiltinTargetInSupported(*this, BuiltinID, TheCall, + {llvm::Triple::x86, llvm::Triple::x86_64, + llvm::Triple::arm, llvm::Triple::thumb, + llvm::Triple::aarch64})) + return ExprError(); + break; + case Builtin::BI__builtin_isgreater: case Builtin::BI__builtin_isgreaterequal: case Builtin::BI__builtin_isless: Index: clang/lib/CodeGen/CGBuiltin.cpp =================================================================== --- clang/lib/CodeGen/CGBuiltin.cpp +++ clang/lib/CodeGen/CGBuiltin.cpp @@ -3381,6 +3381,14 @@ return RValue::get(Result); } + case Builtin::BI__builtin_set_flt_rounds: { + Function *F = CGM.getIntrinsic(Intrinsic::set_rounding); + + Value *V = EmitScalarExpr(E->getArg(0)); + Builder.CreateCall(F, V); + return RValue::get(nullptr); + } + case Builtin::BI__builtin_fpclassify: { CodeGenFunction::CGFPOptionsRAII FPOptsRAII(*this, E); // FIXME: for strictfp/IEEE-754 we need to not trap on SNaN here. Index: clang/include/clang/Basic/Builtins.def =================================================================== --- clang/include/clang/Basic/Builtins.def +++ clang/include/clang/Basic/Builtins.def @@ -397,6 +397,7 @@ // Access to floating point environment BUILTIN(__builtin_flt_rounds, "i", "n") +BUILTIN(__builtin_set_flt_rounds, "vi", "n") // C99 complex builtins BUILTIN(__builtin_cabs, "dXd", "Fne") Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -304,6 +304,7 @@ - Add ``__builtin_elementwise_log2`` builtin for floating point types only. - Add ``__builtin_elementwise_exp`` builtin for floating point types only. - Add ``__builtin_elementwise_exp2`` builtin for floating point types only. +- Add ``__builtin_set_flt_rounds`` builtin for X86, x86_64, Arm and AArch64 only. AST Matchers ------------
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits