mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-20 16:17:38 +00:00
Rename getMaximumUnrollFactor -> getMaxInterleaveFactor; also rename option names controlling this variable.
"Unroll" is not the appropriate name for this variable. Clang already uses the term "interleave" in pragmas and metadata for this. Differential Revision: http://reviews.llvm.org/D5066 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@217528 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -108,8 +108,8 @@ VectorizationFactor("force-vector-width", cl::init(0), cl::Hidden,
|
||||
cl::desc("Sets the SIMD width. Zero is autoselect."));
|
||||
|
||||
static cl::opt<unsigned>
|
||||
VectorizationUnroll("force-vector-unroll", cl::init(0), cl::Hidden,
|
||||
cl::desc("Sets the vectorization unroll count. "
|
||||
VectorizationInterleave("force-vector-interleave", cl::init(0), cl::Hidden,
|
||||
cl::desc("Sets the vectorization interleave count. "
|
||||
"Zero is autoselect."));
|
||||
|
||||
static cl::opt<bool>
|
||||
@@ -157,17 +157,17 @@ static cl::opt<unsigned> ForceTargetNumVectorRegs(
|
||||
"force-target-num-vector-regs", cl::init(0), cl::Hidden,
|
||||
cl::desc("A flag that overrides the target's number of vector registers."));
|
||||
|
||||
/// Maximum vectorization unroll count.
|
||||
static const unsigned MaxUnrollFactor = 16;
|
||||
/// Maximum vectorization interleave count.
|
||||
static const unsigned MaxInterleaveFactor = 16;
|
||||
|
||||
static cl::opt<unsigned> ForceTargetMaxScalarUnrollFactor(
|
||||
"force-target-max-scalar-unroll", cl::init(0), cl::Hidden,
|
||||
cl::desc("A flag that overrides the target's max unroll factor for scalar "
|
||||
"loops."));
|
||||
static cl::opt<unsigned> ForceTargetMaxScalarInterleaveFactor(
|
||||
"force-target-max-scalar-interleave", cl::init(0), cl::Hidden,
|
||||
cl::desc("A flag that overrides the target's max interleave factor for "
|
||||
"scalar loops."));
|
||||
|
||||
static cl::opt<unsigned> ForceTargetMaxVectorUnrollFactor(
|
||||
"force-target-max-vector-unroll", cl::init(0), cl::Hidden,
|
||||
cl::desc("A flag that overrides the target's max unroll factor for "
|
||||
static cl::opt<unsigned> ForceTargetMaxVectorInterleaveFactor(
|
||||
"force-target-max-vector-interleave", cl::init(0), cl::Hidden,
|
||||
cl::desc("A flag that overrides the target's max interleave factor for "
|
||||
"vectorized loops."));
|
||||
|
||||
static cl::opt<unsigned> ForceTargetInstructionCost(
|
||||
@@ -1003,7 +1003,7 @@ class LoopVectorizeHints {
|
||||
case HK_WIDTH:
|
||||
return isPowerOf2_32(Val) && Val <= MaxVectorWidth;
|
||||
case HK_UNROLL:
|
||||
return isPowerOf2_32(Val) && Val <= MaxUnrollFactor;
|
||||
return isPowerOf2_32(Val) && Val <= MaxInterleaveFactor;
|
||||
case HK_FORCE:
|
||||
return (Val <= 1);
|
||||
}
|
||||
@@ -1013,8 +1013,8 @@ class LoopVectorizeHints {
|
||||
|
||||
/// Vectorization width.
|
||||
Hint Width;
|
||||
/// Vectorization unroll factor.
|
||||
Hint Unroll;
|
||||
/// Vectorization interleave factor.
|
||||
Hint Interleave;
|
||||
/// Vectorization forced
|
||||
Hint Force;
|
||||
/// Array to help iterating through all hints.
|
||||
@@ -1030,36 +1030,36 @@ public:
|
||||
FK_Enabled = 1, ///< Forcing enabled.
|
||||
};
|
||||
|
||||
LoopVectorizeHints(const Loop *L, bool DisableUnrolling)
|
||||
LoopVectorizeHints(const Loop *L, bool DisableInterleaving)
|
||||
: Width("vectorize.width", VectorizationFactor, HK_WIDTH),
|
||||
Unroll("interleave.count", DisableUnrolling, HK_UNROLL),
|
||||
Interleave("interleave.count", DisableInterleaving, HK_UNROLL),
|
||||
Force("vectorize.enable", FK_Undefined, HK_FORCE),
|
||||
TheLoop(L) {
|
||||
// FIXME: Move this up initialisation when MSVC requirement is 2013+
|
||||
Hints[0] = &Width;
|
||||
Hints[1] = &Unroll;
|
||||
Hints[1] = &Interleave;
|
||||
Hints[2] = &Force;
|
||||
|
||||
// Populate values with existing loop metadata.
|
||||
getHintsFromMetadata();
|
||||
|
||||
// force-vector-unroll overrides DisableUnrolling.
|
||||
if (VectorizationUnroll.getNumOccurrences() > 0)
|
||||
Unroll.Value = VectorizationUnroll;
|
||||
// force-vector-interleave overrides DisableInterleaving.
|
||||
if (VectorizationInterleave.getNumOccurrences() > 0)
|
||||
Interleave.Value = VectorizationInterleave;
|
||||
|
||||
DEBUG(if (DisableUnrolling && Unroll.Value == 1) dbgs()
|
||||
<< "LV: Unrolling disabled by the pass manager\n");
|
||||
DEBUG(if (DisableInterleaving && Interleave.Value == 1) dbgs()
|
||||
<< "LV: Interleaving disabled by the pass manager\n");
|
||||
}
|
||||
|
||||
/// Mark the loop L as already vectorized by setting the width to 1.
|
||||
void setAlreadyVectorized() {
|
||||
Width.Value = Unroll.Value = 1;
|
||||
Width.Value = Interleave.Value = 1;
|
||||
// FIXME: Change all lines below for this when we can use MSVC 2013+
|
||||
//writeHintsToMetadata({ Width, Unroll });
|
||||
std::vector<Hint> hints;
|
||||
hints.reserve(2);
|
||||
hints.emplace_back(Width);
|
||||
hints.emplace_back(Unroll);
|
||||
hints.emplace_back(Interleave);
|
||||
writeHintsToMetadata(std::move(hints));
|
||||
}
|
||||
|
||||
@@ -1074,8 +1074,8 @@ public:
|
||||
R << " (Force=true";
|
||||
if (Width.Value != 0)
|
||||
R << ", Vector Width=" << Width.Value;
|
||||
if (Unroll.Value != 0)
|
||||
R << ", Interleave Count=" << Unroll.Value;
|
||||
if (Interleave.Value != 0)
|
||||
R << ", Interleave Count=" << Interleave.Value;
|
||||
R << ")";
|
||||
}
|
||||
}
|
||||
@@ -1084,7 +1084,7 @@ public:
|
||||
}
|
||||
|
||||
unsigned getWidth() const { return Width.Value; }
|
||||
unsigned getUnroll() const { return Unroll.Value; }
|
||||
unsigned getInterleave() const { return Interleave.Value; }
|
||||
enum ForceKind getForce() const { return (ForceKind)Force.Value; }
|
||||
|
||||
private:
|
||||
@@ -1216,7 +1216,7 @@ static void emitMissedWarning(Function *F, Loop *L,
|
||||
emitLoopVectorizeWarning(
|
||||
F->getContext(), *F, L->getStartLoc(),
|
||||
"failed explicitly specified loop vectorization");
|
||||
else if (LH.getUnroll() != 1)
|
||||
else if (LH.getInterleave() != 1)
|
||||
emitLoopInterleaveWarning(
|
||||
F->getContext(), *F, L->getStartLoc(),
|
||||
"failed explicitly specified loop interleaving");
|
||||
@@ -1322,7 +1322,7 @@ struct LoopVectorize : public FunctionPass {
|
||||
: (Hints.getForce() == LoopVectorizeHints::FK_Enabled
|
||||
? "enabled"
|
||||
: "?")) << " width=" << Hints.getWidth()
|
||||
<< " unroll=" << Hints.getUnroll() << "\n");
|
||||
<< " unroll=" << Hints.getInterleave() << "\n");
|
||||
|
||||
// Function containing loop
|
||||
Function *F = L->getHeader()->getParent();
|
||||
@@ -1349,7 +1349,7 @@ struct LoopVectorize : public FunctionPass {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (Hints.getWidth() == 1 && Hints.getUnroll() == 1) {
|
||||
if (Hints.getWidth() == 1 && Hints.getInterleave() == 1) {
|
||||
DEBUG(dbgs() << "LV: Not vectorizing: Disabled/already vectorized.\n");
|
||||
emitOptimizationRemarkAnalysis(
|
||||
F->getContext(), DEBUG_TYPE, *F, L->getStartLoc(),
|
||||
@@ -4628,7 +4628,7 @@ bool MemoryDepChecker::isDependent(const MemAccessInfo &A, unsigned AIdx,
|
||||
|
||||
// Bail out early if passed-in parameters make vectorization not feasible.
|
||||
unsigned ForcedFactor = VectorizationFactor ? VectorizationFactor : 1;
|
||||
unsigned ForcedUnroll = VectorizationUnroll ? VectorizationUnroll : 1;
|
||||
unsigned ForcedUnroll = VectorizationInterleave ? VectorizationInterleave : 1;
|
||||
|
||||
// The distance must be bigger than the size needed for a vectorized version
|
||||
// of the operation and the size of the vectorized operation must not be
|
||||
@@ -5505,7 +5505,7 @@ LoopVectorizationCostModel::selectUnrollFactor(bool OptForSize,
|
||||
// to the increased register pressure.
|
||||
|
||||
// Use the user preference, unless 'auto' is selected.
|
||||
int UserUF = Hints->getUnroll();
|
||||
int UserUF = Hints->getInterleave();
|
||||
if (UserUF != 0)
|
||||
return UserUF;
|
||||
|
||||
@@ -5558,15 +5558,15 @@ LoopVectorizationCostModel::selectUnrollFactor(bool OptForSize,
|
||||
std::max(1U, (R.MaxLocalUsers - 1)));
|
||||
|
||||
// Clamp the unroll factor ranges to reasonable factors.
|
||||
unsigned MaxUnrollSize = TTI.getMaximumUnrollFactor();
|
||||
unsigned MaxInterleaveSize = TTI.getMaxInterleaveFactor();
|
||||
|
||||
// Check if the user has overridden the unroll max.
|
||||
if (VF == 1) {
|
||||
if (ForceTargetMaxScalarUnrollFactor.getNumOccurrences() > 0)
|
||||
MaxUnrollSize = ForceTargetMaxScalarUnrollFactor;
|
||||
if (ForceTargetMaxScalarInterleaveFactor.getNumOccurrences() > 0)
|
||||
MaxInterleaveSize = ForceTargetMaxScalarInterleaveFactor;
|
||||
} else {
|
||||
if (ForceTargetMaxVectorUnrollFactor.getNumOccurrences() > 0)
|
||||
MaxUnrollSize = ForceTargetMaxVectorUnrollFactor;
|
||||
if (ForceTargetMaxVectorInterleaveFactor.getNumOccurrences() > 0)
|
||||
MaxInterleaveSize = ForceTargetMaxVectorInterleaveFactor;
|
||||
}
|
||||
|
||||
// If we did not calculate the cost for VF (because the user selected the VF)
|
||||
@@ -5576,8 +5576,8 @@ LoopVectorizationCostModel::selectUnrollFactor(bool OptForSize,
|
||||
|
||||
// Clamp the calculated UF to be between the 1 and the max unroll factor
|
||||
// that the target allows.
|
||||
if (UF > MaxUnrollSize)
|
||||
UF = MaxUnrollSize;
|
||||
if (UF > MaxInterleaveSize)
|
||||
UF = MaxInterleaveSize;
|
||||
else if (UF < 1)
|
||||
UF = 1;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user