forked from OSchip/llvm-project
71 lines
2.0 KiB
C++
71 lines
2.0 KiB
C++
//===------ DeLICM.cpp -----------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Undo the effect of Loop Invariant Code Motion (LICM) and
|
|
// GVN Partial Redundancy Elimination (PRE) on SCoP-level.
|
|
//
|
|
// Namely, remove register/scalar dependencies by mapping them back to array
|
|
// elements.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "polly/DeLICM.h"
|
|
#include "polly/ScopInfo.h"
|
|
#include "polly/ScopPass.h"
|
|
#define DEBUG_TYPE "polly-delicm"
|
|
|
|
using namespace polly;
|
|
using namespace llvm;
|
|
|
|
namespace {
|
|
|
|
class DeLICM : public ScopPass {
|
|
private:
|
|
DeLICM(const DeLICM &) = delete;
|
|
const DeLICM &operator=(const DeLICM &) = delete;
|
|
|
|
public:
|
|
static char ID;
|
|
explicit DeLICM() : ScopPass(ID) {}
|
|
|
|
virtual void getAnalysisUsage(AnalysisUsage &AU) const override {
|
|
AU.addRequiredTransitive<ScopInfoRegionPass>();
|
|
AU.setPreservesAll();
|
|
}
|
|
|
|
virtual bool runOnScop(Scop &S) override {
|
|
// Free resources for previous scop's computation, if not yet done.
|
|
releaseMemory();
|
|
|
|
// TODO: Run DeLICM algorithm
|
|
|
|
return false;
|
|
}
|
|
|
|
virtual void printScop(raw_ostream &OS, Scop &S) const override {
|
|
OS << "DeLICM result:\n";
|
|
// TODO: Print analysis results and performed transformation details
|
|
}
|
|
|
|
virtual void releaseMemory() override {
|
|
// TODO: Release resources (eg. shared_ptr to isl_ctx)
|
|
}
|
|
};
|
|
|
|
char DeLICM::ID;
|
|
} // anonymous namespace
|
|
|
|
Pass *polly::createDeLICMPass() { return new DeLICM(); }
|
|
|
|
INITIALIZE_PASS_BEGIN(DeLICM, "polly-delicm", "Polly - DeLICM/DePRE", false,
|
|
false)
|
|
INITIALIZE_PASS_DEPENDENCY(ScopInfoWrapperPass)
|
|
INITIALIZE_PASS_END(DeLICM, "polly-delicm", "Polly - DeLICM/DePRE", false,
|
|
false)
|