clang  6.0.0svn
Functions
CGAtomic.cpp File Reference
#include "CGCall.h"
#include "CGRecordLayout.h"
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
#include "TargetInfo.h"
#include "clang/AST/ASTContext.h"
#include "clang/CodeGen/CGFunctionInfo.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Operator.h"
Include dependency graph for CGAtomic.cpp:

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? More...
 
static void emitAtomicCmpXchg (CodeGenFunction &CGF, AtomicExpr *E, bool IsWeak, Address Dest, Address Ptr, Address Val1, Address Val2, uint64_t Size, llvm::AtomicOrdering SuccessOrder, llvm::AtomicOrdering FailureOrder, llvm::SyncScope::ID Scope)
 
static void emitAtomicCmpXchgFailureSet (CodeGenFunction &CGF, AtomicExpr *E, bool IsWeak, Address Dest, Address Ptr, Address Val1, Address Val2, llvm::Value *FailureOrderVal, uint64_t Size, llvm::AtomicOrdering SuccessOrder, llvm::SyncScope::ID Scope)
 Given an ordering required on success, emit all possible cmpxchg instructions to cope with the provided (but possibly only dynamically known) FailureOrder. More...
 
static void EmitAtomicOp (CodeGenFunction &CGF, AtomicExpr *E, Address Dest, Address Ptr, Address Val1, Address Val2, llvm::Value *IsWeak, llvm::Value *FailureOrder, uint64_t Size, llvm::AtomicOrdering Order, llvm::SyncScope::ID Scope)
 
static Address EmitValToTemp (CodeGenFunction &CGF, Expr *E)
 
static void EmitAtomicOp (CodeGenFunction &CGF, AtomicExpr *Expr, Address Dest, Address Ptr, Address Val1, Address Val2, llvm::Value *IsWeak, llvm::Value *FailureOrder, uint64_t Size, llvm::AtomicOrdering Order, llvm::Value *Scope)
 
static void AddDirectArgument (CodeGenFunction &CGF, CallArgList &Args, bool UseOptimizedLibcall, llvm::Value *Val, QualType ValTy, SourceLocation Loc, CharUnits SizeInChars)
 
static void EmitAtomicUpdateValue (CodeGenFunction &CGF, AtomicInfo &Atomics, RValue OldRVal, const llvm::function_ref< RValue(RValue)> &UpdateOp, Address DesiredAddr)
 
static void EmitAtomicUpdateValue (CodeGenFunction &CGF, AtomicInfo &Atomics, RValue UpdateRVal, Address DesiredAddr)
 

Function Documentation

◆ AddDirectArgument()

static void AddDirectArgument ( CodeGenFunction CGF,
CallArgList Args,
bool  UseOptimizedLibcall,
llvm::Value Val,
QualType  ValTy,
SourceLocation  Loc,
CharUnits  SizeInChars 
)
static

◆ emitAtomicCmpXchg()

static void emitAtomicCmpXchg ( CodeGenFunction CGF,
AtomicExpr E,
bool  IsWeak,
Address  Dest,
Address  Ptr,
Address  Val1,
Address  Val2,
uint64_t  Size,
llvm::AtomicOrdering  SuccessOrder,
llvm::AtomicOrdering  FailureOrder,
llvm::SyncScope::ID  Scope 
)
static

Definition at line 358 of file CGAtomic.cpp.

◆ emitAtomicCmpXchgFailureSet()

static void emitAtomicCmpXchgFailureSet ( CodeGenFunction CGF,
AtomicExpr E,
bool  IsWeak,
Address  Dest,
Address  Ptr,
Address  Val1,
Address  Val2,
llvm::Value FailureOrderVal,
uint64_t  Size,
llvm::AtomicOrdering  SuccessOrder,
llvm::SyncScope::ID  Scope 
)
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 408 of file CGAtomic.cpp.

◆ emitAtomicLibcall()

static RValue emitAtomicLibcall ( CodeGenFunction CGF,
StringRef  fnName,
QualType  resultType,
CallArgList args 
)
static

◆ EmitAtomicOp() [1/2]

static void EmitAtomicOp ( CodeGenFunction CGF,
AtomicExpr E,
Address  Dest,
Address  Ptr,
Address  Val1,
Address  Val2,
llvm::Value IsWeak,
llvm::Value FailureOrder,
uint64_t  Size,
llvm::AtomicOrdering  Order,
llvm::SyncScope::ID  Scope 
)
static

Definition at line 492 of file CGAtomic.cpp.

Referenced by EmitAtomicOp().

◆ EmitAtomicOp() [2/2]

static void EmitAtomicOp ( CodeGenFunction CGF,
AtomicExpr Expr,
Address  Dest,
Address  Ptr,
Address  Val1,
Address  Val2,
llvm::Value IsWeak,
llvm::Value FailureOrder,
uint64_t  Size,
llvm::AtomicOrdering  Order,
llvm::Value Scope 
)
static

◆ EmitAtomicUpdateValue() [1/2]

static void EmitAtomicUpdateValue ( CodeGenFunction CGF,
AtomicInfo &  Atomics,
RValue  OldRVal,
const llvm::function_ref< RValue(RValue)> &  UpdateOp,
Address  DesiredAddr 
)
static

◆ EmitAtomicUpdateValue() [2/2]

static void EmitAtomicUpdateValue ( CodeGenFunction CGF,
AtomicInfo &  Atomics,
RValue  UpdateRVal,
Address  DesiredAddr 
)
static

◆ EmitValToTemp()

static Address EmitValToTemp ( CodeGenFunction CGF,
Expr E 
)
static

Definition at line 655 of file CGAtomic.cpp.

◆ isFullSizeType()

static bool isFullSizeType ( CodeGenModule CGM,
llvm::Type *  type,
uint64_t  expectedSize 
)
static