diff options
Diffstat (limited to 'polly/lib/CodeGen/PPCGCodeGeneration.cpp')
| -rw-r--r-- | polly/lib/CodeGen/PPCGCodeGeneration.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/polly/lib/CodeGen/PPCGCodeGeneration.cpp b/polly/lib/CodeGen/PPCGCodeGeneration.cpp new file mode 100644 index 00000000000..8fa3b7a2843 --- /dev/null +++ b/polly/lib/CodeGen/PPCGCodeGeneration.cpp @@ -0,0 +1,82 @@ +//===------ PPCGCodeGeneration.cpp - Polly Accelerator Code Generation. ---===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// Take a scop created by ScopInfo and map it to GPU code using the ppcg +// GPU mapping strategy. +// +//===----------------------------------------------------------------------===// + +#include "polly/CodeGen/IslNodeBuilder.h" +#include "polly/DependenceInfo.h" +#include "polly/LinkAllPasses.h" +#include "polly/ScopInfo.h" +#include "llvm/Analysis/AliasAnalysis.h" +#include "llvm/Analysis/BasicAliasAnalysis.h" +#include "llvm/Analysis/GlobalsModRef.h" +#include "llvm/Analysis/PostDominators.h" +#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h" + +#include "llvm/Support/Debug.h" + +using namespace polly; +using namespace llvm; + +#define DEBUG_TYPE "polly-codegen-ppcg" + +namespace { +class PPCGCodeGeneration : public ScopPass { +public: + static char ID; + + PPCGCodeGeneration() : ScopPass(ID) {} + + bool runOnScop(Scop &S) override { return true; } + + void printScop(raw_ostream &, Scop &) const override {} + + void getAnalysisUsage(AnalysisUsage &AU) const override { + AU.addRequired<DominatorTreeWrapperPass>(); + AU.addRequired<RegionInfoPass>(); + AU.addRequired<ScalarEvolutionWrapperPass>(); + AU.addRequired<ScopDetection>(); + AU.addRequired<ScopInfoRegionPass>(); + AU.addRequired<LoopInfoWrapperPass>(); + + AU.addPreserved<AAResultsWrapperPass>(); + AU.addPreserved<BasicAAWrapperPass>(); + AU.addPreserved<LoopInfoWrapperPass>(); + AU.addPreserved<DominatorTreeWrapperPass>(); + AU.addPreserved<GlobalsAAWrapperPass>(); + AU.addPreserved<PostDominatorTreeWrapperPass>(); + AU.addPreserved<ScopDetection>(); + AU.addPreserved<ScalarEvolutionWrapperPass>(); + AU.addPreserved<SCEVAAWrapperPass>(); + + // FIXME: We do not yet add regions for the newly generated code to the + // region tree. + AU.addPreserved<RegionInfoPass>(); + AU.addPreserved<ScopInfoRegionPass>(); + } +}; +} + +char PPCGCodeGeneration::ID = 1; + +Pass *polly::createPPCGCodeGenerationPass() { return new PPCGCodeGeneration(); } + +INITIALIZE_PASS_BEGIN(PPCGCodeGeneration, "polly-codegen-ppcg", + "Polly - Apply PPCG translation to SCOP", false, false) +INITIALIZE_PASS_DEPENDENCY(DependenceInfo); +INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass); +INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass); +INITIALIZE_PASS_DEPENDENCY(RegionInfoPass); +INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass); +INITIALIZE_PASS_DEPENDENCY(ScopDetection); +INITIALIZE_PASS_END(PPCGCodeGeneration, "polly-codegen-ppcg", + "Polly - Apply PPCG translation to SCOP", false, false) |

