[llvm-commits] [llvm] r167720 - in /llvm/trunk/unittests/VMCore: CMakeLists.txt WaymarkTest.cpp
Gabor Greif
ggreif at gmail.com
Mon Nov 12 02:01:17 PST 2012
Author: ggreif
Date: Mon Nov 12 04:01:17 2012
New Revision: 167720
URL: http://llvm.org/viewvc/llvm-project?rev=167720&view=rev
Log:
add unit test for waymarking algorithm (Use::getUser)
Added:
llvm/trunk/unittests/VMCore/WaymarkTest.cpp
- copied, changed from r167616, llvm/branches/ggreif/waymark-64/unittests/VMCore/WaymarkTest.cpp
Modified:
llvm/trunk/unittests/VMCore/CMakeLists.txt
Modified: llvm/trunk/unittests/VMCore/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/VMCore/CMakeLists.txt?rev=167720&r1=167719&r2=167720&view=diff
==============================================================================
--- llvm/trunk/unittests/VMCore/CMakeLists.txt (original)
+++ llvm/trunk/unittests/VMCore/CMakeLists.txt Mon Nov 12 04:01:17 2012
@@ -16,6 +16,7 @@
TypesTest.cpp
ValueMapTest.cpp
VerifierTest.cpp
+ WaymarkTest.cpp
)
# MSVC9 and 8 cannot compile ValueMapTest.cpp due to their bug.
Copied: llvm/trunk/unittests/VMCore/WaymarkTest.cpp (from r167616, llvm/branches/ggreif/waymark-64/unittests/VMCore/WaymarkTest.cpp)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/VMCore/WaymarkTest.cpp?p2=llvm/trunk/unittests/VMCore/WaymarkTest.cpp&p1=llvm/branches/ggreif/waymark-64/unittests/VMCore/WaymarkTest.cpp&r1=167616&r2=167720&rev=167720&view=diff
==============================================================================
--- llvm/branches/ggreif/waymark-64/unittests/VMCore/WaymarkTest.cpp (original)
+++ llvm/trunk/unittests/VMCore/WaymarkTest.cpp Mon Nov 12 04:01:17 2012
@@ -12,21 +12,31 @@
#define private public
#include "llvm/Use.h"
#undef private
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
+#include "llvm/Function.h"
+#include "llvm/Instructions.h"
#include "llvm/LLVMContext.h"
#include "gtest/gtest.h"
+#include <algorithm>
namespace llvm {
namespace {
+Constant *char2constant(char c) {
+ return ConstantInt::get(Type::getInt8Ty(getGlobalContext()), c);
+}
+
+
TEST(WaymarkTest, NativeArray) {
- static char tail[22] = "s02s33s30y2y0s1x0syxS";
- const Constant *A = ConstantArray::get (getGlobalContext(), tail, false);
- ASSERT_NE(A, (const Constant*)NULL);
- EXPECT_EQ(1U + 20, A->getNumOperands());
+ static uint8_t tail[22] = "s02s33s30y2y0s1x0syxS";
+ Value * values[22];
+ std::transform(tail, tail + 22, values, char2constant);
+ FunctionType *FT = FunctionType::get(Type::getVoidTy(getGlobalContext()), true);
+ Function *F = Function::Create(FT, GlobalValue::ExternalLinkage);
+ const CallInst *A = CallInst::Create(F, makeArrayRef(values));
+ ASSERT_NE(A, (const CallInst*)NULL);
+ ASSERT_EQ(1U + 22, A->getNumOperands());
const Use *U = &A->getOperandUse(0);
- const Use *Ue = &A->getOperandUse(20);
+ const Use *Ue = &A->getOperandUse(22);
for (; U != Ue; ++U)
{
EXPECT_EQ(Ue + 1, U->getImpliedUser());
@@ -34,72 +44,13 @@
}
TEST(WaymarkTest, TwoBit) {
- Use* many = new Use[8212];
+ Use* many = (Use*)calloc(sizeof(Use), 8212);
ASSERT_TRUE(many);
- Use::initTags<2>(many, many + 8212, 0);
+ Use::initTags(many, many + 8212);
for (const Use *U = many, *Ue = many + 8212 - 1; U != Ue; ++U)
{
- EXPECT_EQ(Ue + 1, Use::getImpliedUser<2>(U));
- }
-}
-
-char m3(const Use& U)
-{
- static char ms[9] = "0123sxyS";
- return ms[U.Prev.getInt()];
-}
-
-TEST(WaymarkTest, ThreeBit) {
- // It is impossible to satisfy this test on
- // a 32-bit system. Better quit now.
- if (Use::availableTagBits < 3)
- return;
-
- Use* many = new Use[8212];
- ASSERT_TRUE(many);
- Use::initTags<3>(many, many + 8212, 0);
- for (const Use *U = many, *Ue = many + 8212 - 1; U != Ue; ++U)
- {
- EXPECT_EQ(Ue + 1, Use::getImpliedUser<3>(U));
+ EXPECT_EQ(Ue + 1, U->getImpliedUser());
}
-
- std::string segment8000("32sx330312sx330232sx330212sx330132sx330112sx330032");
- std::string segment5000("s032001s031322s031303s031230s031211s031132s031113s");
- std::string segment3000("311y32233y32221y32203y32131y32113y32101y32023y3201");
- std::string segment2000("3030sx3301x33000sx3232x32310sx3223x32220sx3220x321");
- std::string segment100 ("02sx13x122sx111sx100s030s020s010s000s330s320s310s3");
- std::string segment50 ("00y31y22y13y10y01sx31sx21sx11s02s33s30y2y0s1x0syxS");
-
- std::string result(50, ' ');
- int n = 8000;
- std::transform(many + 8212 - n, many + 8212 - n + 50, result.begin(), m3);
- EXPECT_EQ('2', result[49]);
- EXPECT_EQ(segment8000, result);
-
- n = 5000;
- std::transform(many + 8212 - n, many + 8212 - n + 50, result.begin(), m3);
- EXPECT_EQ('s', result[49]);
- EXPECT_EQ(segment5000, result);
-
- n = 3000;
- std::transform(many + 8212 - n, many + 8212 - n + 50, result.begin(), m3);
- EXPECT_EQ('1', result[49]);
- EXPECT_EQ(segment3000, result);
-
- n = 2000;
- std::transform(many + 8212 - n, many + 8212 - n + 50, result.begin(), m3);
- EXPECT_EQ('1', result[49]);
- EXPECT_EQ(segment2000, result);
-
- n = 100;
- std::transform(many + 8212 - n, many + 8212 - n + 50, result.begin(), m3);
- EXPECT_EQ('3', result[49]);
- EXPECT_EQ(segment100, result);
-
- n = 50;
- std::transform(many + 8212 - n, many + 8212 - n + 50, result.begin(), m3);
- EXPECT_EQ('S', result[49]);
- EXPECT_EQ(segment50, result);
}
} // end anonymous namespace
More information about the llvm-commits
mailing list