diff options
author | Julien Lerouge <jlerouge@apple.com> | 2015-01-13 19:45:52 +0000 |
---|---|---|
committer | Julien Lerouge <jlerouge@apple.com> | 2015-01-13 19:45:52 +0000 |
commit | 0473cb5ab75c5ddf51290d7e5299c0c64d13312f (patch) | |
tree | 8f35948e400bbd67584cd9a8f25f0d6a798f8b64 /llvm/lib/Transforms/Vectorize | |
parent | bd039299c069ad5459410882382432f6d70eb2b0 (diff) | |
download | bcm5719-llvm-0473cb5ab75c5ddf51290d7e5299c0c64d13312f.tar.gz bcm5719-llvm-0473cb5ab75c5ddf51290d7e5299c0c64d13312f.zip |
Fix non-determinism issue in SLP
The issue was introduced in r214638:
+ for (auto &BSIter : BlocksSchedules) {
+ scheduleBlock(BSIter.second.get());
+ }
Because BlocksSchedules is a DenseMap with BasicBlock* keys, blocks are
scheduled in non-deterministic order, resulting in unpredictable IR.
Patch by Daniel Reynaud!
llvm-svn: 225821
Diffstat (limited to 'llvm/lib/Transforms/Vectorize')
-rw-r--r-- | llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index 9281bcb2c51..24d02b0060b 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -857,7 +857,7 @@ private: }; /// Attaches the BlockScheduling structures to basic blocks. - DenseMap<BasicBlock *, std::unique_ptr<BlockScheduling>> BlocksSchedules; + MapVector<BasicBlock *, std::unique_ptr<BlockScheduling>> BlocksSchedules; /// Performs the "real" scheduling. Done before vectorization is actually /// performed in a basic block. |