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 | 515ad8c490582d9b3b71274ed9255dc4a23c4610 (patch) | |
tree | 1e04ab0b2131931f706383edba46261e93c58fc4 /clang/lib/CodeGen/CodeGenFunction.cpp | |
parent | 5f3ea477cf3b48710a5ef839624606311f0c4ab7 (diff) | |
download | bcm5719-llvm-515ad8c490582d9b3b71274ed9255dc4a23c4610.tar.gz bcm5719-llvm-515ad8c490582d9b3b71274ed9255dc4a23c4610.zip |
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
llvm-svn: 209411
Diffstat (limited to 'clang/lib/CodeGen/CodeGenFunction.cpp')
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index 1369c5786a2..7de619e9158 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -35,7 +35,8 @@ using namespace CodeGen; CodeGenFunction::CodeGenFunction(CodeGenModule &cgm, bool suppressNewContext) : CodeGenTypeCache(cgm), CGM(cgm), Target(cgm.getTarget()), - Builder(cgm.getModule().getContext()), CapturedStmtInfo(nullptr), + Builder(cgm.getModule().getContext(), llvm::ConstantFolder(), + CGBuilderInserterTy(this)), CapturedStmtInfo(nullptr), SanitizePerformTypeCheck(CGM.getSanOpts().Null | CGM.getSanOpts().Alignment | CGM.getSanOpts().ObjectSize | @@ -1644,3 +1645,30 @@ llvm::Value *CodeGenFunction::EmitFieldAnnotations(const FieldDecl *D, } CodeGenFunction::CGCapturedStmtInfo::~CGCapturedStmtInfo() { } + +void CodeGenFunction::InsertHelper(llvm::Instruction *I, + const llvm::Twine &Name, + llvm::BasicBlock *BB, + llvm::BasicBlock::iterator InsertPt) const { + LoopStack.InsertHelper(I); +} + +template <bool PreserveNames> +void CGBuilderInserter<PreserveNames>::InsertHelper( + llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB, + llvm::BasicBlock::iterator InsertPt) const { + llvm::IRBuilderDefaultInserter<PreserveNames>::InsertHelper(I, Name, BB, + InsertPt); + if (CGF) + CGF->InsertHelper(I, Name, BB, InsertPt); +} + +#ifdef NDEBUG +#define PreserveNames false +#else +#define PreserveNames true +#endif +template void CGBuilderInserter<PreserveNames>::InsertHelper( + llvm::Instruction *I, const llvm::Twine &Name, llvm::BasicBlock *BB, + llvm::BasicBlock::iterator InsertPt) const; +#undef PreserveNames |