#include "polly/ManualOptimizer.h"
#include "polly/DependenceInfo.h"
#include "polly/Options.h"
#include "polly/ScheduleTreeTransform.h"
#include "polly/Support/ScopHelper.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/IR/Metadata.h"
#include "llvm/Transforms/Utils/LoopUtils.h"
#include <optional>
#include "polly/Support/PollyDebug.h"
#define DEBUG_TYPE …
usingnamespacepolly;
usingnamespacellvm;
namespace {
static cl::opt<bool> IgnoreDepcheck(
"polly-pragma-ignore-depcheck",
cl::desc("Skip the dependency check for pragma-based transformations"),
cl::cat(PollyCategory));
static TransformationMode hasUnrollTransformation(MDNode *LoopID) { … }
static DebugLoc findFirstDebugLoc(MDNode *MD) { … }
static DebugLoc findTransformationDebugLoc(MDNode *LoopMD, StringRef Name) { … }
static isl::schedule applyLoopUnroll(MDNode *LoopMD,
isl::schedule_node BandToUnroll) { … }
static isl::schedule applyLoopFission(MDNode *LoopMD,
isl::schedule_node BandToFission) { … }
static auto getLoopMDProps(MDNode *LoopMD) { … }
class SearchTransformVisitor final
: public RecursiveScheduleTreeVisitor<SearchTransformVisitor> { … };
}
isl::schedule
polly::applyManualTransformations(Scop *S, isl::schedule Sched,
const Dependences &D,
OptimizationRemarkEmitter *ORE) { … }