]> granicus.if.org Git - llvm/commitdiff
[llvm-exegesis][X86] Randomize CMOVcc/SETcc OPERAND_COND_CODE CondCodes
authorRoman Lebedev <lebedev.ri@gmail.com>
Mon, 8 Apr 2019 10:11:00 +0000 (10:11 +0000)
committerRoman Lebedev <lebedev.ri@gmail.com>
Mon, 8 Apr 2019 10:11:00 +0000 (10:11 +0000)
Reviewers: courbet, gchatelet

Reviewed By: gchatelet

Subscribers: tschuett, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D60066

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357898 91177308-0d34-0410-b5e6-96231b3b80d8

test/tools/llvm-exegesis/X86/latency-CMOV32rr.s
tools/llvm-exegesis/lib/SnippetGenerator.cpp
tools/llvm-exegesis/lib/SnippetGenerator.h
tools/llvm-exegesis/lib/X86/Target.cpp

index d983c2b061316a0b16efd90a716aed7a097e16ca..8eec5c0c9ed1644a4b32a21778a92d931d0057be 100644 (file)
@@ -4,6 +4,6 @@ CHECK:      ---
 CHECK-NEXT: mode: latency
 CHECK-NEXT: key:
 CHECK-NEXT:   instructions:
-CHECK-NEXT:     CMOV32rr
+CHECK-NEXT:     'CMOV32rr {{.*}} i_0x{{[0-9a-f]}}'
 CHECK-NEXT: config: ''
 CHECK-LAST: ...
index 8cbde9f0186c6e9c9c7357f356d8c0254c20d29a..d5c790dbefced5349089a09269598cb70a110431 100644 (file)
@@ -146,15 +146,16 @@ std::mt19937 &randomGenerator() {
   return RandomGenerator;
 }
 
-static size_t randomIndex(size_t Size) {
-  assert(Size > 0);
-  std::uniform_int_distribution<> Distribution(0, Size - 1);
+size_t randomIndex(size_t Max) {
+  std::uniform_int_distribution<> Distribution(0, Max);
   return Distribution(randomGenerator());
 }
 
 template <typename C>
 static auto randomElement(const C &Container) -> decltype(Container[0]) {
-  return Container[randomIndex(Container.size())];
+  assert(!Container.empty() &&
+         "Can't pick a random element from an empty container)");
+  return Container[randomIndex(Container.size() - 1)];
 }
 
 static void setRegisterOperandValue(const RegisterOperandAssignment &ROV,
@@ -176,7 +177,7 @@ static void setRegisterOperandValue(const RegisterOperandAssignment &ROV,
 size_t randomBit(const llvm::BitVector &Vector) {
   assert(Vector.any());
   auto Itr = Vector.set_bits_begin();
-  for (size_t I = randomIndex(Vector.count()); I != 0; --I)
+  for (size_t I = randomIndex(Vector.count() - 1); I != 0; --I)
     ++Itr;
   return *Itr;
 }
index 289fa02096a59d2ab259a44f33d483749ec5d994..ef44bd9946484665ccde632d4e2fb2e208b19526 100644 (file)
@@ -77,6 +77,9 @@ private:
 // unit tests.
 std::mt19937 &randomGenerator();
 
+// Picks a random unsigned integer from 0 to Max (inclusive).
+size_t randomIndex(size_t Max);
+
 // Picks a random bit among the bits set in Vector and returns its index.
 // Precondition: Vector must have at least one bit set.
 size_t randomBit(const llvm::BitVector &Vector);
index 01e3589cc2dee62f5709c54d9f329fc73c37e89a..21d424a4beeecc1452b7f236eb0a3fac39695859 100644 (file)
@@ -8,6 +8,7 @@
 #include "../Target.h"
 
 #include "../Latency.h"
+#include "../SnippetGenerator.h"
 #include "../Uops.h"
 #include "MCTargetDesc/X86BaseInfo.h"
 #include "MCTargetDesc/X86MCTargetDesc.h"
@@ -498,8 +499,8 @@ void ExegesisX86Target::randomizeMCOperand(
   const Operand &Op = Instr.getPrimaryOperand(Var);
   switch (Op.getExplicitOperandInfo().OperandType) {
   case llvm::X86::OperandType::OPERAND_COND_CODE:
-    // FIXME: explore all CC variants.
-    AssignedValue = llvm::MCOperand::createImm(1);
+    AssignedValue = llvm::MCOperand::createImm(
+        randomIndex(llvm::X86::CondCode::LAST_VALID_COND));
     break;
   default:
     break;