https://github.com/MainakSil updated https://github.com/llvm/llvm-project/pull/108804
>From 43e6c22f25f419b64678374dd247eaf8bc28fa57 Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Mon, 16 Sep 2024 09:50:33 +0530 Subject: [PATCH 01/12] [clang] Increase VecLib bitfield size to 4 bits in CodeGenOptions.def --- clang/include/clang/Basic/CodeGenOptions.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index b600198998d85b..f2a96324936775 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -376,7 +376,7 @@ ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NormalInlining) VALUE_CODEGENOPT(InlineMaxStackSize, 32, UINT_MAX) // Vector functions library to use. -ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 3, llvm::driver::VectorLibrary::NoLibrary) +ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 4, llvm::driver::VectorLibrary::NoLibrary) /// The default TLS model to use. ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, GeneralDynamicTLSModel) >From b30adc9c059d1af9b5874b5c0e258670d3190852 Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Mon, 16 Sep 2024 14:18:03 +0530 Subject: [PATCH 02/12] Update CodeGenOptions.def --- clang/include/clang/Basic/CodeGenOptions.def | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index f2a96324936775..2d5bb84d1cc59c 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -375,6 +375,11 @@ ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NormalInlining) /// The maximum stack size a function can have to be considered for inlining. VALUE_CODEGENOPT(InlineMaxStackSize, 32, UINT_MAX) +// Ensure the VecLib bitfield has enough space for future vector libraries. +// If new vector libraries are added beyond the current limit of 16, this static assertion will fail. +static_assert(static_cast<int>(llvm::driver::VectorLibrary::NoLibrary) <= 16, + "The VecLib bitfield in CodeGenOptions needs to be expanded to support more vector libraries."); + // Vector functions library to use. ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 4, llvm::driver::VectorLibrary::NoLibrary) >From d96f69105c5be85acf3614258911fbdf74dbc60f Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Mon, 16 Sep 2024 14:32:26 +0530 Subject: [PATCH 03/12] Update CodeGenOptions.def >From 558038b29eedb81e9ce328f323914329af0d8f0f Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Wed, 18 Sep 2024 08:57:16 +0530 Subject: [PATCH 04/12] Update CodeGenOptions.def --- clang/include/clang/Basic/CodeGenOptions.def | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def index 2d5bb84d1cc59c..b78ae61e6509ea 100644 --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -375,13 +375,18 @@ ENUM_CODEGENOPT(Inlining, InliningMethod, 2, NormalInlining) /// The maximum stack size a function can have to be considered for inlining. VALUE_CODEGENOPT(InlineMaxStackSize, 32, UINT_MAX) -// Ensure the VecLib bitfield has enough space for future vector libraries. -// If new vector libraries are added beyond the current limit of 16, this static assertion will fail. -static_assert(static_cast<int>(llvm::driver::VectorLibrary::NoLibrary) <= 16, - "The VecLib bitfield in CodeGenOptions needs to be expanded to support more vector libraries."); +// Define the number of bits required for the VecLib enum +#define VECLIB_BIT_COUNT (llvm::countPopulation(llvm::driver::VectorLibrary::MaxLibrary)) -// Vector functions library to use. -ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, 4, llvm::driver::VectorLibrary::NoLibrary) +// Ensure the VecLib bitfield has enough space for future vector libraries. +// The number of bits is determined automatically based on the number of enum values. +static_assert(static_cast<size_t>(llvm::driver::VectorLibrary::MaxLibrary) <= (1 << VECLIB_BIT_COUNT), + "VecLib bitfield size is too small to accommodate all vector libraries."); + +// VecLib definition in CodeGenOptions.def +ENUM_CODEGENOPT(VecLib, llvm::driver::VectorLibrary, VECLIB_BIT_COUNT, llvm::driver::VectorLibrary::NoLibrary) + +#undef VECLIB_BIT_COUNT /// The default TLS model to use. ENUM_CODEGENOPT(DefaultTLSModel, TLSModel, 2, GeneralDynamicTLSModel) >From d2f9b3f437c1ac406e3ef2e72f412d0194909ee0 Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Wed, 18 Sep 2024 09:01:08 +0530 Subject: [PATCH 05/12] Create AllLibrariesFit.cpp --- clang/unittests/CodeGen/AllLibrariesFit.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 clang/unittests/CodeGen/AllLibrariesFit.cpp diff --git a/clang/unittests/CodeGen/AllLibrariesFit.cpp b/clang/unittests/CodeGen/AllLibrariesFit.cpp new file mode 100644 index 00000000000000..9c2c34ceee6992 --- /dev/null +++ b/clang/unittests/CodeGen/AllLibrariesFit.cpp @@ -0,0 +1,9 @@ +#include "clang/Basic/CodeGenOptions.h" +#include "llvm/Driver/Options.h" +#include "gtest/gtest.h" + +TEST(VecLibBitfieldTest, AllLibrariesFit) { + // We expect that all vector libraries fit in the bitfield size + EXPECT_LE(static_cast<size_t>(llvm::driver::VectorLibrary::MaxLibrary), + (1 << VECLIB_BIT_COUNT)) << "VecLib bitfield size is too small!"; +} >From 1b39ac4650e445a3babbd5b79c2ea9aef3b3a91b Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Wed, 18 Sep 2024 09:02:05 +0530 Subject: [PATCH 06/12] Create SimulatedOverflowTest.cpp --- .../CodeGen/SimulatedOverflowTest.cpp | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 clang/unittests/CodeGen/SimulatedOverflowTest.cpp diff --git a/clang/unittests/CodeGen/SimulatedOverflowTest.cpp b/clang/unittests/CodeGen/SimulatedOverflowTest.cpp new file mode 100644 index 00000000000000..4c716d3480cf90 --- /dev/null +++ b/clang/unittests/CodeGen/SimulatedOverflowTest.cpp @@ -0,0 +1,23 @@ +// Simulate the addition of a new library without increasing the bitfield size +enum class SimulatedVectorLibrary { + Accelerate = 0, + LIBMVEC, + MASSV, + SVML, + SLEEF, + Darwin_libsystem_m, + ArmPL, + AMDLIBM, + NoLibrary, + // Simulate new addition + NewLibrary, + MaxLibrary +}; + +#define SIMULATED_VECLIB_BIT_COUNT 4 // The current bitfield size (should be 4 for 9 options) + +TEST(VecLibBitfieldTest, SimulatedOverflowTest) { + // Simulate the addition of a new library and check if the bitfield size is sufficient + EXPECT_LE(static_cast<size_t>(SimulatedVectorLibrary::MaxLibrary), + (1 << SIMULATED_VECLIB_BIT_COUNT)) << "Simulated VecLib bitfield size overflow!"; +} >From 2e6275d645485c5ae32754a753ed99bcfc507dba Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Wed, 18 Sep 2024 09:03:12 +0530 Subject: [PATCH 07/12] Create EncodingDecodingTest.cpp --- clang/unittests/CodeGen/EncodingDecodingTest.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 clang/unittests/CodeGen/EncodingDecodingTest.cpp diff --git a/clang/unittests/CodeGen/EncodingDecodingTest.cpp b/clang/unittests/CodeGen/EncodingDecodingTest.cpp new file mode 100644 index 00000000000000..c819c02a443b68 --- /dev/null +++ b/clang/unittests/CodeGen/EncodingDecodingTest.cpp @@ -0,0 +1,15 @@ +TEST(VecLibBitfieldTest, EncodingDecodingTest) { + clang::CodeGenOptions Opts; + + // Test encoding and decoding for each vector library + for (int i = static_cast<int>(llvm::driver::VectorLibrary::Accelerate); + i <= static_cast<int>(llvm::driver::VectorLibrary::MaxLibrary); ++i) { + + Opts.VecLib = static_cast<llvm::driver::VectorLibrary>(i); + + // Encode and then decode + llvm::driver::VectorLibrary decodedValue = static_cast<llvm::driver::VectorLibrary>(Opts.VecLib); + + EXPECT_EQ(decodedValue, Opts.VecLib) << "Encoding/Decoding failed for vector library " << i; + } +} >From 7738ec42531dca76f28839f230ed1bb1efc953bb Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Wed, 18 Sep 2024 15:03:57 +0530 Subject: [PATCH 08/12] Update AllLibrariesFit.cpp --- clang/unittests/CodeGen/AllLibrariesFit.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/clang/unittests/CodeGen/AllLibrariesFit.cpp b/clang/unittests/CodeGen/AllLibrariesFit.cpp index 9c2c34ceee6992..fae7ba9a11c59f 100644 --- a/clang/unittests/CodeGen/AllLibrariesFit.cpp +++ b/clang/unittests/CodeGen/AllLibrariesFit.cpp @@ -5,5 +5,6 @@ TEST(VecLibBitfieldTest, AllLibrariesFit) { // We expect that all vector libraries fit in the bitfield size EXPECT_LE(static_cast<size_t>(llvm::driver::VectorLibrary::MaxLibrary), - (1 << VECLIB_BIT_COUNT)) << "VecLib bitfield size is too small!"; + (1 << VECLIB_BIT_COUNT)) + << "VecLib bitfield size is too small!"; } >From 3524010239506e1934498cbf7f397ca4f03d7a17 Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Wed, 18 Sep 2024 20:21:51 +0530 Subject: [PATCH 09/12] Update SimulatedOverflowTest.cpp --- .../CodeGen/SimulatedOverflowTest.cpp | 35 ++++++++++--------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/clang/unittests/CodeGen/SimulatedOverflowTest.cpp b/clang/unittests/CodeGen/SimulatedOverflowTest.cpp index 4c716d3480cf90..acfeaf7498b6d0 100644 --- a/clang/unittests/CodeGen/SimulatedOverflowTest.cpp +++ b/clang/unittests/CodeGen/SimulatedOverflowTest.cpp @@ -1,23 +1,26 @@ // Simulate the addition of a new library without increasing the bitfield size enum class SimulatedVectorLibrary { - Accelerate = 0, - LIBMVEC, - MASSV, - SVML, - SLEEF, - Darwin_libsystem_m, - ArmPL, - AMDLIBM, - NoLibrary, - // Simulate new addition - NewLibrary, - MaxLibrary + Accelerate = 0, + LIBMVEC, + MASSV, + SVML, + SLEEF, + Darwin_libsystem_m, + ArmPL, + AMDLIBM, + NoLibrary, + // Simulate new addition + NewLibrary, + MaxLibrary }; -#define SIMULATED_VECLIB_BIT_COUNT 4 // The current bitfield size (should be 4 for 9 options) +#define SIMULATED_VECLIB_BIT_COUNT \ + 4 // The current bitfield size (should be 4 for 9 options) TEST(VecLibBitfieldTest, SimulatedOverflowTest) { - // Simulate the addition of a new library and check if the bitfield size is sufficient - EXPECT_LE(static_cast<size_t>(SimulatedVectorLibrary::MaxLibrary), - (1 << SIMULATED_VECLIB_BIT_COUNT)) << "Simulated VecLib bitfield size overflow!"; + // Simulate the addition of a new library and check if the bitfield size is + // sufficient + EXPECT_LE(static_cast<size_t>(SimulatedVectorLibrary::MaxLibrary), + (1 << SIMULATED_VECLIB_BIT_COUNT)) + << "Simulated VecLib bitfield size overflow!"; } >From b56cdeecb9e606d30955f52441b04771d3cf19b0 Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Wed, 18 Sep 2024 20:45:59 +0530 Subject: [PATCH 10/12] Update EncodingDecodingTest.cpp --- .../CodeGen/EncodingDecodingTest.cpp | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/clang/unittests/CodeGen/EncodingDecodingTest.cpp b/clang/unittests/CodeGen/EncodingDecodingTest.cpp index c819c02a443b68..67c89ef07c428b 100644 --- a/clang/unittests/CodeGen/EncodingDecodingTest.cpp +++ b/clang/unittests/CodeGen/EncodingDecodingTest.cpp @@ -1,15 +1,17 @@ TEST(VecLibBitfieldTest, EncodingDecodingTest) { - clang::CodeGenOptions Opts; - - // Test encoding and decoding for each vector library - for (int i = static_cast<int>(llvm::driver::VectorLibrary::Accelerate); - i <= static_cast<int>(llvm::driver::VectorLibrary::MaxLibrary); ++i) { - - Opts.VecLib = static_cast<llvm::driver::VectorLibrary>(i); - - // Encode and then decode - llvm::driver::VectorLibrary decodedValue = static_cast<llvm::driver::VectorLibrary>(Opts.VecLib); - - EXPECT_EQ(decodedValue, Opts.VecLib) << "Encoding/Decoding failed for vector library " << i; - } + clang::CodeGenOptions Opts; + + // Test encoding and decoding for each vector library + for (int i = static_cast<int>(llvm::driver::VectorLibrary::Accelerate); + i <= static_cast<int>(llvm::driver::VectorLibrary::MaxLibrary); ++i) { + + Opts.VecLib = static_cast<llvm::driver::VectorLibrary>(i); + + // Encode and then decode + llvm::driver::VectorLibrary decodedValue = + static_cast<llvm::driver::VectorLibrary>(Opts.VecLib); + + EXPECT_EQ(decodedValue, Opts.VecLib) + << "Encoding/Decoding failed for vector library " << i; + } } >From e4f27872464087073a7056312b04a4e0d6d8fa1b Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Wed, 18 Sep 2024 20:46:40 +0530 Subject: [PATCH 11/12] Update AllLibrariesFit.cpp --- clang/unittests/CodeGen/AllLibrariesFit.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/clang/unittests/CodeGen/AllLibrariesFit.cpp b/clang/unittests/CodeGen/AllLibrariesFit.cpp index fae7ba9a11c59f..7bb28912893e53 100644 --- a/clang/unittests/CodeGen/AllLibrariesFit.cpp +++ b/clang/unittests/CodeGen/AllLibrariesFit.cpp @@ -3,8 +3,8 @@ #include "gtest/gtest.h" TEST(VecLibBitfieldTest, AllLibrariesFit) { - // We expect that all vector libraries fit in the bitfield size - EXPECT_LE(static_cast<size_t>(llvm::driver::VectorLibrary::MaxLibrary), - (1 << VECLIB_BIT_COUNT)) - << "VecLib bitfield size is too small!"; + // We expect that all vector libraries fit in the bitfield size + EXPECT_LE(static_cast<size_t>(llvm::driver::VectorLibrary::MaxLibrary), + (1 << VECLIB_BIT_COUNT)) + << "VecLib bitfield size is too small!"; } >From c8b7c6d7047a2ac538a53b2d3ac26310df2e0051 Mon Sep 17 00:00:00 2001 From: Mainak Sil <mainaks...@gmail.com> Date: Wed, 18 Sep 2024 20:52:10 +0530 Subject: [PATCH 12/12] Update EncodingDecodingTest.cpp _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits