diff options
Diffstat (limited to 'lib/Analysis/VectorUtils.cpp')
| -rw-r--r-- | lib/Analysis/VectorUtils.cpp | 20 | 
1 files changed, 13 insertions, 7 deletions
| diff --git a/lib/Analysis/VectorUtils.cpp b/lib/Analysis/VectorUtils.cpp index 986756eb2627..600f57ab9d71 100644 --- a/lib/Analysis/VectorUtils.cpp +++ b/lib/Analysis/VectorUtils.cpp @@ -56,6 +56,7 @@ bool llvm::isTriviallyVectorizable(Intrinsic::ID ID) {    case Intrinsic::smul_fix:    case Intrinsic::smul_fix_sat:    case Intrinsic::umul_fix: +  case Intrinsic::umul_fix_sat:    case Intrinsic::sqrt: // Begin floating-point.    case Intrinsic::sin:    case Intrinsic::cos: @@ -98,6 +99,7 @@ bool llvm::hasVectorInstrinsicScalarOpd(Intrinsic::ID ID,    case Intrinsic::smul_fix:    case Intrinsic::smul_fix_sat:    case Intrinsic::umul_fix: +  case Intrinsic::umul_fix_sat:      return (ScalarOpdIdx == 2);    default:      return false; @@ -830,15 +832,15 @@ void InterleavedAccessInfo::collectConstStrideAccesses(                                      /*Assume=*/true, /*ShouldCheckWrap=*/false);        const SCEV *Scev = replaceSymbolicStrideSCEV(PSE, Strides, Ptr); -      PointerType *PtrTy = dyn_cast<PointerType>(Ptr->getType()); +      PointerType *PtrTy = cast<PointerType>(Ptr->getType());        uint64_t Size = DL.getTypeAllocSize(PtrTy->getElementType());        // An alignment of 0 means target ABI alignment. -      unsigned Align = getLoadStoreAlignment(&I); -      if (!Align) -        Align = DL.getABITypeAlignment(PtrTy->getElementType()); +      MaybeAlign Alignment = MaybeAlign(getLoadStoreAlignment(&I)); +      if (!Alignment) +        Alignment = Align(DL.getABITypeAlignment(PtrTy->getElementType())); -      AccessStrideInfo[&I] = StrideDescriptor(Stride, Scev, Size, Align); +      AccessStrideInfo[&I] = StrideDescriptor(Stride, Scev, Size, *Alignment);      }  } @@ -925,7 +927,7 @@ void InterleavedAccessInfo::analyzeInterleaving(        if (!Group) {          LLVM_DEBUG(dbgs() << "LV: Creating an interleave group with:" << *B                            << '\n'); -        Group = createInterleaveGroup(B, DesB.Stride, DesB.Align); +        Group = createInterleaveGroup(B, DesB.Stride, DesB.Alignment);        }        if (B->mayWriteToMemory())          StoreGroups.insert(Group); @@ -964,6 +966,10 @@ void InterleavedAccessInfo::analyzeInterleaving(          // instructions that precede it.          if (isInterleaved(A)) {            InterleaveGroup<Instruction> *StoreGroup = getInterleaveGroup(A); + +          LLVM_DEBUG(dbgs() << "LV: Invalidated store group due to " +                               "dependence between " << *A << " and "<< *B << '\n'); +            StoreGroups.remove(StoreGroup);            releaseGroup(StoreGroup);          } @@ -1028,7 +1034,7 @@ void InterleavedAccessInfo::analyzeInterleaving(            Group->getIndex(B) + DistanceToB / static_cast<int64_t>(DesB.Size);        // Try to insert A into B's group. -      if (Group->insertMember(A, IndexA, DesA.Align)) { +      if (Group->insertMember(A, IndexA, DesA.Alignment)) {          LLVM_DEBUG(dbgs() << "LV: Inserted:" << *A << '\n'                            << "    into the interleave group with" << *B                            << '\n'); | 
