| //===------ 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) |