clang API Documentation
#include "CodeGenFunction.h"
#include "CGCall.h"
#include "CodeGenModule.h"
#include "clang/AST/ASTContext.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Operator.h"
Go to the source code of this file.
Functions | |
static RValue | emitAtomicLibcall (CodeGenFunction &CGF, StringRef fnName, QualType resultType, CallArgList &args) |
static bool | isFullSizeType (CodeGenModule &CGM, llvm::Type *type, uint64_t expectedSize) |
Does a store of the given IR type modify the full expected width? | |
static void | emitAtomicCmpXchg (CodeGenFunction &CGF, AtomicExpr *E, bool IsWeak, llvm::Value *Dest, llvm::Value *Ptr, llvm::Value *Val1, llvm::Value *Val2, uint64_t Size, unsigned Align, llvm::AtomicOrdering SuccessOrder, llvm::AtomicOrdering FailureOrder) |
static void | emitAtomicCmpXchgFailureSet (CodeGenFunction &CGF, AtomicExpr *E, bool IsWeak, llvm::Value *Dest, llvm::Value *Ptr, llvm::Value *Val1, llvm::Value *Val2, llvm::Value *FailureOrderVal, uint64_t Size, unsigned Align, llvm::AtomicOrdering SuccessOrder) |
static void | EmitAtomicOp (CodeGenFunction &CGF, AtomicExpr *E, llvm::Value *Dest, llvm::Value *Ptr, llvm::Value *Val1, llvm::Value *Val2, llvm::Value *IsWeak, llvm::Value *FailureOrder, uint64_t Size, unsigned Align, llvm::AtomicOrdering Order) |
static llvm::Value * | EmitValToTemp (CodeGenFunction &CGF, Expr *E) |
static void | AddDirectArgument (CodeGenFunction &CGF, CallArgList &Args, bool UseOptimizedLibcall, llvm::Value *Val, QualType ValTy, SourceLocation Loc, CharUnits SizeInChars) |
static void AddDirectArgument | ( | CodeGenFunction & | CGF, |
CallArgList & | Args, | ||
bool | UseOptimizedLibcall, | ||
llvm::Value * | Val, | ||
QualType | ValTy, | ||
SourceLocation | Loc, | ||
CharUnits | SizeInChars | ||
) | [static] |
Definition at line 466 of file CGAtomic.cpp.
References clang::CodeGen::CallArgList::add(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::EmitCastToVoidPtr(), clang::CodeGen::CodeGenFunction::EmitLoadOfScalar(), clang::CodeGen::RValue::get(), clang::CodeGen::CodeGenFunction::getContext(), clang::ASTContext::getIntTypeForBitwidth(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::ASTContext::getPointerType(), clang::CharUnits::getQuantity(), clang::ASTContext::getTypeAlignInChars(), clang::ASTContext::toBits(), and clang::ASTContext::VoidPtrTy.
Referenced by clang::CodeGen::CodeGenFunction::EmitAtomicExpr().
static void emitAtomicCmpXchg | ( | CodeGenFunction & | CGF, |
AtomicExpr * | E, | ||
bool | IsWeak, | ||
llvm::Value * | Dest, | ||
llvm::Value * | Ptr, | ||
llvm::Value * | Val1, | ||
llvm::Value * | Val2, | ||
uint64_t | Size, | ||
unsigned | Align, | ||
llvm::AtomicOrdering | SuccessOrder, | ||
llvm::AtomicOrdering | FailureOrder | ||
) | [static] |
Definition at line 181 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::CurFn, clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::Expr::getType(), clang::AtomicExpr::isVolatile(), and clang::CodeGen::CodeGenFunction::MakeAddrLValue().
Referenced by emitAtomicCmpXchgFailureSet().
static void emitAtomicCmpXchgFailureSet | ( | CodeGenFunction & | CGF, |
AtomicExpr * | E, | ||
bool | IsWeak, | ||
llvm::Value * | Dest, | ||
llvm::Value * | Ptr, | ||
llvm::Value * | Val1, | ||
llvm::Value * | Val2, | ||
llvm::Value * | FailureOrderVal, | ||
uint64_t | Size, | ||
unsigned | Align, | ||
llvm::AtomicOrdering | SuccessOrder | ||
) | [static] |
Given an ordering required on success, emit all possible cmpxchg instructions to cope with the provided (but possibly only dynamically known) FailureOrder.
Definition at line 233 of file CGAtomic.cpp.
References clang::AtomicExpr::AO_ABI_memory_order_acquire, clang::AtomicExpr::AO_ABI_memory_order_consume, clang::AtomicExpr::AO_ABI_memory_order_seq_cst, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::CurFn, and emitAtomicCmpXchg().
Referenced by EmitAtomicOp().
static RValue emitAtomicLibcall | ( | CodeGenFunction & | CGF, |
StringRef | fnName, | ||
QualType | resultType, | ||
CallArgList & | args | ||
) | [static] |
Definition at line 128 of file CGAtomic.cpp.
References clang::CodeGen::RequiredArgs::All, clang::CodeGen::CodeGenTypes::arrangeFreeFunctionCall(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CodeGenTypes::GetFunctionType(), and clang::CodeGen::CodeGenModule::getTypes().
Referenced by clang::CodeGen::CodeGenFunction::EmitAtomicLoad(), and clang::CodeGen::CodeGenFunction::EmitAtomicStore().
static void EmitAtomicOp | ( | CodeGenFunction & | CGF, |
AtomicExpr * | E, | ||
llvm::Value * | Dest, | ||
llvm::Value * | Ptr, | ||
llvm::Value * | Val1, | ||
llvm::Value * | Val2, | ||
llvm::Value * | IsWeak, | ||
llvm::Value * | FailureOrder, | ||
uint64_t | Size, | ||
unsigned | Align, | ||
llvm::AtomicOrdering | Order | ||
) | [static] |
Definition at line 309 of file CGAtomic.cpp.
References clang::prec::And, clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::CurFn, emitAtomicCmpXchgFailureSet(), clang::AtomicExpr::getOp(), and clang::AtomicExpr::isVolatile().
Referenced by clang::CodeGen::CodeGenFunction::EmitAtomicExpr().
static llvm::Value* EmitValToTemp | ( | CodeGenFunction & | CGF, |
Expr * | E | ||
) | [static] |
Definition at line 458 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenFunction::CreateMemTemp(), clang::CodeGen::CodeGenFunction::EmitAnyExprToMem(), clang::QualType::getQualifiers(), and clang::Expr::getType().
Referenced by clang::CodeGen::CodeGenFunction::EmitAtomicExpr().
static bool isFullSizeType | ( | CodeGenModule & | CGM, |
llvm::Type * | type, | ||
uint64_t | expectedSize | ||
) | [static] |
Does a store of the given IR type modify the full expected width?
Definition at line 141 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenModule::getDataLayout().