diff options
author | Alexander Musman <alexander.musman@gmail.com> | 2014-05-22 08:54:05 +0000 |
---|---|---|
committer | Alexander Musman <alexander.musman@gmail.com> | 2014-05-22 08:54:05 +0000 |
commit | b725d270dbf2b9d7e5dc8099c243a19c6fbb4849 (patch) | |
tree | 60f8fb7171f14f73ac81f4793a73e8bc4b7e1f08 /lib/CodeGen/CGBuilder.h | |
parent | 5da13c6a4f668a84fad68558ad05c67501fbadd5 (diff) |
This patch adds a helper class (CGLoopInfo) for marking memory instructions with llvm.mem.parallel_loop_access metadata.
It also adds a simple initial version of codegen for pragma omp simd (it will change in the future to support all the clauses).
Differential revision: http://reviews.llvm.org/D3644
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209411 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGBuilder.h')
-rw-r--r-- | lib/CodeGen/CGBuilder.h | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/lib/CodeGen/CGBuilder.h b/lib/CodeGen/CGBuilder.h index fd21e7e26a..f113b970b7 100644 --- a/lib/CodeGen/CGBuilder.h +++ b/lib/CodeGen/CGBuilder.h @@ -15,12 +15,39 @@ namespace clang { namespace CodeGen { +class CodeGenFunction; + +/// \brief This is an IRBuilder insertion helper that forwards to +/// CodeGenFunction::InsertHelper, which adds nesessary metadata to +/// instructions. +template <bool PreserveNames> +class CGBuilderInserter + : protected llvm::IRBuilderDefaultInserter<PreserveNames> { +public: + CGBuilderInserter() : CGF(nullptr) {} + explicit CGBuilderInserter(CodeGenFunction *CGF) : CGF(CGF) {} + +protected: + /// \brief This forwards to CodeGenFunction::InsertHelper. + void InsertHelper(llvm::Instruction *I, const llvm::Twine &Name, + llvm::BasicBlock *BB, + llvm::BasicBlock::iterator InsertPt) const; +private: + void operator=(const CGBuilderInserter &) LLVM_DELETED_FUNCTION; + + CodeGenFunction *CGF; +}; + // Don't preserve names on values in an optimized build. #ifdef NDEBUG -typedef llvm::IRBuilder<false> CGBuilderTy; +#define PreserveNames false #else -typedef llvm::IRBuilder<> CGBuilderTy; +#define PreserveNames true #endif +typedef CGBuilderInserter<PreserveNames> CGBuilderInserterTy; +typedef llvm::IRBuilder<PreserveNames, llvm::ConstantFolder, + CGBuilderInserterTy> CGBuilderTy; +#undef PreserveNames } // end namespace CodeGen } // end namespace clang |