From 0eaf28546001a4c7295e78f2348fbad2dd075e52 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Thu, 16 Feb 2017 14:37:03 +0000 Subject: [PATCH] Remove uses of deprecated std::random_shuffle in the LLVM code base. Reviewed as https://reviews.llvm.org/D29780. llvm-svn: 295325 --- tools/bugpoint/FindBugs.cpp | 6 +++--- tools/bugpoint/ListReducer.h | 5 +++-- tools/llvm-stress/llvm-stress.cpp | 9 ++++++++- unittests/ADT/TinyPtrVectorTest.cpp | 10 ++-------- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/tools/bugpoint/FindBugs.cpp b/tools/bugpoint/FindBugs.cpp index 156f4d0d78f..3093169ba8b 100644 --- a/tools/bugpoint/FindBugs.cpp +++ b/tools/bugpoint/FindBugs.cpp @@ -21,6 +21,7 @@ #include "llvm/Support/raw_ostream.h" #include #include +#include using namespace llvm; Error @@ -39,14 +40,13 @@ BugDriver::runManyPasses(const std::vector &AllPasses) { return E; } - srand(time(nullptr)); - + std::mt19937 randomness(std::random_device{}()); unsigned num = 1; while (1) { // // Step 1: Randomize the order of the optimizer passes. // - std::random_shuffle(PassesToRun.begin(), PassesToRun.end()); + std::shuffle(PassesToRun.begin(), PassesToRun.end(), randomness); // // Step 2: Run optimizer passes on the program and check for success. diff --git a/tools/bugpoint/ListReducer.h b/tools/bugpoint/ListReducer.h index dcfa11d0692..0f9db022d55 100644 --- a/tools/bugpoint/ListReducer.h +++ b/tools/bugpoint/ListReducer.h @@ -19,6 +19,7 @@ #include "llvm/Support/raw_ostream.h" #include #include +#include #include namespace llvm { @@ -46,7 +47,7 @@ template struct ListReducer { /// that bugpoint does. Expected reduceList(std::vector &TheList) { std::vector empty; - std::srand(0x6e5ea738); // Seed the random number generator + std::mt19937 randomness(0x6e5ea738); // Seed the random number generator Expected Result = doTest(TheList, empty); if (Error E = Result.takeError()) return std::move(E); @@ -92,7 +93,7 @@ template struct ListReducer { // distribution (improving the speed of convergence). if (ShufflingEnabled && NumOfIterationsWithoutProgress > MaxIterations) { std::vector ShuffledList(TheList); - std::random_shuffle(ShuffledList.begin(), ShuffledList.end()); + std::shuffle(ShuffledList.begin(), ShuffledList.end(), randomness); errs() << "\n\n*** Testing shuffled set...\n\n"; // Check that random shuffle doesn't lose the bug Expected Result = doTest(ShuffledList, empty); diff --git a/tools/llvm-stress/llvm-stress.cpp b/tools/llvm-stress/llvm-stress.cpp index 731a24d0ac2..fdfa197e601 100644 --- a/tools/llvm-stress/llvm-stress.cpp +++ b/tools/llvm-stress/llvm-stress.cpp @@ -28,6 +28,7 @@ #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/ToolOutputFile.h" #include +#include #include namespace llvm { @@ -113,6 +114,12 @@ public: return Rand64() % y; } + /// Make this like a C++11 random device + typedef uint32_t result_type; + uint32_t operator()() { return Rand32(); } + static constexpr result_type min() { return 0; } + static constexpr result_type max() { return 0x7ffff; } + private: unsigned Seed; }; @@ -662,7 +669,7 @@ static void IntroduceControlFlow(Function *F, Random &R) { BoolInst.push_back(&Instr); } - std::random_shuffle(BoolInst.begin(), BoolInst.end(), R); + std::shuffle(BoolInst.begin(), BoolInst.end(), R); for (auto *Instr : BoolInst) { BasicBlock *Curr = Instr->getParent(); diff --git a/unittests/ADT/TinyPtrVectorTest.cpp b/unittests/ADT/TinyPtrVectorTest.cpp index 26189b76394..8d5fa406091 100644 --- a/unittests/ADT/TinyPtrVectorTest.cpp +++ b/unittests/ADT/TinyPtrVectorTest.cpp @@ -17,19 +17,13 @@ #include "llvm/Support/type_traits.h" #include "gtest/gtest.h" #include +#include #include using namespace llvm; namespace { -// The world's worst RNG, but it is deterministic and makes it easy to get -// *some* shuffling of elements. -static ptrdiff_t test_shuffle_rng(ptrdiff_t i) { - return (i + i * 33) % i; -} -static ptrdiff_t (*test_shuffle_rng_p)(ptrdiff_t) = &test_shuffle_rng; - template class TinyPtrVectorTest : public testing::Test { protected: @@ -46,7 +40,7 @@ protected: for (size_t i = 0, e = array_lengthof(TestValues); i != e; ++i) TestPtrs.push_back(&TestValues[i]); - std::random_shuffle(TestPtrs.begin(), TestPtrs.end(), test_shuffle_rng_p); + std::shuffle(TestPtrs.begin(), TestPtrs.end(), std::mt19937{}); } ArrayRef testArray(size_t N) {