diff options
-rw-r--r-- | polly/include/polly/CodeGen/BlockGenerators.h | 18 | ||||
-rw-r--r-- | polly/lib/CodeGen/BlockGenerators.cpp | 23 |
2 files changed, 33 insertions, 8 deletions
diff --git a/polly/include/polly/CodeGen/BlockGenerators.h b/polly/include/polly/CodeGen/BlockGenerators.h index aac47fcb8c3..e6b4e6c7fbf 100644 --- a/polly/include/polly/CodeGen/BlockGenerators.h +++ b/polly/include/polly/CodeGen/BlockGenerators.h @@ -115,6 +115,24 @@ public: void copyStmt(ScopStmt &Stmt, ValueMapT &GlobalMap, LoopToScevMapT <S, isl_id_to_ast_expr *NewAccesses); + /// @brief Return the scalar alloca for @p ScalarBase + /// + /// If no alloca was mapped to @p ScalarBase a new one is created. + /// + /// @param ScalarBase The demoted scalar value. + /// + /// @returns The alloca for @p ScalarBase + AllocaInst *getOrCreateScalarAlloca(Value *ScalarBase); + + /// @brief Return the PHi-node alloca for @p ScalarBase + /// + /// If no alloca was mapped to @p ScalarBase a new one is created. + /// + /// @param ScalarBase The demoted scalar value. + /// + /// @returns The alloca for @p ScalarBase + AllocaInst *getOrCreatePHIAlloca(Value *ScalarBase); + /// @brief Finalize the code generation for the SCoP @p S. /// /// This will initialize and finalize the scalar variables we demoted during diff --git a/polly/lib/CodeGen/BlockGenerators.cpp b/polly/lib/CodeGen/BlockGenerators.cpp index 1b5e7ccd63d..9e2112ba45c 100644 --- a/polly/lib/CodeGen/BlockGenerators.cpp +++ b/polly/lib/CodeGen/BlockGenerators.cpp @@ -362,6 +362,14 @@ AllocaInst *BlockGenerator::getOrCreateAlloca(Value *ScalarBase, return Addr; } +AllocaInst *BlockGenerator::getOrCreateScalarAlloca(Value *ScalarBase) { + return getOrCreateAlloca(ScalarBase, ScalarMap, ".s2a"); +} + +AllocaInst *BlockGenerator::getOrCreatePHIAlloca(Value *ScalarBase) { + return getOrCreateAlloca(ScalarBase, PHIOpMap, ".phiops"); +} + void BlockGenerator::handleOutsideUsers(const Region &R, Instruction *Inst, Value *InstCopy) { // If there are escape users we get the alloca for this instruction and put @@ -422,9 +430,9 @@ void BlockGenerator::generateScalarLoads(ScopStmt &Stmt, auto Base = MA.getBaseAddr(); if (MA.getScopArrayInfo()->isPHI()) - Address = getOrCreateAlloca(Base, PHIOpMap, ".phiops"); + Address = getOrCreatePHIAlloca(Base); else - Address = getOrCreateAlloca(Base, ScalarMap, ".s2a"); + Address = getOrCreateScalarAlloca(Base); BBMap[Base] = Builder.CreateLoad(Address, Address->getName() + ".reload"); } @@ -487,9 +495,9 @@ void BlockGenerator::generateScalarStores(ScopStmt &Stmt, BasicBlock *BB, AllocaInst *Address = nullptr; if (MA->getScopArrayInfo()->isPHI()) - Address = getOrCreateAlloca(Base, PHIOpMap, ".phiops"); + Address = getOrCreatePHIAlloca(Base); else - Address = getOrCreateAlloca(Base, ScalarMap, ".s2a"); + Address = getOrCreateScalarAlloca(Base); Val = getNewScalarValue(Val, R, ScalarMap, BBMap, GlobalMap); Builder.CreateStore(Val, Address); @@ -1122,9 +1130,9 @@ void RegionGenerator::generateScalarStores(ScopStmt &Stmt, BasicBlock *BB, AllocaInst *ScalarAddr = nullptr; if (MA->getScopArrayInfo()->isPHI()) - ScalarAddr = getOrCreateAlloca(ScalarBase, PHIOpMap, ".phiops"); + ScalarAddr = getOrCreatePHIAlloca(ScalarBase); else - ScalarAddr = getOrCreateAlloca(ScalarBase, ScalarMap, ".s2a"); + ScalarAddr = getOrCreateScalarAlloca(ScalarBase); Val = getNewScalarValue(Val, R, ScalarMap, BBMap, GlobalMap); Builder.CreateStore(Val, ScalarAddr); @@ -1161,8 +1169,7 @@ void RegionGenerator::addOperandToPHI(ScopStmt &Stmt, const PHINode *PHI, if (PHICopy->getBasicBlockIndex(BBCopy) >= 0) return; - AllocaInst *PHIOpAddr = - getOrCreateAlloca(const_cast<PHINode *>(PHI), PHIOpMap, ".phiops"); + AllocaInst *PHIOpAddr = getOrCreatePHIAlloca(const_cast<PHINode *>(PHI)); OpCopy = new LoadInst(PHIOpAddr, PHIOpAddr->getName() + ".reload", BlockMap[IncomingBB]->getTerminator()); } |