| Index: src/IceTargetLoweringX8632Traits.h
|
| diff --git a/src/IceTargetLoweringX8632Traits.h b/src/IceTargetLoweringX8632Traits.h
|
| index 1d47d3adba795e1b90a75fe66ee7d22136ce9883..3bfd404b76df098334726f24cea339126ded3c7c 100644
|
| --- a/src/IceTargetLoweringX8632Traits.h
|
| +++ b/src/IceTargetLoweringX8632Traits.h
|
| @@ -362,7 +362,8 @@ template <> struct MachineTraits<TargetX8632> {
|
| static void
|
| makeRandomRegisterPermutation(GlobalContext *Ctx, Cfg *Func,
|
| llvm::SmallVectorImpl<int32_t> &Permutation,
|
| - const llvm::SmallBitVector &ExcludeRegisters) {
|
| + const llvm::SmallBitVector &ExcludeRegisters,
|
| + uint64_t Salt) {
|
| // TODO(stichnot): Declaring Permutation this way loses type/size
|
| // information. Fix this in conjunction with the caller-side TODO.
|
| assert(Permutation.size() >= RegisterSet::Reg_NUM);
|
| @@ -393,13 +394,16 @@ template <> struct MachineTraits<TargetX8632> {
|
| REGX8632_TABLE
|
| #undef X
|
|
|
| - RandomNumberGeneratorWrapper RNG(Ctx->getRNG());
|
| + // Create a random number generator for regalloc randomization.
|
| + RandomNumberGenerator RNG(Ctx->getFlags().getRandomSeed(),
|
| + RPE_RegAllocRandomization, Salt);
|
| + RandomNumberGeneratorWrapper RNGW(RNG);
|
|
|
| // Shuffle the resulting equivalence classes.
|
| for (auto I : EquivalenceClasses) {
|
| const RegisterList &List = I.second;
|
| RegisterList Shuffled(List);
|
| - RandomShuffle(Shuffled.begin(), Shuffled.end(), RNG);
|
| + RandomShuffle(Shuffled.begin(), Shuffled.end(), RNGW);
|
| for (size_t SI = 0, SE = Shuffled.size(); SI < SE; ++SI) {
|
| Permutation[List[SI]] = Shuffled[SI];
|
| ++NumShuffled;
|
|
|