|
clang 23.0.0git
|
#include "CGCall.h"#include "CGRecordLayout.h"#include "CodeGenFunction.h"#include "CodeGenModule.h"#include "TargetInfo.h"#include "clang/AST/ASTContext.h"#include "clang/Basic/DiagnosticFrontend.h"#include "clang/CodeGen/CGFunctionInfo.h"#include "llvm/ADT/DenseMap.h"#include "llvm/IR/DataLayout.h"#include "llvm/IR/Intrinsics.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, Address Dest, Address Ptr, Address Val1, Address Val2, Address ExpectedResult, 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, Address ExpectedResult, 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. | |
| static llvm::Value * | EmitPostAtomicMinMax (CGBuilderTy &Builder, AtomicExpr::AtomicOp Op, bool IsSigned, llvm::Value *OldVal, llvm::Value *RHS) |
| Duplicate the atomic min/max operation in conventional IR for the builtin variants that return the new rather than the original value. | |
| static void | EmitAtomicOp (CodeGenFunction &CGF, AtomicExpr *E, Address Dest, Address Ptr, Address Val1, Address Val2, Address ExpectedResult, llvm::Value *IsWeak, llvm::Value *FailureOrder, uint64_t Size, llvm::AtomicOrdering Order, llvm::SyncScope::ID Scope) |
| static Address | EmitValToTemp (CodeGenFunction &CGF, Expr *E) |
| static bool | shouldCastToInt (llvm::Type *ValTy, bool CmpXchg) |
| Return true if. | |
| static void | EmitAtomicOp (CodeGenFunction &CGF, AtomicExpr *Expr, Address Dest, Address Ptr, Address Val1, Address Val2, Address OriginalVal1, llvm::Value *IsWeak, llvm::Value *FailureOrder, uint64_t Size, llvm::AtomicOrdering Order, llvm::Value *Scope) |
| 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) |
|
static |
Definition at line 378 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenFunction::addInstToCurrentSourceAtom(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, Cmp, clang::CodeGen::CGBuilderTy::CreateAtomicCmpXchg(), clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateMemCpy(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenFunction::CreateTempAlloca(), clang::CodeGen::CodeGenFunction::CurFn, clang::CodeGen::CodeGenFunction::EmitStoreOfScalar(), clang::CodeGen::Address::getAlignment(), clang::CodeGen::CodeGenModule::getDataLayout(), clang::CodeGen::Address::getElementType(), clang::CodeGen::CodeGenFunction::getTargetHooks(), clang::Expr::getType(), clang::AtomicExpr::isVolatile(), clang::CodeGen::CodeGenFunction::MakeAddrLValue(), and clang::CodeGen::TargetCodeGenInfo::setTargetAtomicMetadata().
|
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 451 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::CurFn, and emitAtomicCmpXchg().
|
static |
Definition at line 316 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenTypes::arrangeBuiltinFunctionCall(), clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenModule::CreateRuntimeFunction(), clang::CodeGen::CodeGenFunction::EmitCall(), clang::CodeGen::CGCallee::forDirect(), clang::CodeGen::CodeGenTypes::GetFunctionType(), clang::CodeGen::CodeGenFunction::getLLVMContext(), and clang::CodeGen::CodeGenModule::getTypes().
Referenced by clang::CodeGen::CodeGenFunction::EmitAtomicExpr(), and clang::CodeGen::CodeGenFunction::EmitAtomicStore().
|
static |
Definition at line 561 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenFunction::addInstToCurrentSourceAtom(), clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CGBuilderTy::CreateLoad(), clang::CodeGen::CGBuilderTy::CreateStore(), clang::CodeGen::CodeGenFunction::CurFn, emitAtomicCmpXchgFailureSet(), clang::CodeGen::CodeGenFunction::emitAtomicRMWInst(), EmitPostAtomicMinMax(), clang::CodeGen::CodeGenFunction::EmitToMemory(), clang::Expr::getExprLoc(), clang::AtomicExpr::getOp(), clang::Expr::getType(), clang::AtomicExpr::getValueType(), clang::Type::isFloatingType(), clang::Type::isSignedIntegerType(), clang::AtomicExpr::isVolatile(), and clang::CodeGen::CodeGenFunction::maybeAttachRangeForLoad().
Referenced by clang::CodeGen::CodeGenFunction::EmitAtomicExpr(), and EmitAtomicOp().
|
static |
Definition at line 846 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenFunction::Builder, clang::CodeGen::CodeGenFunction::CGM, clang::CodeGen::CodeGenFunction::createBasicBlock(), clang::CodeGen::CodeGenFunction::CurFn, EmitAtomicOp(), clang::getAsString(), clang::CodeGen::CodeGenFunction::getLangOpts(), clang::CodeGen::CodeGenModule::getLangOpts(), clang::CodeGen::CodeGenFunction::getLLVMContext(), clang::CodeGen::CodeGenModule::getLLVMContext(), clang::CodeGen::TargetCodeGenInfo::getLLVMSyncScopeID(), clang::CodeGen::CodeGenFunction::getTargetHooks(), and clang::OpenCLDevice.
|
static |
Definition at line 1818 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenFunction::EmitLoadOfLValue(), clang::CodeGen::CodeGenFunction::EmitStoreOfComplex(), clang::CodeGen::CodeGenFunction::EmitStoreThroughLValue(), clang::CodeGen::RValue::getComplexVal(), clang::CodeGen::RValue::isComplex(), clang::CodeGen::RValue::isScalar(), and clang::CodeGen::CodeGenFunction::MakeAddrLValue().
|
static |
Definition at line 1938 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenFunction::EmitStoreThroughLValue(), and clang::CodeGen::RValue::isScalar().
|
static |
Duplicate the atomic min/max operation in conventional IR for the builtin variants that return the new rather than the original value.
Definition at line 527 of file CGAtomic.cpp.
References Cmp.
Referenced by EmitAtomicOp().
|
static |
Definition at line 828 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 |
Does a store of the given IR type modify the full expected width?
Definition at line 336 of file CGAtomic.cpp.
References clang::CodeGen::CodeGenModule::getDataLayout(), and clang::ast_matchers::type.
Return true if.
| ValTy | is a type that should be casted to integer around the atomic memory operation. If |
| CmpXchg | is true, then the cast of a floating point type is made as that instruction can not have floating point operands. TODO: Allow compare-and-exchange and FP - see comment in AtomicExpandPass.cpp. |
Definition at line 840 of file CGAtomic.cpp.