diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/CodeGen/CGLoopInfo.h')
-rw-r--r-- | contrib/llvm/tools/clang/lib/CodeGen/CGLoopInfo.h | 55 |
1 files changed, 37 insertions, 18 deletions
diff --git a/contrib/llvm/tools/clang/lib/CodeGen/CGLoopInfo.h b/contrib/llvm/tools/clang/lib/CodeGen/CGLoopInfo.h index 2249937..ec33906 100644 --- a/contrib/llvm/tools/clang/lib/CodeGen/CGLoopInfo.h +++ b/contrib/llvm/tools/clang/lib/CodeGen/CGLoopInfo.h @@ -29,6 +29,7 @@ class MDNode; namespace clang { class Attr; +class ASTContext; namespace CodeGen { /// \brief Attributes that may be specified on loops. @@ -39,17 +40,23 @@ struct LoopAttributes { /// \brief Generate llvm.loop.parallel metadata for loads and stores. bool IsParallel; - /// \brief Values of llvm.loop.vectorize.enable metadata. - enum LVEnableState { VecUnspecified, VecEnable, VecDisable }; + /// \brief State of loop vectorization or unrolling. + enum LVEnableState { Unspecified, Enable, Disable, Full }; - /// \brief llvm.loop.vectorize.enable - LVEnableState VectorizerEnable; + /// \brief Value for llvm.loop.vectorize.enable metadata. + LVEnableState VectorizeEnable; - /// \brief llvm.loop.vectorize.width - unsigned VectorizerWidth; + /// \brief Value for llvm.loop.unroll.* metadata (enable, disable, or full). + LVEnableState UnrollEnable; - /// \brief llvm.loop.interleave.count - unsigned VectorizerUnroll; + /// \brief Value for llvm.loop.vectorize.width metadata. + unsigned VectorizeWidth; + + /// \brief Value for llvm.loop.interleave.count metadata. + unsigned InterleaveCount; + + /// \brief llvm.unroll. + unsigned UnrollCount; }; /// \brief Information used when generating a structured loop. @@ -88,8 +95,12 @@ public: /// \brief Begin a new structured loop. The set of staged attributes will be /// applied to the loop and then cleared. - void push(llvm::BasicBlock *Header, - llvm::ArrayRef<const Attr *> Attrs = llvm::None); + void push(llvm::BasicBlock *Header); + + /// \brief Begin a new structured loop. Stage attributes from the Attrs list. + /// The staged attributes are applied to the loop and then cleared. + void push(llvm::BasicBlock *Header, clang::ASTContext &Ctx, + llvm::ArrayRef<const Attr *> Attrs); /// \brief End the current loop. void pop(); @@ -109,17 +120,25 @@ public: /// \brief Set the next pushed loop as parallel. void setParallel(bool Enable = true) { StagedAttrs.IsParallel = Enable; } - /// \brief Set the next pushed loop 'vectorizer.enable' - void setVectorizerEnable(bool Enable = true) { - StagedAttrs.VectorizerEnable = - Enable ? LoopAttributes::VecEnable : LoopAttributes::VecDisable; + /// \brief Set the next pushed loop 'vectorize.enable' + void setVectorizeEnable(bool Enable = true) { + StagedAttrs.VectorizeEnable = + Enable ? LoopAttributes::Enable : LoopAttributes::Disable; } - /// \brief Set the vectorizer width for the next loop pushed. - void setVectorizerWidth(unsigned W) { StagedAttrs.VectorizerWidth = W; } + /// \brief Set the next pushed loop unroll state. + void setUnrollState(const LoopAttributes::LVEnableState &State) { + StagedAttrs.UnrollEnable = State; + } + + /// \brief Set the vectorize width for the next loop pushed. + void setVectorizeWidth(unsigned W) { StagedAttrs.VectorizeWidth = W; } + + /// \brief Set the interleave count for the next loop pushed. + void setInterleaveCount(unsigned C) { StagedAttrs.InterleaveCount = C; } - /// \brief Set the vectorizer unroll for the next loop pushed. - void setVectorizerUnroll(unsigned U) { StagedAttrs.VectorizerUnroll = U; } + /// \brief Set the unroll count for the next loop pushed. + void setUnrollCount(unsigned C) { StagedAttrs.UnrollCount = C; } private: /// \brief Returns true if there is LoopInfo on the stack. |