mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-24 07:01:35 +00:00
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@289482 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6e5e12ede9
commit
e55942613d
@ -14,14 +14,13 @@
|
||||
#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;
|
||||
@ -44,12 +43,11 @@ namespace llvm {
|
||||
const char* IVName;
|
||||
|
||||
// InsertedExpressions caches Values for reuse, so must track RAUW.
|
||||
DenseMap<std::pair<const SCEV *, Instruction *>, TrackingVH<Value>>
|
||||
InsertedExpressions;
|
||||
|
||||
std::map<std::pair<const SCEV *, Instruction *>, TrackingVH<Value> >
|
||||
InsertedExpressions;
|
||||
// InsertedValues only flags inserted instructions so needs no RAUW.
|
||||
DenseSet<AssertingVH<Value>> InsertedValues;
|
||||
DenseSet<AssertingVH<Value>> InsertedPostIncValues;
|
||||
std::set<AssertingVH<Value> > InsertedValues;
|
||||
std::set<AssertingVH<Value> > InsertedPostIncValues;
|
||||
|
||||
/// A memoization of the "relevant" loop for a given SCEV.
|
||||
DenseMap<const SCEV *, const Loop *> RelevantLoops;
|
||||
@ -69,7 +67,7 @@ namespace llvm {
|
||||
Instruction *IVIncInsertPos;
|
||||
|
||||
/// Phis that complete an IV chain. Reuse
|
||||
DenseSet<AssertingVH<PHINode>> ChainedPhis;
|
||||
std::set<AssertingVH<PHINode> > ChainedPhis;
|
||||
|
||||
/// When true, expressions are expanded in "canonical" form. In particular,
|
||||
/// addrecs are expanded as arithmetic based on a canonical induction
|
||||
|
Loading…
x
Reference in New Issue
Block a user