[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