blob: 6610659131f7edb85a0e4a45e1b77b78b8465869 [file] [log] [blame]
Daniel Dunbar45d196b2008-11-01 01:53:16 +00001//===-- CGBuilder.h - Choose IRBuilder implementation ----------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Stephen Hines176edba2014-12-01 14:53:08 -080010#ifndef LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H
11#define LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H
Daniel Dunbar45d196b2008-11-01 01:53:16 +000012
Chandler Carruth3b844ba2013-01-02 11:45:17 +000013#include "llvm/IR/IRBuilder.h"
Daniel Dunbar45d196b2008-11-01 01:53:16 +000014
15namespace clang {
16namespace CodeGen {
John McCallc7d209f2010-07-03 09:25:20 +000017
Stephen Hines6bcf27b2014-05-29 04:14:42 -070018class CodeGenFunction;
19
20/// \brief This is an IRBuilder insertion helper that forwards to
Stephen Hines176edba2014-12-01 14:53:08 -080021/// CodeGenFunction::InsertHelper, which adds necessary metadata to
Stephen Hines6bcf27b2014-05-29 04:14:42 -070022/// instructions.
23template <bool PreserveNames>
24class CGBuilderInserter
25 : protected llvm::IRBuilderDefaultInserter<PreserveNames> {
26public:
27 CGBuilderInserter() : CGF(nullptr) {}
28 explicit CGBuilderInserter(CodeGenFunction *CGF) : CGF(CGF) {}
29
30protected:
31 /// \brief This forwards to CodeGenFunction::InsertHelper.
32 void InsertHelper(llvm::Instruction *I, const llvm::Twine &Name,
33 llvm::BasicBlock *BB,
34 llvm::BasicBlock::iterator InsertPt) const;
35private:
Stephen Hines0e2c34f2015-03-23 12:09:02 -070036 void operator=(const CGBuilderInserter &) = delete;
Stephen Hines6bcf27b2014-05-29 04:14:42 -070037
38 CodeGenFunction *CGF;
39};
40
John McCallc7d209f2010-07-03 09:25:20 +000041// Don't preserve names on values in an optimized build.
Daniel Dunbar29ea6722008-11-12 00:01:12 +000042#ifdef NDEBUG
Stephen Hines6bcf27b2014-05-29 04:14:42 -070043#define PreserveNames false
Daniel Dunbar29ea6722008-11-12 00:01:12 +000044#else
Stephen Hines6bcf27b2014-05-29 04:14:42 -070045#define PreserveNames true
Daniel Dunbar29ea6722008-11-12 00:01:12 +000046#endif
Stephen Hines6bcf27b2014-05-29 04:14:42 -070047typedef CGBuilderInserter<PreserveNames> CGBuilderInserterTy;
48typedef llvm::IRBuilder<PreserveNames, llvm::ConstantFolder,
49 CGBuilderInserterTy> CGBuilderTy;
50#undef PreserveNames
John McCallc7d209f2010-07-03 09:25:20 +000051
Daniel Dunbar45d196b2008-11-01 01:53:16 +000052} // end namespace CodeGen
53} // end namespace clang
54
55#endif