Home | History | Annotate | Download | only in Vectorize

Lines Matching refs:SLP

1 //===- SLPVectorizer.cpp - A bottom up SLP Vectorizer ---------------------===//
9 // This pass implements the Bottom Up SLP vectorizer. It detects consecutive
12 // was found, the SLP vectorizer performs vectorization on the tree.
15 // "Loop-Aware SLP in GCC" by Ira Rosen, Dorit Nuzman, Ayal Zaks.
50 #define SV_NAME "slp-vectorizer"
51 #define DEBUG_TYPE "SLP"
56 SLPCostThreshold("slp-threshold", cl::init(0), cl::Hidden,
61 ShouldVectorizeHor("slp-vectorize-hor", cl::init(true), cl::Hidden,
65 "slp-vectorize-hor-store", cl::init(false), cl::Hidden,
70 MaxVectorRegSizeOption("slp-max-reg-size", cl::init(128), cl::Hidden,
78 ScheduleRegionSizeBudget("slp-schedule-budget", cl::init(100000), cl::Hidden,
79 cl::desc("Limit the size of the SLP scheduling region per block"));
82 "slp-min-reg-size", cl::init(128), cl::Hidden,
101 /// \brief Predicate for the element types that the SLP vectorizer supports.
295 /// Bottom Up SLP Vectorizer.
750 DEBUG(dbgs() << "SLP: schedule " << *SD << "\n");
765 DEBUG(dbgs() << "SLP: gets ready (def): " << *DepBundle << "\n");
777 DEBUG(dbgs() << "SLP: gets ready (mem): " << *DepBundle << "\n");
791 DEBUG(dbgs() << "SLP: initially in ready list: " << *I << "\n");
799 bool tryScheduleBundle(ArrayRef<Value *> VL, BoUpSLP *SLP);
817 BoUpSLP *SLP);
932 DEBUG(dbgs() << "SLP: Checking user:" << *U << ".\n");
948 DEBUG(dbgs() << "SLP: \tInternal user will be removed:" << *U
960 DEBUG(dbgs() << "SLP: Need to extract:" << *U << " from lane " <<
975 DEBUG(dbgs() << "SLP: Gathering due to max recursion depth.\n");
982 DEBUG(dbgs() << "SLP: Gathering due to vector type.\n");
989 DEBUG(dbgs() << "SLP: Gathering due to store vector type.\n");
1006 DEBUG(dbgs() << "SLP: Gathering due to C,S,B,O. \n");
1017 DEBUG(dbgs() << "SLP: The instruction (" << *VL[i] <<
1029 DEBUG(dbgs() << "SLP: \tChecking bundle: " << *VL[i] << ".\n");
1031 DEBUG(dbgs() << "SLP: Gathering due to partial overlap.\n");
1036 DEBUG(dbgs() << "SLP: Perfect diamond merge at " << *VL[0] << ".\n");
1043 DEBUG(dbgs() << "SLP: The instruction (" << *VL[i] <<
1054 DEBUG(dbgs() << "SLP: Gathering due to gathered scalar.\n");
1068 DEBUG(dbgs() << "SLP: bundle in unreachable block.\n");
1077 DEBUG(dbgs() << "SLP: Scalar used twice in bundle.\n");
1089 DEBUG(dbgs() << "SLP: We are not able to schedule this bundle!\n");
1096 DEBUG(dbgs() << "SLP: We are able to schedule this bundle.\n");
1108 DEBUG(dbgs() << "SLP: Need to swizzle PHINodes (TerminatorInst use).\n");
1116 DEBUG(dbgs() << "SLP: added a vector of PHINodes.\n");
1133 DEBUG(dbgs() << "SLP: Reusing extract sequence.\n");
1154 DEBUG(dbgs() << "SLP: Gathering loads of non-packed type.\n");
1163 DEBUG(dbgs() << "SLP: Gathering non-simple loads.\n");
1173 DEBUG(dbgs() << "SLP: Gathering non-consecutive loads.\n");
1179 DEBUG(dbgs() << "SLP: added a vector of loads.\n");
1200 DEBUG(dbgs() << "SLP: Gathering casts with different src types.\n");
1205 DEBUG(dbgs() << "SLP: added a vector of casts.\n");
1228 DEBUG(dbgs() << "SLP: Gathering cmp with different predicate.\n");
1234 DEBUG(dbgs() << "SLP: added a vector of compares.\n");
1266 DEBUG(dbgs() << "SLP: added a vector of bin op.\n");
1292 DEBUG(dbgs() << "SLP: not-vectorizable GEP (nested indexes).\n");
1305 DEBUG(dbgs() << "SLP: not-vectorizable GEP (different types).\n");
1317 dbgs() << "SLP: not-vectorizable GEP (non-constant indexes).\n");
1325 DEBUG(dbgs() << "SLP: added a vector of GEPs.\n");
1342 DEBUG(dbgs() << "SLP: Non-consecutive store.\n");
1347 DEBUG(dbgs() << "SLP: added a vector of stores.\n");
1365 DEBUG(dbgs() << "SLP: Non-vectorizable call.\n");
1379 DEBUG(dbgs() << "SLP: mismatched calls:" << *CI << "!=" << *VL[i]
1390 DEBUG(dbgs() << "SLP: mismatched arguments in call:" << *CI
1403 DEBUG(dbgs() << "SLP: mismatched bundle operands in calls:" << *CI << "!="
1427 DEBUG(dbgs() << "SLP: ShuffleVector are not vectorized.\n");
1431 DEBUG(dbgs() << "SLP: added a ShuffleVector op.\n");
1455 DEBUG(dbgs() << "SLP: Gathering unknown instruction.\n");
1719 DEBUG(dbgs() << "SLP: Call cost "<< VecCallCost - ScalarCallCost
1757 DEBUG(dbgs() << "SLP: Check whether the tree with height " <<
1806 dbgs() << "SLP: #LV: " << LiveValues.size();
1841 DEBUG(dbgs() << "SLP: Calculating cost for tree of size " <<
1856 DEBUG(dbgs() << "SLP: Adding cost " << C << " for bundle that starts with "
1893 DEBUG(dbgs() << "SLP: Spill Cost = " << SpillCost << ".\n"
1894 << "SLP: Extract Cost = " << ExtractCost << ".\n"
1895 << "SLP: Total Cost = " << Cost << ".\n");
2197 DEBUG(dbgs() << "SLP: Diamond merged for " << *E->Scalars[0] << ".\n");
2514 DEBUG(dbgs() << "SLP: OpVec[" << j << "]: " << *OpVec << "\n");
2615 DEBUG(dbgs() << "SLP: Extracting " << ExternalUses.size() << " values .\n");
2675 DEBUG(dbgs() << "SLP: Replaced:" << *User << ".\n");
2695 DEBUG(dbgs() << "SLP: \tvalidating user:" << *U << ".\n");
2707 DEBUG(dbgs() << "SLP: \tErasing scalar:" << *Scalar << ".\n");
2718 DEBUG(dbgs() << "SLP: Optimizing " << GatherSeq.size()
2805 BoUpSLP *SLP) {
2814 DEBUG(dbgs() << "SLP: bundle: " << *VL[0] << "\n");
2831 DEBUG(dbgs() << "SLP: reset schedule because " << *BundleMember
2866 DEBUG(dbgs() << "SLP: try schedule bundle " << *Bundle << " in block "
2869 calculateDependencies(Bundle, true, SLP);
2896 DEBUG(dbgs() << "SLP: cancel scheduling of " << *Bundle << "\n");
2929 DEBUG(dbgs() << "SLP: initialize schedule region to " << *I << "\n");
2940 DEBUG(dbgs() << "SLP: exceeded schedule region size limit\n");
2948 DEBUG(dbgs() << "SLP: extend schedule region start to " << *I << "\n");
2959 DEBUG(dbgs() << "SLP: extend schedule region end to " << *I << "\n");
3012 BoUpSLP *SLP) {
3027 DEBUG(dbgs() << "SLP: update deps of " << *BundleMember << "\n");
3058 MemoryLocation SrcLoc = getLocation(SrcInst, SLP->AA);
3068 // SLP->isAliased (which is the expensive part in this loop).
3076 SLP->isAliased(SrcLoc, SrcInst, DepDest->Inst)))) {
3118 DEBUG(dbgs() << "SLP: gets ready on update: " << *SD->Inst << "\n");
3140 DEBUG(dbgs() << "SLP: schedule block " << BS->BB->getName() << "\n");
3530 DEBUG(dbgs() << "SLP: Analyzing blocks in " << F.getName() << ".\n");
3532 // Use the bottom up slp vectorizer to construct chains that start with
3545 DEBUG(dbgs() << "SLP: Found stores for " << Stores.size()
3557 DEBUG(dbgs() << "SLP: Found GEPs for " << GEPs.size()
3565 DEBUG(dbgs() << "SLP: vectorized \"" << F.getName() << "\"\n");
3586 DEBUG(dbgs() << "SLP: Analyzing a store chain of length " << ChainLen
3607 DEBUG(dbgs() << "SLP: Analyzing " << VF << " stores at offset " << i
3616 DEBUG(dbgs() << "SLP: Found cost=" << Cost << " for VF=" << VF << "\n");
3618 DEBUG(dbgs() << "SLP: Decided to vectorize cost=" << Cost << "\n");
3648 // candidate create the best chance to find slp vectorization opportunity.
3749 DEBUG(dbgs() << "SLP: Vectorizing a list of length = " << VL.size() << ".\n");
3792 DEBUG(dbgs() << "SLP: Analyzing " << OpsWidth << " operations "
3813 DEBUG(dbgs() << "SLP: Vectorizing list at cost:" << Cost << ".\n");
4089 DEBUG(dbgs() << "SLP: Vectorizing horizontal reduction at cost:" << Cost
4144 DEBUG(dbgs() << "SLP: Adding cost " << VecReduxCost - ScalarReduxCost
4370 DEBUG(errs() << "SLP: Trying to vectorize starting at PHIs (" << NumElts << ")\n");
4449 DEBUG(dbgs() << "SLP: Found a return to vectorize.\n");
4515 DEBUG(dbgs() << "SLP: store of array mappable to vector: " << *SI << "\n");
4539 DEBUG(dbgs() << "SLP: Analyzing a getelementptr list of length "
4621 DEBUG(dbgs() << "SLP: Analyzing a store chain of length "
4638 static const char lv_name[] = "SLP Vectorizer";