diff options
| author | Roman Lebedev <lebedev.ri@gmail.com> | 2019-04-08 10:11:00 +0000 |
|---|---|---|
| committer | Roman Lebedev <lebedev.ri@gmail.com> | 2019-04-08 10:11:00 +0000 |
| commit | a82235843b102202766115e10003c9465a8b83ae (patch) | |
| tree | 67df3f5280adfa4433f863f0fe17ac1c172cb4e0 /llvm | |
| parent | aaff480c68cac3c363420292ff58889c366aca5c (diff) | |
| download | bcm5719-llvm-a82235843b102202766115e10003c9465a8b83ae.tar.gz bcm5719-llvm-a82235843b102202766115e10003c9465a8b83ae.zip | |
[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
llvm-svn: 357898
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s | 2 | ||||
| -rw-r--r-- | llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp | 11 | ||||
| -rw-r--r-- | llvm/tools/llvm-exegesis/lib/SnippetGenerator.h | 3 | ||||
| -rw-r--r-- | llvm/tools/llvm-exegesis/lib/X86/Target.cpp | 5 |
4 files changed, 13 insertions, 8 deletions
diff --git a/llvm/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s b/llvm/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s index d983c2b0613..8eec5c0c9ed 100644 --- a/llvm/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s +++ b/llvm/test/tools/llvm-exegesis/X86/latency-CMOV32rr.s @@ -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: ... diff --git a/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp b/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp index 8cbde9f0186..d5c790dbefc 100644 --- a/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp +++ b/llvm/tools/llvm-exegesis/lib/SnippetGenerator.cpp @@ -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; } diff --git a/llvm/tools/llvm-exegesis/lib/SnippetGenerator.h b/llvm/tools/llvm-exegesis/lib/SnippetGenerator.h index 289fa02096a..ef44bd99464 100644 --- a/llvm/tools/llvm-exegesis/lib/SnippetGenerator.h +++ b/llvm/tools/llvm-exegesis/lib/SnippetGenerator.h @@ -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); diff --git a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp index 01e3589cc2d..21d424a4bee 100644 --- a/llvm/tools/llvm-exegesis/lib/X86/Target.cpp +++ b/llvm/tools/llvm-exegesis/lib/X86/Target.cpp @@ -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; |

