[llvm] r357898 - [llvm-exegesis][X86] Randomize CMOVcc/SETcc OPERAND_COND_CODE CondCodes
Roman Lebedev via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 8 03:11:00 PDT 2019
Author: lebedevri
Date: Mon Apr 8 03:11:00 2019
New Revision: 357898
URL: http://llvm.org/viewvc/llvm-project?rev=357898&view=rev
Log:
[llvm-exegesis][X86] Randomize CMOVcc/SETcc OPERAND_COND_CODE CondCodes
Reviewers: courbet, gchatelet
Reviewed By: gchatelet
Subscribers: tschuett, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D60066
Modified:
llvm/trunk/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s
llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.cpp
llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.h
llvm/trunk/tools/llvm-exegesis/lib/X86/Target.cpp
Modified: llvm/trunk/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s?rev=357898&r1=357897&r2=357898&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s (original)
+++ llvm/trunk/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s Mon Apr 8 03:11:00 2019
@@ -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: ...
Modified: llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.cpp?rev=357898&r1=357897&r2=357898&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.cpp (original)
+++ llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.cpp Mon Apr 8 03:11:00 2019
@@ -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(cons
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;
}
Modified: llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.h?rev=357898&r1=357897&r2=357898&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.h (original)
+++ llvm/trunk/tools/llvm-exegesis/lib/SnippetGenerator.h Mon Apr 8 03:11:00 2019
@@ -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);
Modified: llvm/trunk/tools/llvm-exegesis/lib/X86/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-exegesis/lib/X86/Target.cpp?rev=357898&r1=357897&r2=357898&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-exegesis/lib/X86/Target.cpp (original)
+++ llvm/trunk/tools/llvm-exegesis/lib/X86/Target.cpp Mon Apr 8 03:11:00 2019
@@ -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::randomizeMCOpera
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;
More information about the llvm-commits
mailing list