From 1baeaa395a95d618fdd7d5a1fcea9ccc3a6ed996 Mon Sep 17 00:00:00 2001 From: Peter Collingbourne Date: Tue, 24 Feb 2015 23:17:02 +0000 Subject: LowerBitSets: Introduce global layout builder. The builder is based on a layout algorithm that tries to keep members of small bit sets together. The new layout compresses Chromium's bit sets to around 15% of their original size. Differential Revision: http://reviews.llvm.org/D7796 llvm-svn: 230394 --- llvm/unittests/Transforms/IPO/LowerBitSets.cpp | 27 ++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'llvm/unittests/Transforms/IPO/LowerBitSets.cpp') diff --git a/llvm/unittests/Transforms/IPO/LowerBitSets.cpp b/llvm/unittests/Transforms/IPO/LowerBitSets.cpp index 796d90f29e9..2f27c0762ff 100644 --- a/llvm/unittests/Transforms/IPO/LowerBitSets.cpp +++ b/llvm/unittests/Transforms/IPO/LowerBitSets.cpp @@ -62,3 +62,30 @@ TEST(LowerBitSets, BitSetBuilder) { } } } + +TEST(LowerBitSets, GlobalLayoutBuilder) { + struct { + uint64_t NumObjects; + std::vector> Fragments; + std::vector WantLayout; + } GLBTests[] = { + {0, {}, {}}, + {4, {{0, 1}, {2, 3}}, {0, 1, 2, 3}}, + {3, {{0, 1}, {1, 2}}, {0, 1, 2}}, + {4, {{0, 1}, {1, 2}, {2, 3}}, {0, 1, 2, 3}}, + {4, {{0, 1}, {2, 3}, {1, 2}}, {0, 1, 2, 3}}, + {6, {{2, 5}, {0, 1, 2, 3, 4, 5}}, {0, 1, 2, 5, 3, 4}}, + }; + + for (auto &&T : GLBTests) { + GlobalLayoutBuilder GLB(T.NumObjects); + for (auto &&F : T.Fragments) + GLB.addFragment(F); + + std::vector ComputedLayout; + for (auto &&F : GLB.Fragments) + ComputedLayout.insert(ComputedLayout.end(), F.begin(), F.end()); + + EXPECT_EQ(T.WantLayout, ComputedLayout); + } +} -- cgit v1.2.3