class CGBuilderTy

Declaration

class CGBuilderTy : public IRBuilder { /* full declaration omitted */ };

Description

This provides a uniform API for creating instructions and inserting them into a basic block: either at the end of a BasicBlock, or at a specific iterator location in a block. Note that the builder does not expose the full generality of LLVM instructions. For access to extra instruction properties, use the mutators (e.g. setVolatile) on the instructions after they have been created. Convenience state exists to specify fast-math flags and fp-math tags. The first template argument specifies a class to use for creating constants. This defaults to creating minimally folded constants. The second template argument allows clients to specify custom insertion hooks that are called on every newly created insertion.

Declared at: clang/lib/CodeGen/CGBuilder.h:45

Inherits from: IRBuilder

Member Variables

private const clang::CodeGen::CodeGenTypeCache& TypeCache
Storing a reference to the type cache here makes it a lot easier to build natural-feeling, target-specific IR.

Method Overview

  • public CGBuilderTy(const clang::CodeGen::CodeGenTypeCache & TypeCache, llvm::LLVMContext & C, const llvm::ConstantFolder & F, const clang::CodeGen::CGBuilderInserterTy & Inserter)
  • public CGBuilderTy(const clang::CodeGen::CodeGenTypeCache & TypeCache, llvm::Instruction * I)
  • public CGBuilderTy(const clang::CodeGen::CodeGenTypeCache & TypeCache, llvm::BasicBlock * BB)
  • public CGBuilderTy(const clang::CodeGen::CodeGenTypeCache & TypeCache, llvm::LLVMContext & C)
  • public clang::CodeGen::Address CreateAddrSpaceCast(clang::CodeGen::Address Addr, llvm::Type * Ty, const llvm::Twine & Name = "")
  • public llvm::LoadInst * CreateAlignedLoad(llvm::Type * Ty, llvm::Value * Addr, clang::CharUnits Align, const llvm::Twine & Name = "")
  • public llvm::StoreInst * CreateAlignedStore(llvm::Value * Val, llvm::Value * Addr, clang::CharUnits Align, bool IsVolatile = false)
  • public llvm::AtomicCmpXchgInst * CreateAtomicCmpXchg(llvm::Value * Ptr, llvm::Value * Cmp, llvm::Value * New, llvm::AtomicOrdering SuccessOrdering, llvm::AtomicOrdering FailureOrdering, llvm::SyncScope::ID SSID = llvm::SyncScope::System)
  • public llvm::AtomicRMWInst * CreateAtomicRMW(llvm::AtomicRMWInst::BinOp Op, llvm::Value * Ptr, llvm::Value * Val, llvm::AtomicOrdering Ordering, llvm::SyncScope::ID SSID = llvm::SyncScope::System)
  • public clang::CodeGen::Address CreateConstArrayGEP(clang::CodeGen::Address Addr, uint64_t Index, const llvm::Twine & Name = "")
  • public clang::CodeGen::Address CreateConstByteGEP(clang::CodeGen::Address Addr, clang::CharUnits Offset, const llvm::Twine & Name = "")
  • public clang::CodeGen::Address CreateConstGEP(clang::CodeGen::Address Addr, uint64_t Index, const llvm::Twine & Name = "")
  • public clang::CodeGen::Address CreateConstInBoundsByteGEP(clang::CodeGen::Address Addr, clang::CharUnits Offset, const llvm::Twine & Name = "")
  • public clang::CodeGen::Address CreateConstInBoundsGEP(clang::CodeGen::Address Addr, uint64_t Index, const llvm::Twine & Name = "")
  • public clang::CodeGen::Address CreateConstInBoundsGEP2_32(clang::CodeGen::Address Addr, unsigned int Idx0, unsigned int Idx1, const llvm::Twine & Name = "")
  • public llvm::StoreInst * CreateDefaultAlignedStore(llvm::Value * Val, llvm::Value * Addr, bool IsVolatile = false)
  • public clang::CodeGen::Address CreateElementBitCast(clang::CodeGen::Address Addr, llvm::Type * Ty, const llvm::Twine & Name = "")
  • public llvm::LoadInst * CreateFlagLoad(llvm::Value * Addr, const llvm::Twine & Name = "")
  • public llvm::StoreInst * CreateFlagStore(bool Value, llvm::Value * Addr)
  • public clang::CodeGen::Address CreateGEP(clang::CodeGen::Address Addr, llvm::Value * Index, const llvm::Twine & Name = "")
  • public clang::CodeGen::Address CreateLaunderInvariantGroup(clang::CodeGen::Address Addr)
  • public llvm::LoadInst * CreateLoad(clang::CodeGen::Address Addr, bool IsVolatile, const llvm::Twine & Name = "")
  • public llvm::LoadInst * CreateLoad(clang::CodeGen::Address Addr, const char * Name)
  • public llvm::LoadInst * CreateLoad(clang::CodeGen::Address Addr, const llvm::Twine & Name = "")
  • public llvm::CallInst * CreateMemCpy(clang::CodeGen::Address Dest, clang::CodeGen::Address Src, llvm::Value * Size, bool IsVolatile = false)
  • public llvm::CallInst * CreateMemCpy(clang::CodeGen::Address Dest, clang::CodeGen::Address Src, uint64_t Size, bool IsVolatile = false)
  • public llvm::CallInst * CreateMemCpyInline(clang::CodeGen::Address Dest, clang::CodeGen::Address Src, uint64_t Size)
  • public llvm::CallInst * CreateMemMove(clang::CodeGen::Address Dest, clang::CodeGen::Address Src, llvm::Value * Size, bool IsVolatile = false)
  • public llvm::CallInst * CreateMemSet(clang::CodeGen::Address Dest, llvm::Value * Value, llvm::Value * Size, bool IsVolatile = false)
  • public llvm::CallInst * CreateMemSetInline(clang::CodeGen::Address Dest, llvm::Value * Value, uint64_t Size)
  • public clang::CodeGen::Address CreatePointerBitCastOrAddrSpaceCast(clang::CodeGen::Address Addr, llvm::Type * Ty, llvm::Type * ElementTy, const llvm::Twine & Name = "")
  • public clang::CodeGen::Address CreatePreserveStructAccessIndex(clang::CodeGen::Address Addr, unsigned int Index, unsigned int FieldIndex, llvm::MDNode * DbgInfo)
  • public llvm::StoreInst * CreateStore(llvm::Value * Val, clang::CodeGen::Address Addr, bool IsVolatile = false)
  • public clang::CodeGen::Address CreateStructGEP(clang::CodeGen::Address Addr, unsigned int Index, const llvm::Twine & Name = "")
  • public llvm::ConstantInt * getSize(uint64_t N)
  • public llvm::ConstantInt * getSize(clang::CharUnits N)

Methods

CGBuilderTy(
    const clang::CodeGen::CodeGenTypeCache&
        TypeCache,
    llvm::LLVMContext& C,
    const llvm::ConstantFolder& F,
    const clang::CodeGen::CGBuilderInserterTy&
        Inserter)

Declared at: clang/lib/CodeGen/CGBuilder.h:53

Parameters

const clang::CodeGen::CodeGenTypeCache& TypeCache
llvm::LLVMContext& C
const llvm::ConstantFolder& F
const clang::CodeGen::CGBuilderInserterTy& Inserter

CGBuilderTy(
    const clang::CodeGen::CodeGenTypeCache&
        TypeCache,
    llvm::Instruction* I)

Declared at: clang/lib/CodeGen/CGBuilder.h:57

Parameters

const clang::CodeGen::CodeGenTypeCache& TypeCache
llvm::Instruction* I

CGBuilderTy(
    const clang::CodeGen::CodeGenTypeCache&
        TypeCache,
    llvm::BasicBlock* BB)

Declared at: clang/lib/CodeGen/CGBuilder.h:59

Parameters

const clang::CodeGen::CodeGenTypeCache& TypeCache
llvm::BasicBlock* BB

CGBuilderTy(
    const clang::CodeGen::CodeGenTypeCache&
        TypeCache,
    llvm::LLVMContext& C)

Declared at: clang/lib/CodeGen/CGBuilder.h:51

Parameters

const clang::CodeGen::CodeGenTypeCache& TypeCache
llvm::LLVMContext& C

clang::CodeGen::Address CreateAddrSpaceCast(
    clang::CodeGen::Address Addr,
    llvm::Type* Ty,
    const llvm::Twine& Name = "")

Declared at: clang/lib/CodeGen/CGBuilder.h:158

Parameters

clang::CodeGen::Address Addr
llvm::Type* Ty
const llvm::Twine& Name = ""

llvm::LoadInst* CreateAlignedLoad(
    llvm::Type* Ty,
    llvm::Value* Addr,
    clang::CharUnits Align,
    const llvm::Twine& Name = "")

Declared at: clang/lib/CodeGen/CGBuilder.h:89

Parameters

llvm::Type* Ty
llvm::Value* Addr
clang::CharUnits Align
const llvm::Twine& Name = ""

llvm::StoreInst* CreateAlignedStore(
    llvm::Value* Val,
    llvm::Value* Addr,
    clang::CharUnits Align,
    bool IsVolatile = false)

Declared at: clang/lib/CodeGen/CGBuilder.h:106

Parameters

llvm::Value* Val
llvm::Value* Addr
clang::CharUnits Align
bool IsVolatile = false

llvm::AtomicCmpXchgInst* CreateAtomicCmpXchg(
    llvm::Value* Ptr,
    llvm::Value* Cmp,
    llvm::Value* New,
    llvm::AtomicOrdering SuccessOrdering,
    llvm::AtomicOrdering FailureOrdering,
    llvm::SyncScope::ID SSID =
        llvm::SyncScope::System)

Declared at: clang/lib/CodeGen/CGBuilder.h:138

Parameters

llvm::Value* Ptr
llvm::Value* Cmp
llvm::Value* New
llvm::AtomicOrdering SuccessOrdering
llvm::AtomicOrdering FailureOrdering
llvm::SyncScope::ID SSID = llvm::SyncScope::System

llvm::AtomicRMWInst* CreateAtomicRMW(
    llvm::AtomicRMWInst::BinOp Op,
    llvm::Value* Ptr,
    llvm::Value* Val,
    llvm::AtomicOrdering Ordering,
    llvm::SyncScope::ID SSID =
        llvm::SyncScope::System)

Declared at: clang/lib/CodeGen/CGBuilder.h:150

Parameters

llvm::AtomicRMWInst::BinOp Op
llvm::Value* Ptr
llvm::Value* Val
llvm::AtomicOrdering Ordering
llvm::SyncScope::ID SSID = llvm::SyncScope::System

clang::CodeGen::Address CreateConstArrayGEP(
    clang::CodeGen::Address Addr,
    uint64_t Index,
    const llvm::Twine& Name = "")

Description

Given %addr = [n x T]* ... produce %name = getelementptr inbounds %addr, i64 0, i64 index where i64 is actually the target word size. This API assumes that drilling into an array like this is always an inbounds operation.

Declared at: clang/lib/CodeGen/CGBuilder.h:213

Parameters

clang::CodeGen::Address Addr
uint64_t Index
const llvm::Twine& Name = ""

clang::CodeGen::Address CreateConstByteGEP(
    clang::CodeGen::Address Addr,
    clang::CharUnits Offset,
    const llvm::Twine& Name = "")

Declared at: clang/lib/CodeGen/CGBuilder.h:285

Parameters

clang::CodeGen::Address Addr
clang::CharUnits Offset
const llvm::Twine& Name = ""

clang::CodeGen::Address CreateConstGEP(
    clang::CodeGen::Address Addr,
    uint64_t Index,
    const llvm::Twine& Name = "")

Description

Given %addr = T* ... produce %name = getelementptr inbounds %addr, i64 index where i64 is actually the target word size.

Declared at: clang/lib/CodeGen/CGBuilder.h:249

Parameters

clang::CodeGen::Address Addr
uint64_t Index
const llvm::Twine& Name = ""

clang::CodeGen::Address
CreateConstInBoundsByteGEP(
    clang::CodeGen::Address Addr,
    clang::CharUnits Offset,
    const llvm::Twine& Name = "")

Description

Given a pointer to i8, adjust it by a given constant offset.

Declared at: clang/lib/CodeGen/CGBuilder.h:277

Parameters

clang::CodeGen::Address Addr
clang::CharUnits Offset
const llvm::Twine& Name = ""

clang::CodeGen::Address CreateConstInBoundsGEP(
    clang::CodeGen::Address Addr,
    uint64_t Index,
    const llvm::Twine& Name = "")

Description

Given %addr = T* ... produce %name = getelementptr inbounds %addr, i64 index where i64 is actually the target word size.

Declared at: clang/lib/CodeGen/CGBuilder.h:232

Parameters

clang::CodeGen::Address Addr
uint64_t Index
const llvm::Twine& Name = ""

clang::CodeGen::Address
CreateConstInBoundsGEP2_32(
    clang::CodeGen::Address Addr,
    unsigned int Idx0,
    unsigned int Idx1,
    const llvm::Twine& Name = "")

Declared at: clang/lib/CodeGen/CGBuilder.h:295

Parameters

clang::CodeGen::Address Addr
unsigned int Idx0
unsigned int Idx1
const llvm::Twine& Name = ""

llvm::StoreInst* CreateDefaultAlignedStore(
    llvm::Value* Val,
    llvm::Value* Addr,
    bool IsVolatile = false)

Declared at: clang/lib/CodeGen/CGBuilder.h:114

Parameters

llvm::Value* Val
llvm::Value* Addr
bool IsVolatile = false

clang::CodeGen::Address CreateElementBitCast(
    clang::CodeGen::Address Addr,
    llvm::Type* Ty,
    const llvm::Twine& Name = "")

Description

Cast the element type of the given address to a different type, preserving information like the alignment and address space.

Declared at: clang/lib/CodeGen/CGBuilder.h:168

Parameters

clang::CodeGen::Address Addr
llvm::Type* Ty
const llvm::Twine& Name = ""

llvm::LoadInst* CreateFlagLoad(
    llvm::Value* Addr,
    const llvm::Twine& Name = "")

Description

Emit a load from an i1 flag variable.

Declared at: clang/lib/CodeGen/CGBuilder.h:121

Parameters

llvm::Value* Addr
const llvm::Twine& Name = ""

llvm::StoreInst* CreateFlagStore(
    bool Value,
    llvm::Value* Addr)

Description

Emit a store to an i1 flag variable.

Declared at: clang/lib/CodeGen/CGBuilder.h:129

Parameters

bool Value
llvm::Value* Addr

clang::CodeGen::Address CreateGEP(
    clang::CodeGen::Address Addr,
    llvm::Value* Index,
    const llvm::Twine& Name = "")

Declared at: clang/lib/CodeGen/CGBuilder.h:264

Parameters

clang::CodeGen::Address Addr
llvm::Value* Index
const llvm::Twine& Name = ""

clang::CodeGen::Address
CreateLaunderInvariantGroup(
    clang::CodeGen::Address Addr)

Declared at: clang/lib/CodeGen/CGBuilder.h:371

Parameters

clang::CodeGen::Address Addr

llvm::LoadInst* CreateLoad(
    clang::CodeGen::Address Addr,
    bool IsVolatile,
    const llvm::Twine& Name = "")

Declared at: clang/lib/CodeGen/CGBuilder.h:81

Parameters

clang::CodeGen::Address Addr
bool IsVolatile
const llvm::Twine& Name = ""

llvm::LoadInst* CreateLoad(
    clang::CodeGen::Address Addr,
    const char* Name)

Declared at: clang/lib/CodeGen/CGBuilder.h:75

Parameters

clang::CodeGen::Address Addr
const char* Name

llvm::LoadInst* CreateLoad(
    clang::CodeGen::Address Addr,
    const llvm::Twine& Name = "")

Declared at: clang/lib/CodeGen/CGBuilder.h:71

Parameters

clang::CodeGen::Address Addr
const llvm::Twine& Name = ""

llvm::CallInst* CreateMemCpy(
    clang::CodeGen::Address Dest,
    clang::CodeGen::Address Src,
    llvm::Value* Size,
    bool IsVolatile = false)

Declared at: clang/lib/CodeGen/CGBuilder.h:312

Parameters

clang::CodeGen::Address Dest
clang::CodeGen::Address Src
llvm::Value* Size
bool IsVolatile = false

llvm::CallInst* CreateMemCpy(
    clang::CodeGen::Address Dest,
    clang::CodeGen::Address Src,
    uint64_t Size,
    bool IsVolatile = false)

Declared at: clang/lib/CodeGen/CGBuilder.h:318

Parameters

clang::CodeGen::Address Dest
clang::CodeGen::Address Src
uint64_t Size
bool IsVolatile = false

llvm::CallInst* CreateMemCpyInline(
    clang::CodeGen::Address Dest,
    clang::CodeGen::Address Src,
    uint64_t Size)

Declared at: clang/lib/CodeGen/CGBuilder.h:326

Parameters

clang::CodeGen::Address Dest
clang::CodeGen::Address Src
uint64_t Size

llvm::CallInst* CreateMemMove(
    clang::CodeGen::Address Dest,
    clang::CodeGen::Address Src,
    llvm::Value* Size,
    bool IsVolatile = false)

Declared at: clang/lib/CodeGen/CGBuilder.h:333

Parameters

clang::CodeGen::Address Dest
clang::CodeGen::Address Src
llvm::Value* Size
bool IsVolatile = false

llvm::CallInst* CreateMemSet(
    clang::CodeGen::Address Dest,
    llvm::Value* Value,
    llvm::Value* Size,
    bool IsVolatile = false)

Declared at: clang/lib/CodeGen/CGBuilder.h:341

Parameters

clang::CodeGen::Address Dest
llvm::Value* Value
llvm::Value* Size
bool IsVolatile = false

llvm::CallInst* CreateMemSetInline(
    clang::CodeGen::Address Dest,
    llvm::Value* Value,
    uint64_t Size)

Declared at: clang/lib/CodeGen/CGBuilder.h:348

Parameters

clang::CodeGen::Address Dest
llvm::Value* Value
uint64_t Size

clang::CodeGen::Address
CreatePointerBitCastOrAddrSpaceCast(
    clang::CodeGen::Address Addr,
    llvm::Type* Ty,
    llvm::Type* ElementTy,
    const llvm::Twine& Name = "")

Declared at: clang/lib/CodeGen/CGBuilder.h:176

Parameters

clang::CodeGen::Address Addr
llvm::Type* Ty
llvm::Type* ElementTy
const llvm::Twine& Name = ""

clang::CodeGen::Address
CreatePreserveStructAccessIndex(
    clang::CodeGen::Address Addr,
    unsigned int Index,
    unsigned int FieldIndex,
    llvm::MDNode* DbgInfo)

Declared at: clang/lib/CodeGen/CGBuilder.h:356

Parameters

clang::CodeGen::Address Addr
unsigned int Index
unsigned int FieldIndex
llvm::MDNode* DbgInfo

llvm::StoreInst* CreateStore(
    llvm::Value* Val,
    clang::CodeGen::Address Addr,
    bool IsVolatile = false)

Declared at: clang/lib/CodeGen/CGBuilder.h:99

Parameters

llvm::Value* Val
clang::CodeGen::Address Addr
bool IsVolatile = false

clang::CodeGen::Address CreateStructGEP(
    clang::CodeGen::Address Addr,
    unsigned int Index,
    const llvm::Twine& Name = "")

Declared at: clang/lib/CodeGen/CGBuilder.h:192

Parameters

clang::CodeGen::Address Addr
unsigned int Index
const llvm::Twine& Name = ""

llvm::ConstantInt* getSize(uint64_t N)

Declared at: clang/lib/CodeGen/CGBuilder.h:65

Parameters

uint64_t N

llvm::ConstantInt* getSize(clang::CharUnits N)

Declared at: clang/lib/CodeGen/CGBuilder.h:62

Parameters

clang::CharUnits N