diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2015-06-21 13:59:01 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2015-06-21 13:59:01 +0000 | 
| commit | 3a0822f094b578157263e04114075ad7df81db41 (patch) | |
| tree | bc48361fe2cd1ca5f93ac01b38b183774468fc79 /lib/Transforms/Vectorize/SLPVectorizer.cpp | |
| parent | 85d8b2bbe386bcfe669575d05b61482d7be07e5d (diff) | |
Notes
Diffstat (limited to 'lib/Transforms/Vectorize/SLPVectorizer.cpp')
| -rw-r--r-- | lib/Transforms/Vectorize/SLPVectorizer.cpp | 16 | 
1 files changed, 9 insertions, 7 deletions
| diff --git a/lib/Transforms/Vectorize/SLPVectorizer.cpp b/lib/Transforms/Vectorize/SLPVectorizer.cpp index a3a45c80d8504..370e2956ac4fe 100644 --- a/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -315,12 +315,12 @@ static bool InTreeUserNeedToExtract(Value *Scalar, Instruction *UserInst,  }  /// \returns the AA location that is being access by the instruction. -static AliasAnalysis::Location getLocation(Instruction *I, AliasAnalysis *AA) { +static MemoryLocation getLocation(Instruction *I, AliasAnalysis *AA) {    if (StoreInst *SI = dyn_cast<StoreInst>(I))      return MemoryLocation::get(SI);    if (LoadInst *LI = dyn_cast<LoadInst>(I))      return MemoryLocation::get(LI); -  return AliasAnalysis::Location(); +  return MemoryLocation();  }  /// \returns True if the instruction is not a volatile or atomic load/store. @@ -515,7 +515,7 @@ private:    ///    /// \p Loc1 is the location of \p Inst1. It is passed explicitly because it    /// is invariant in the calling loop. -  bool isAliased(const AliasAnalysis::Location &Loc1, Instruction *Inst1, +  bool isAliased(const MemoryLocation &Loc1, Instruction *Inst1,                   Instruction *Inst2) {      // First check if the result is already in the cache. @@ -524,7 +524,7 @@ private:      if (result.hasValue()) {        return result.getValue();      } -    AliasAnalysis::Location Loc2 = getLocation(Inst2, AA); +    MemoryLocation Loc2 = getLocation(Inst2, AA);      bool aliased = true;      if (Loc1.Ptr && Loc2.Ptr && isSimple(Inst1) && isSimple(Inst2)) {        // Do the alias check. @@ -1637,8 +1637,10 @@ bool BoUpSLP::isFullyVectorizableTinyTree() {    if (VectorizableTree.size() != 2)      return false; -  // Handle splat stores. -  if (!VectorizableTree[0].NeedToGather && isSplat(VectorizableTree[1].Scalars)) +  // Handle splat and all-constants stores. +  if (!VectorizableTree[0].NeedToGather && +      (allConstant(VectorizableTree[1].Scalars) || +       isSplat(VectorizableTree[1].Scalars)))      return true;    // Gathering cost would be too much for tiny trees. @@ -2903,7 +2905,7 @@ void BoUpSLP::BlockScheduling::calculateDependencies(ScheduleData *SD,          ScheduleData *DepDest = BundleMember->NextLoadStore;          if (DepDest) {            Instruction *SrcInst = BundleMember->Inst; -          AliasAnalysis::Location SrcLoc = getLocation(SrcInst, SLP->AA); +          MemoryLocation SrcLoc = getLocation(SrcInst, SLP->AA);            bool SrcMayWrite = BundleMember->Inst->mayWriteToMemory();            unsigned numAliased = 0;            unsigned DistToSrc = 1; | 
