forked from OSchip/llvm-project
56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
//===-- CGBuilder.h - Choose IRBuilder implementation ----------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H
|
|
#define LLVM_CLANG_LIB_CODEGEN_CGBUILDER_H
|
|
|
|
#include "llvm/IR/IRBuilder.h"
|
|
|
|
namespace clang {
|
|
namespace CodeGen {
|
|
|
|
class CodeGenFunction;
|
|
|
|
/// \brief This is an IRBuilder insertion helper that forwards to
|
|
/// CodeGenFunction::InsertHelper, which adds necessary 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 &) = delete;
|
|
|
|
CodeGenFunction *CGF;
|
|
};
|
|
|
|
// Don't preserve names on values in an optimized build.
|
|
#ifdef NDEBUG
|
|
#define PreserveNames false
|
|
#else
|
|
#define PreserveNames true
|
|
#endif
|
|
typedef CGBuilderInserter<PreserveNames> CGBuilderInserterTy;
|
|
typedef llvm::IRBuilder<PreserveNames, llvm::ConstantFolder,
|
|
CGBuilderInserterTy> CGBuilderTy;
|
|
#undef PreserveNames
|
|
|
|
} // end namespace CodeGen
|
|
} // end namespace clang
|
|
|
|
#endif
|