diff options
author | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2015-10-07 20:15:56 +0000 |
---|---|---|
committer | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2015-10-07 20:15:56 +0000 |
commit | 521dd5842f8d8d2e1b96dc16d0af1dcb333e806c (patch) | |
tree | 3f95f4546e3375cfb5ed9c7924c9ec9660f2e45e | |
parent | 512011c3f03785eb60b65afe53dd06d935b40483 (diff) | |
download | bcm5719-llvm-521dd5842f8d8d2e1b96dc16d0af1dcb333e806c.tar.gz bcm5719-llvm-521dd5842f8d8d2e1b96dc16d0af1dcb333e806c.zip |
Move the ValueMapT declaration out of BlockGenerator
Value maps are created and used in many places and it is not always
possible to include CodeGen/Blockgenerators.h. To this end, ValueMapT
now lives in the ScopHelper.h which does not have any dependences itself.
This patch also replaces uses of different other value map types with
the ValueMapT.
llvm-svn: 249606
-rw-r--r-- | polly/include/polly/CodeGen/BlockGenerators.h | 6 | ||||
-rw-r--r-- | polly/include/polly/CodeGen/IslExprBuilder.h | 8 | ||||
-rw-r--r-- | polly/include/polly/CodeGen/IslNodeBuilder.h | 4 | ||||
-rw-r--r-- | polly/include/polly/CodeGen/LoopGenerators.h | 11 | ||||
-rw-r--r-- | polly/include/polly/Support/ScopHelper.h | 5 | ||||
-rw-r--r-- | polly/lib/CodeGen/IslNodeBuilder.cpp | 9 | ||||
-rw-r--r-- | polly/lib/CodeGen/LoopGenerators.cpp | 8 |
7 files changed, 25 insertions, 26 deletions
diff --git a/polly/include/polly/CodeGen/BlockGenerators.h b/polly/include/polly/CodeGen/BlockGenerators.h index b8c66a752ea..52de37e827f 100644 --- a/polly/include/polly/CodeGen/BlockGenerators.h +++ b/polly/include/polly/CodeGen/BlockGenerators.h @@ -60,6 +60,8 @@ bool isIgnoredIntrinsic(const llvm::Value *V); /// @brief Generate a new basic block for a polyhedral statement. class BlockGenerator { public: + typedef llvm::SmallVector<ValueMapT, 8> VectorValueMapT; + /// @brief Map types to resolve scalar dependences. /// ///@{ @@ -67,10 +69,6 @@ public: /// @see The ScalarMap and PHIOpMap member. using ScalarAllocaMapTy = DenseMap<AssertingVH<Value>, AssertingVH<Value>>; - typedef llvm::DenseMap<AssertingVH<llvm::Value>, AssertingVH<llvm::Value>> - ValueMapT; - typedef llvm::SmallVector<ValueMapT, 8> VectorValueMapT; - /// @brief Simple vector of instructions to store escape users. using EscapeUserVectorTy = SmallVector<Instruction *, 4>; diff --git a/polly/include/polly/CodeGen/IslExprBuilder.h b/polly/include/polly/CodeGen/IslExprBuilder.h index a5325606617..acbbe03bfc2 100644 --- a/polly/include/polly/CodeGen/IslExprBuilder.h +++ b/polly/include/polly/CodeGen/IslExprBuilder.h @@ -12,8 +12,9 @@ #ifndef POLLY_ISL_EXPR_BUILDER_H #define POLLY_ISL_EXPR_BUILDER_H -#include "polly/CodeGen/BlockGenerators.h" #include "polly/CodeGen/IRBuilder.h" +#include "polly/Support/ScopHelper.h" + #include "llvm/ADT/MapVector.h" #include "isl/ast.h" @@ -82,7 +83,6 @@ class IslExprBuilder { public: /// @brief A map from isl_ids to llvm::Values. typedef llvm::MapVector<isl_id *, llvm::AssertingVH<llvm::Value>> IDToValueTy; - typedef BlockGenerator::ValueMapT ValueToValueMap; /// @brief Construct an IslExprBuilder. /// @@ -95,7 +95,7 @@ public: /// specifies the LLVM-IR Values that correspond to these /// parameters and variables. IslExprBuilder(Scop &S, PollyIRBuilder &Builder, IDToValueTy &IDToValue, - ValueToValueMap &GlobalMap, const llvm::DataLayout &DL, + ValueMapT &GlobalMap, const llvm::DataLayout &DL, llvm::ScalarEvolution &SE, llvm::DominatorTree &DT, llvm::LoopInfo &LI) : S(S), Builder(Builder), IDToValue(IDToValue), GlobalMap(GlobalMap), @@ -130,7 +130,7 @@ private: PollyIRBuilder &Builder; IDToValueTy &IDToValue; - ValueToValueMap &GlobalMap; + ValueMapT &GlobalMap; const llvm::DataLayout &DL; llvm::ScalarEvolution &SE; diff --git a/polly/include/polly/CodeGen/IslNodeBuilder.h b/polly/include/polly/CodeGen/IslNodeBuilder.h index c6ee707046e..0fd3129bcdd 100644 --- a/polly/include/polly/CodeGen/IslNodeBuilder.h +++ b/polly/include/polly/CodeGen/IslNodeBuilder.h @@ -115,7 +115,7 @@ protected: /// /// When generating new code for a ScopStmt this map is used to map certain /// llvm::Values to new llvm::Values. - polly::BlockGenerator::ValueMapT ValueMap; + ValueMapT ValueMap; /// @brief Materialize code for @p Id if it was not done before. void materializeValue(__isl_take isl_id *Id); @@ -191,7 +191,7 @@ protected: /// pass down certain values. /// /// @param NewValues A map that maps certain llvm::Values to new llvm::Values. - void updateValues(ParallelLoopGenerator::ValueToValueMapTy &NewValues); + void updateValues(ValueMapT &NewValues); /// @brief Generate code for a marker now. /// diff --git a/polly/include/polly/CodeGen/LoopGenerators.h b/polly/include/polly/CodeGen/LoopGenerators.h index a0fbf7148e6..10e95905614 100644 --- a/polly/include/polly/CodeGen/LoopGenerators.h +++ b/polly/include/polly/CodeGen/LoopGenerators.h @@ -15,6 +15,8 @@ #define POLLY_LOOP_GENERATORS_H #include "polly/CodeGen/IRBuilder.h" +#include "polly/Support/ScopHelper.h" + #include "llvm/ADT/SetVector.h" #include "llvm/IR/ValueMap.h" @@ -96,9 +98,6 @@ Value *createLoop(Value *LowerBound, Value *UpperBound, Value *Stride, /// } class ParallelLoopGenerator { public: - using ValueToValueMapTy = - llvm::DenseMap<AssertingVH<Value>, AssertingVH<Value>>; - /// @brief Create a parallel loop generator for the current function. ParallelLoopGenerator(PollyIRBuilder &Builder, Pass *P, LoopInfo &LI, DominatorTree &DT, const DataLayout &DL) @@ -123,7 +122,7 @@ public: /// /// @return The newly created induction variable for this loop. Value *createParallelLoop(Value *LB, Value *UB, Value *Stride, - SetVector<Value *> &Values, ValueToValueMapTy &VMap, + SetVector<Value *> &Values, ValueMapT &VMap, BasicBlock::iterator *LoopBody); private: @@ -190,7 +189,7 @@ private: /// @param VMap A map to associate every element of @p Values with the /// new llvm value loaded from the @p Struct. void extractValuesFromStruct(SetVector<Value *> Values, Type *Ty, - Value *Struct, ValueToValueMapTy &VMap); + Value *Struct, ValueMapT &VMap); /// @brief Create the definition of the parallel subfunction. Function *createSubFnDefinition(); @@ -207,7 +206,7 @@ private: /// /// @return The newly created induction variable. Value *createSubFn(Value *Stride, AllocaInst *Struct, - SetVector<Value *> UsedValues, ValueToValueMapTy &VMap, + SetVector<Value *> UsedValues, ValueMapT &VMap, Function **SubFn); }; } // end namespace polly diff --git a/polly/include/polly/Support/ScopHelper.h b/polly/include/polly/Support/ScopHelper.h index 95762fe6662..cd582d8fe3e 100644 --- a/polly/include/polly/Support/ScopHelper.h +++ b/polly/include/polly/Support/ScopHelper.h @@ -15,6 +15,7 @@ #define POLLY_SUPPORT_IRHELPER_H #include "llvm/ADT/DenseMap.h" +#include "llvm/IR/ValueHandle.h" #include "llvm/Analysis/AliasAnalysis.h" namespace llvm { @@ -40,6 +41,10 @@ class ScalarEvolution; namespace polly { class Scop; +/// @brief Type to remap values. +using ValueMapT = llvm::DenseMap<llvm::AssertingVH<llvm::Value>, + llvm::AssertingVH<llvm::Value>>; + /// Temporary Hack for extended regiontree. /// /// @brief Cast the region to loop. diff --git a/polly/lib/CodeGen/IslNodeBuilder.cpp b/polly/lib/CodeGen/IslNodeBuilder.cpp index a660328190e..910a3bee3cb 100644 --- a/polly/lib/CodeGen/IslNodeBuilder.cpp +++ b/polly/lib/CodeGen/IslNodeBuilder.cpp @@ -175,7 +175,7 @@ struct SubtreeReferences { LoopInfo &LI; ScalarEvolution &SE; Region &R; - polly::BlockGenerator::ValueMapT &GlobalMap; + ValueMapT &GlobalMap; SetVector<Value *> &Values; SetVector<const SCEV *> &SCEVs; BlockGenerator &BlockGen; @@ -311,8 +311,7 @@ void IslNodeBuilder::getReferencesInSubtree(__isl_keep isl_ast_node *For, }); } -void IslNodeBuilder::updateValues( - ParallelLoopGenerator::ValueToValueMapTy &NewValues) { +void IslNodeBuilder::updateValues(ValueMapT &NewValues) { SmallPtrSet<Value *, 5> Inserted; for (const auto &I : IDToValue) { @@ -592,7 +591,7 @@ void IslNodeBuilder::createForParallel(__isl_take isl_ast_node *For) { SubtreeValues.insert(V); } - ParallelLoopGenerator::ValueToValueMapTy NewValues; + ValueMapT NewValues; ParallelLoopGenerator ParallelLoopGen(Builder, P, LI, DT, DL); IV = ParallelLoopGen.createParallelLoop(ValueLB, ValueUB, ValueInc, @@ -607,7 +606,7 @@ void IslNodeBuilder::createForParallel(__isl_take isl_ast_node *For) { updateValues(NewValues); IDToValue[IteratorID] = IV; - ParallelLoopGenerator::ValueToValueMapTy NewValuesReverse; + ValueMapT NewValuesReverse; for (auto P : NewValues) NewValuesReverse[P.second] = P.first; diff --git a/polly/lib/CodeGen/LoopGenerators.cpp b/polly/lib/CodeGen/LoopGenerators.cpp index 4cc7a6c3f9e..74f19a8cffa 100644 --- a/polly/lib/CodeGen/LoopGenerators.cpp +++ b/polly/lib/CodeGen/LoopGenerators.cpp @@ -146,7 +146,7 @@ Value *polly::createLoop(Value *LB, Value *UB, Value *Stride, Value *ParallelLoopGenerator::createParallelLoop( Value *LB, Value *UB, Value *Stride, SetVector<Value *> &UsedValues, - ValueToValueMapTy &Map, BasicBlock::iterator *LoopBody) { + ValueMapT &Map, BasicBlock::iterator *LoopBody) { Function *SubFn; AllocaInst *Struct = storeValuesIntoStruct(UsedValues); @@ -305,8 +305,7 @@ ParallelLoopGenerator::storeValuesIntoStruct(SetVector<Value *> &Values) { } void ParallelLoopGenerator::extractValuesFromStruct( - SetVector<Value *> OldValues, Type *Ty, Value *Struct, - ValueToValueMapTy &Map) { + SetVector<Value *> OldValues, Type *Ty, Value *Struct, ValueMapT &Map) { for (unsigned i = 0; i < OldValues.size(); i++) { Value *Address = Builder.CreateStructGEP(Ty, Struct, i); Value *NewValue = Builder.CreateLoad(Address); @@ -317,8 +316,7 @@ void ParallelLoopGenerator::extractValuesFromStruct( Value *ParallelLoopGenerator::createSubFn(Value *Stride, AllocaInst *StructData, SetVector<Value *> Data, - ValueToValueMapTy &Map, - Function **SubFnPtr) { + ValueMapT &Map, Function **SubFnPtr) { BasicBlock *PrevBB, *HeaderBB, *ExitBB, *CheckNextBB, *PreHeaderBB, *AfterBB; Value *LBPtr, *UBPtr, *UserContext, *Ret1, *HasNextSchedule, *LB, *UB, *IV; Function *SubFn = createSubFnDefinition(); |