diff options
| author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-12-13 22:04:58 +0000 |
|---|---|---|
| committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2016-12-13 22:04:58 +0000 |
| commit | c02dda2ab9611292320351acd518d47fb02e5879 (patch) | |
| tree | 79a9762b4ca721d4cc7531faf40965ac326f177f | |
| parent | 65ca8e91cc2cc1f57bfde4fcc50818de402fd17f (diff) | |
| download | bcm5719-llvm-c02dda2ab9611292320351acd518d47fb02e5879.tar.gz bcm5719-llvm-c02dda2ab9611292320351acd518d47fb02e5879.zip | |
Re-land "[SCEVExpander] Use llvm data structures; NFC"
This change re-lands r289215, by reverting r289482. The underlying
issue that caused it to be reverted has been fixed by Tim Northover in
r289496.
Original commit message for r289215:
[SCEVExpander] Use llvm data structures; NFC
Original commit message for r289482:
Revert "[SCEVExpander] Use llvm data structures; NFC"
This reverts r289215 (git SHA1 cb7b86a1). It breaks the ubsan build
because a DenseMap that keys off of `AssertingVH<T>` will hit UB when it
tries to cast the empty and tombstone keys to `T *` (due to insufficient
alignment).
This is the relevant stack trace (thanks to Mike Aizatsky):
#0 0x25cf100 in llvm::AssertingVH<llvm::PHINode>::getValPtr() const llvm/include/llvm/IR/ValueHandle.h:212:39
#1 0x25cea20 in llvm::AssertingVH<llvm::PHINode>::operator=(llvm::AssertingVH<llvm::PHINode> const&) llvm/include/llvm/IR/ValueHandle.h:234:19
#2 0x25d0092 in llvm::DenseMapBase<llvm::DenseMap<llvm::AssertingVH<llvm::PHINode>, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::AssertingVH<llvm::PHINode> >, llvm::detail::DenseSetPair<llvm::AssertingVH<llvm::PHINode> > >, llvm::AssertingVH<llvm::PHINode>, llvm::detail::DenseSetEmpty, llvm::DenseMapInfo<llvm::AssertingVH<llvm::PHINode> >, llvm::detail::DenseSetPair<llvm::AssertingVH<llvm::PHINode> > >::clear() llvm/include/llvm/ADT/DenseMap.h:113:23
llvm-svn: 289602
| -rw-r--r-- | llvm/include/llvm/Analysis/ScalarEvolutionExpander.h | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h b/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h index a82506d6f84..517592a3d04 100644 --- a/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h +++ b/llvm/include/llvm/Analysis/ScalarEvolutionExpander.h @@ -14,13 +14,14 @@ #ifndef LLVM_ANALYSIS_SCALAREVOLUTIONEXPANDER_H #define LLVM_ANALYSIS_SCALAREVOLUTIONEXPANDER_H +#include "llvm/ADT/DenseMap.h" +#include "llvm/ADT/DenseSet.h" #include "llvm/ADT/Optional.h" #include "llvm/Analysis/ScalarEvolutionExpressions.h" #include "llvm/Analysis/ScalarEvolutionNormalization.h" #include "llvm/Analysis/TargetFolder.h" #include "llvm/IR/IRBuilder.h" #include "llvm/IR/ValueHandle.h" -#include <set> namespace llvm { class TargetTransformInfo; @@ -43,11 +44,12 @@ namespace llvm { const char* IVName; // InsertedExpressions caches Values for reuse, so must track RAUW. - std::map<std::pair<const SCEV *, Instruction *>, TrackingVH<Value> > - InsertedExpressions; + DenseMap<std::pair<const SCEV *, Instruction *>, TrackingVH<Value>> + InsertedExpressions; + // InsertedValues only flags inserted instructions so needs no RAUW. - std::set<AssertingVH<Value> > InsertedValues; - std::set<AssertingVH<Value> > InsertedPostIncValues; + DenseSet<AssertingVH<Value>> InsertedValues; + DenseSet<AssertingVH<Value>> InsertedPostIncValues; /// A memoization of the "relevant" loop for a given SCEV. DenseMap<const SCEV *, const Loop *> RelevantLoops; @@ -67,7 +69,7 @@ namespace llvm { Instruction *IVIncInsertPos; /// Phis that complete an IV chain. Reuse - std::set<AssertingVH<PHINode> > ChainedPhis; + DenseSet<AssertingVH<PHINode>> ChainedPhis; /// When true, expressions are expanded in "canonical" form. In particular, /// addrecs are expanded as arithmetic based on a canonical induction |

