145d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar//===-- CGBuilder.h - Choose IRBuilder implementation ----------*- C++ -*-===// 245d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar// 345d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar// The LLVM Compiler Infrastructure 445d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar// 545d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar// This file is distributed under the University of Illinois Open Source 645d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar// License. See LICENSE.TXT for details. 745d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar// 845d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar//===----------------------------------------------------------------------===// 945d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar 1045d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar#ifndef CLANG_CODEGEN_CGBUILDER_H 1145d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar#define CLANG_CODEGEN_CGBUILDER_H 1245d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar 133b844ba7d5be205a9b4f5f0b0d1b7978977f4b8cChandler Carruth#include "llvm/IR/IRBuilder.h" 1445d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar 1545d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbarnamespace clang { 1645d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbarnamespace CodeGen { 17c7d209fb2442a63d328a25e1036b4726b0c4a49dJohn McCall 186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass CodeGenFunction; 196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 206bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines/// \brief This is an IRBuilder insertion helper that forwards to 216bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines/// CodeGenFunction::InsertHelper, which adds nesessary metadata to 226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines/// instructions. 236bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate <bool PreserveNames> 246bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesclass CGBuilderInserter 256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines : protected llvm::IRBuilderDefaultInserter<PreserveNames> { 266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinespublic: 276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines CGBuilderInserter() : CGF(nullptr) {} 286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines explicit CGBuilderInserter(CodeGenFunction *CGF) : CGF(CGF) {} 296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesprotected: 316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines /// \brief This forwards to CodeGenFunction::InsertHelper. 326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void InsertHelper(llvm::Instruction *I, const llvm::Twine &Name, 336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines llvm::BasicBlock *BB, 346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines llvm::BasicBlock::iterator InsertPt) const; 356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesprivate: 366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines void operator=(const CGBuilderInserter &) LLVM_DELETED_FUNCTION; 376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines CodeGenFunction *CGF; 396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines}; 406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 41c7d209fb2442a63d328a25e1036b4726b0c4a49dJohn McCall// Don't preserve names on values in an optimized build. 4229ea6729155c759836be4b5453bee9ef8e1e97eeDaniel Dunbar#ifdef NDEBUG 436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define PreserveNames false 4429ea6729155c759836be4b5453bee9ef8e1e97eeDaniel Dunbar#else 456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define PreserveNames true 4629ea6729155c759836be4b5453bee9ef8e1e97eeDaniel Dunbar#endif 476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestypedef CGBuilderInserter<PreserveNames> CGBuilderInserterTy; 486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestypedef llvm::IRBuilder<PreserveNames, llvm::ConstantFolder, 496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines CGBuilderInserterTy> CGBuilderTy; 506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#undef PreserveNames 51c7d209fb2442a63d328a25e1036b4726b0c4a49dJohn McCall 5245d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar} // end namespace CodeGen 5345d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar} // end namespace clang 5445d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar 5545d196b8387dcefc4df26cda114fa34c6528e928Daniel Dunbar#endif 56