clang 24.0.0git
cir Namespace Reference

Namespaces

namespace  acc
namespace  detail
namespace  direct
namespace  omp

Classes

class  ABIArgInfo
class  CIRABIRewriteContext
 CIR-specific implementation of mlir::abi::ABIRewriteContext. More...
class  CIRBaseBuilderTy
class  CIRBasicAliasAnalysis
 Basic CIR alias analysis based on pointer provenance and distinct allocation sites. More...
class  CIRCXXABI
class  CIRDataLayout
class  CIRDiagnosticHandler
 Routes MLIR-side diagnostics emitted during CIR passes, the verifier, and CIR-to-LLVM lowering through the surrounding clang::DiagnosticsEngine. More...
class  CIRGenAction
class  CIRGenConsumer
class  CIRGenerator
class  EmitAssemblyAction
class  EmitBCAction
class  EmitCIRAction
class  EmitLLVMAction
class  EmitObjAction
class  FenvOpTrait
struct  FloatingPointEnvironmentResource
 The process floating-point environment, including its rounding mode and exception state. More...
class  LowerModule
struct  MissingFeatures
class  RecordType
 C++ view class that accepts both !cir.struct and !cir.union types. More...
class  TargetLoweringInfo

Enumerations

enum class  OverflowBehavior { None = 0 , NoSignedWrap = 1 << 0 , NoUnsignedWrap = 1 << 1 , Saturated = 1 << 2 }
enum class  CallConvTarget { None , Test , X86_64 }
 The ABI target whose calling-convention rules drive CallConvLowering. More...
enum  TypeEvaluationKind { TEK_Scalar , TEK_Complex , TEK_Aggregate }

Functions

void setMLIRDataLayout (mlir::ModuleOp mod, const llvm::DataLayout &dl)
 Translate dl into a DLTI data-layout spec and attach it to mod.
mlir::LogicalResult runCIRToCIRPasses (mlir::ModuleOp theModule, mlir::MLIRContext &mlirCtx, clang::ASTContext &astCtx, bool enableVerifier, bool enableIdiomRecognizer, bool enableCIRSimplify, bool enableLibOpt, llvm::StringRef libOptOptions, bool enableCallConvLowering)
void registerCIRAliasAnalyses (mlir::AliasAnalysis &aa)
 Register all CIR alias analysis implementations with aa.
constexpr OverflowBehavior operator| (OverflowBehavior a, OverflowBehavior b)
constexpr OverflowBehavior operator& (OverflowBehavior a, OverflowBehavior b)
constexpr OverflowBehavioroperator|= (OverflowBehavior &a, OverflowBehavior b)
constexpr OverflowBehavioroperator&= (OverflowBehavior &a, OverflowBehavior b)
constexpr bool testFlag (OverflowBehavior ob, OverflowBehavior flag)
void buildTerminatedBody (mlir::OpBuilder &builder, mlir::Location loc)
RecordLayoutAttr getRecordLayout (mlir::ModuleOp mod, mlir::StringAttr name)
 Look up the RecordLayoutAttr for a named record in the module's cir.record_layouts dictionary.
RecordLayoutAttr tryGetRecordLayout (mlir::ModuleOp mod, mlir::StringAttr name)
 Same lookup as getRecordLayout, but returns a null attribute instead of asserting when the record has no layout entry.
static bool isExternalLinkage (GlobalLinkageKind linkage)
static bool isAvailableExternallyLinkage (GlobalLinkageKind linkage)
static bool isLinkOnceAnyLinkage (GlobalLinkageKind linkage)
static bool isLinkOnceODRLinkage (GlobalLinkageKind linkage)
static bool isLinkOnceLinkage (GlobalLinkageKind linkage)
static bool isWeakAnyLinkage (GlobalLinkageKind linkage)
static bool isWeakODRLinkage (GlobalLinkageKind linkage)
static bool isWeakLinkage (GlobalLinkageKind linkage)
static bool isInternalLinkage (GlobalLinkageKind linkage)
static bool isPrivateLinkage (GlobalLinkageKind linkage)
static bool isLocalLinkage (GlobalLinkageKind linkage)
static bool isExternalWeakLinkage (GlobalLinkageKind linkage)
static bool isCommonLinkage (GlobalLinkageKind linkage)
static bool isAppendingLinkage (GlobalLinkageKind linkage)
static bool isValidDeclarationLinkage (GlobalLinkageKind linkage)
static bool isInterposableLinkage (GlobalLinkageKind linkage)
 Whether the definition of this global may be replaced by something non-equivalent at link time.
static bool isDiscardableIfUnused (GlobalLinkageKind linkage)
 Whether the definition of this global may be discarded if it is not used in its compilation unit.
static bool isWeakForLinker (GlobalLinkageKind linkage)
 Whether the definition of this global may be replaced at link time.
static bool isValidLinkage (GlobalLinkageKind gl)
bool operator< (cir::MemOrder, cir::MemOrder)=delete
bool operator> (cir::MemOrder, cir::MemOrder)=delete
bool operator<= (cir::MemOrder, cir::MemOrder)=delete
bool operator>= (cir::MemOrder, cir::MemOrder)=delete
template<typename Int>
bool isValidCIRAtomicOrderingCABI (Int value)
bool isValidFundamentalIntWidth (unsigned width)
bool holdsDataForABI (RecordMemberKind kind)
 Whether a member of this kind holds data for argument passing.
bool anyMemberHoldsDataForABI (llvm::ArrayRef< RecordMemberKind > kinds)
 Whether any member holds data for argument passing on its mark alone.
bool isNamedBitField (RecordMemberKind kind)
 Whether a member of this kind is an access unit the source can read a bit-field of.
bool isSized (mlir::Type ty)
 Returns true if the type is a CIR sized type.
cir::FPTypeInterface getFloatingPointType (const llvm::fltSemantics &sem, mlir::MLIRContext *ctx)
 Returns the CIR floating-point type for the given semantics, or a null type if CIR has no type for it (e.g.
cir::LangAddressSpace toCIRLangAddressSpace (clang::LangAS langAS)
bool isMatchingAddressSpace (mlir::ptr::MemorySpaceAttrInterface cirAS, clang::LangAS as)
mlir::ptr::MemorySpaceAttrInterface toCIRAddressSpaceAttr (mlir::MLIRContext &ctx, clang::LangAS langAS)
 Convert an AST LangAS to the appropriate CIR address space attribute interface.
mlir::ptr::MemorySpaceAttrInterface normalizeDefaultAddressSpace (mlir::ptr::MemorySpaceAttrInterface addrSpace)
 Normalize LangAddressSpace::Default to null (empty attribute).
bool isSupportedCIRMemorySpaceAttr (mlir::ptr::MemorySpaceAttrInterface memorySpace)
bool memberOwnsBytes (mlir::Type memberTy)
 Whether a record member occupies bytes of its record.
mlir::Type memberStorageType (mlir::Type memberTy)
 The storage a member is stored as: the access unit for a bit-field member, and the member type itself for anything else.
mlir::Block * replaceCallWithTryCall (cir::CallOp callOp, mlir::Block *unwindDest, mlir::Location loc, mlir::RewriterBase &rewriter)
 Replace a cir::CallOp with a cir::TryCallOp whose unwind destination is unwindDest.
mlir::Block * replaceThrowWithTryThrow (cir::ThrowOp throwOp, mlir::Block *unwindDest, mlir::Location loc, mlir::RewriterBase &rewriter)
 Replace a cir::ThrowOp with a cir::TryThrowOp whose unwind destination is unwindDest.
void collectUnreachable (mlir::Operation *parent, llvm::SmallVectorImpl< mlir::Operation * > &ops)
 Collect ops in blocks that are unreachable from their region's entry, appending them to ops.
void registerAllDialects (mlir::DialectRegistry &registry)
void registerAllDialects (mlir::MLIRContext &context)
std::unique_ptr< CIRCXXABIcreateItaniumCXXABI (LowerModule &lm)
 Creates an Itanium-family ABI.
static cir::IntType getPtrDiffCIRTy (LowerModule &lm)
static mlir::Value lowerDataMemberCast (mlir::Operation *op, mlir::Value loweredSrc, std::int64_t offset, bool isDerivedToBase, mlir::OpBuilder &builder)
static mlir::Value lowerMethodCast (mlir::Operation *op, mlir::Value loweredSrc, std::int64_t offset, bool isDerivedToBase, bool useARMMethodPtrABI, LowerModule &lowerMod, mlir::OpBuilder &builder)
static void buildBadCastCall (mlir::OpBuilder &builder, mlir::Location loc, mlir::FlatSymbolRefAttr badCastFuncRef)
static mlir::Value buildDynamicCastAfterNullCheck (cir::DynamicCastOp op, mlir::OpBuilder &builder)
static mlir::Value buildDynamicCastToVoidAfterNullCheck (cir::DynamicCastOp op, cir::LowerModule &lm, mlir::OpBuilder &builder)
static std::unique_ptr< CIRCXXABIcreateCXXABI (LowerModule &lm)
static std::unique_ptr< TargetLoweringInfocreateTargetLoweringInfo (LowerModule &lm)
std::unique_ptr< LowerModulecreateLowerModule (mlir::ModuleOp module)
std::unique_ptr< TargetLoweringInfocreateAMDGPUTargetLoweringInfo ()
std::unique_ptr< TargetLoweringInfocreateNVPTXTargetLoweringInfo ()
std::unique_ptr< TargetLoweringInfocreateSPIRVTargetLoweringInfo ()
static BackendAction getBackendActionFromOutputType (CIRGenAction::OutputType Action)
static std::unique_ptr< llvm::Module > lowerFromCIRToLLVMIR (mlir::ModuleOp MLIRModule, llvm::LLVMContext &LLVMCtx, bool EnableOpenMP, llvm::StringRef mlirSaveTempsOutFile={}, llvm::vfs::FileSystem *fs=nullptr)
static CallConvTarget getCallConvTarget (const llvm::Triple &triple)
 Map a target triple to the ABI target that drives CallConvLowering.
static llvm::abi::X86AVXABILevel getX86AVXABILevel (llvm::StringRef abi)
 The AVX level the classifier uses to size a native vector, read from the target ABI name.
static bool allowsX86TargetAttrAvx (const clang::ASTContext &astContext)
 Whether __attribute__((target(...))) on a function may raise its AVX ABI level above the command line's.
static llvm::abi::ABICompatInfo getX86ABICompatInfo (const clang::ASTContext &astContext)
 The x86_64 ABI-compatibility flags, derived from the target and the requested compatibility version.

Enumeration Type Documentation

◆ CallConvTarget

enum class cir::CallConvTarget
strong

The ABI target whose calling-convention rules drive CallConvLowering.

None is the unset state used when the pass runs in classification-attr mode instead of selecting a target.

Enumerator
None 
Test 
X86_64 

Definition at line 23 of file Passes.h.

◆ OverflowBehavior

enum class cir::OverflowBehavior
strong
Enumerator
None 
NoSignedWrap 
NoUnsignedWrap 
Saturated 

Definition at line 32 of file CIRBaseBuilder.h.

◆ TypeEvaluationKind

Enumerator
TEK_Scalar 
TEK_Complex 
TEK_Aggregate 

Definition at line 17 of file TypeEvaluationKind.h.

Function Documentation

◆ allowsX86TargetAttrAvx()

bool cir::allowsX86TargetAttrAvx ( const clang::ASTContext & astContext)
static

Whether __attribute__((target(...))) on a function may raise its AVX ABI level above the command line's.

A target that opts out, and any ABI older than the rule, stay at the module level.

Definition at line 45 of file CIRPasses.cpp.

References clang::ASTContext::getLangOpts(), clang::ASTContext::getTargetInfo(), and clang::TargetInfo::getTriple().

Referenced by mlir::createCallConvLoweringPass(), and runCIRToCIRPasses().

◆ anyMemberHoldsDataForABI()

bool cir::anyMemberHoldsDataForABI ( llvm::ArrayRef< RecordMemberKind > kinds)
inline

Whether any member holds data for argument passing on its mark alone.

Definition at line 52 of file CIRTypes.h.

References holdsDataForABI(), and kind.

Referenced by cir::RecordType::isEmptyForABI().

◆ buildBadCastCall()

void cir::buildBadCastCall ( mlir::OpBuilder & builder,
mlir::Location loc,
mlir::FlatSymbolRefAttr badCastFuncRef )
static

Definition at line 707 of file LowerItaniumCXXABI.cpp.

Referenced by buildDynamicCastAfterNullCheck().

◆ buildDynamicCastAfterNullCheck()

mlir::Value cir::buildDynamicCastAfterNullCheck ( cir::DynamicCastOp op,
mlir::OpBuilder & builder )
static

C++ [expr.dynamic.cast]p9: A failed cast to reference type throws std::bad_cast

Definition at line 719 of file LowerItaniumCXXABI.cpp.

References cir::MissingFeatures::addressSpace(), and buildBadCastCall().

◆ buildDynamicCastToVoidAfterNullCheck()

mlir::Value cir::buildDynamicCastToVoidAfterNullCheck ( cir::DynamicCastOp op,
cir::LowerModule & lm,
mlir::OpBuilder & builder )
static

◆ buildTerminatedBody()

void cir::buildTerminatedBody ( mlir::OpBuilder & builder,
mlir::Location loc )

◆ collectUnreachable()

void cir::collectUnreachable ( mlir::Operation * parent,
llvm::SmallVectorImpl< mlir::Operation * > & ops )

Collect ops in blocks that are unreachable from their region's entry, appending them to ops.

Used by CIR passes that drive applyPartialConversion and need to feed it operations the conversion driver's dominance-order traversal would otherwise skip.

Definition at line 15 of file CIRTransformUtils.cpp.

Referenced by cir::direct::ConvertCIRToLLVMPass::runOnOperation().

◆ createAMDGPUTargetLoweringInfo()

std::unique_ptr< TargetLoweringInfo > cir::createAMDGPUTargetLoweringInfo ( )

Definition at line 45 of file AMDGPU.cpp.

Referenced by createTargetLoweringInfo().

◆ createCXXABI()

std::unique_ptr< CIRCXXABI > cir::createCXXABI ( LowerModule & lm)
static

◆ createItaniumCXXABI()

std::unique_ptr< CIRCXXABI > cir::createItaniumCXXABI ( LowerModule & lm)

Creates an Itanium-family ABI.

Definition at line 132 of file LowerItaniumCXXABI.cpp.

References cir::MissingFeatures::appleArm64CXXABI(), and cir::LowerModule::getCXXABIKind().

Referenced by createCXXABI().

◆ createLowerModule()

◆ createNVPTXTargetLoweringInfo()

std::unique_ptr< TargetLoweringInfo > cir::createNVPTXTargetLoweringInfo ( )

Definition at line 44 of file NVPTX.cpp.

Referenced by createTargetLoweringInfo().

◆ createSPIRVTargetLoweringInfo()

std::unique_ptr< TargetLoweringInfo > cir::createSPIRVTargetLoweringInfo ( )

Definition at line 41 of file SPIRV.cpp.

Referenced by createTargetLoweringInfo().

◆ createTargetLoweringInfo()

◆ getBackendActionFromOutputType()

◆ getCallConvTarget()

CallConvTarget cir::getCallConvTarget ( const llvm::Triple & triple)
static

Map a target triple to the ABI target that drives CallConvLowering.

Returns None for targets whose calling convention is not yet implemented.

Definition at line 26 of file CIRPasses.cpp.

References None, and X86_64.

Referenced by runCIRToCIRPasses().

◆ getFloatingPointType()

cir::FPTypeInterface cir::getFloatingPointType ( const llvm::fltSemantics & sem,
mlir::MLIRContext * ctx )

Returns the CIR floating-point type for the given semantics, or a null type if CIR has no type for it (e.g.

PPCDoubleDouble or a Float8 format). Mirrors llvm::Type::getFloatingPointTy.

Definition at line 42 of file CIRTypes.cpp.

◆ getPtrDiffCIRTy()

◆ getRecordLayout()

RecordLayoutAttr cir::getRecordLayout ( mlir::ModuleOp mod,
mlir::StringAttr name )

Look up the RecordLayoutAttr for a named record in the module's cir.record_layouts dictionary.

Asserts if the entry is missing.

Definition at line 938 of file CIRAttrs.cpp.

References tryGetRecordLayout().

◆ getX86ABICompatInfo()

llvm::abi::ABICompatInfo cir::getX86ABICompatInfo ( const clang::ASTContext & astContext)
static

The x86_64 ABI-compatibility flags, derived from the target and the requested compatibility version.

Every flag defaults to true in the ABI library, which is not what any target computes: Clang11Compat is false for a modern Linux target, so leaving it at the default classifies a union larger than an eightbyte as though every member spanned its size.

Definition at line 57 of file CIRPasses.cpp.

References clang::ASTContext::getLangOpts(), clang::ASTContext::getTargetInfo(), and clang::TargetInfo::getTriple().

Referenced by runCIRToCIRPasses().

◆ getX86AVXABILevel()

llvm::abi::X86AVXABILevel cir::getX86AVXABILevel ( llvm::StringRef abi)
static

The AVX level the classifier uses to size a native vector, read from the target ABI name.

Definition at line 34 of file CIRPasses.cpp.

Referenced by runCIRToCIRPasses().

◆ holdsDataForABI()

bool cir::holdsDataForABI ( RecordMemberKind kind)
inline

Whether a member of this kind holds data for argument passing.

An empty member can hold data all the same, since an access unit of unnamed bit-fields takes that mark and is storage the classifier reads; use RecordType::isEmptyForABI to ask about a whole record.

Definition at line 47 of file CIRTypes.h.

References kind.

Referenced by anyMemberHoldsDataForABI().

◆ isAppendingLinkage()

bool cir::isAppendingLinkage ( GlobalLinkageKind linkage)
static

Definition at line 60 of file CIROpsEnums.h.

◆ isAvailableExternallyLinkage()

bool cir::isAvailableExternallyLinkage ( GlobalLinkageKind linkage)
static

Definition at line 24 of file CIROpsEnums.h.

Referenced by isDiscardableIfUnused().

◆ isCommonLinkage()

bool cir::isCommonLinkage ( GlobalLinkageKind linkage)
static

Definition at line 57 of file CIROpsEnums.h.

◆ isDiscardableIfUnused()

bool cir::isDiscardableIfUnused ( GlobalLinkageKind linkage)
static

Whether the definition of this global may be discarded if it is not used in its compilation unit.

Definition at line 95 of file CIROpsEnums.h.

References isAvailableExternallyLinkage(), isLinkOnceLinkage(), and isLocalLinkage().

Referenced by getCIRGenToUse().

◆ isExternalLinkage()

bool cir::isExternalLinkage ( GlobalLinkageKind linkage)
static

Definition at line 21 of file CIROpsEnums.h.

Referenced by isValidDeclarationLinkage(), and isValidLinkage().

◆ isExternalWeakLinkage()

bool cir::isExternalWeakLinkage ( GlobalLinkageKind linkage)
static

Definition at line 54 of file CIROpsEnums.h.

Referenced by isValidDeclarationLinkage().

◆ isInternalLinkage()

bool cir::isInternalLinkage ( GlobalLinkageKind linkage)
static

Definition at line 45 of file CIROpsEnums.h.

Referenced by isLocalLinkage().

◆ isInterposableLinkage()

bool cir::isInterposableLinkage ( GlobalLinkageKind linkage)
static

Whether the definition of this global may be replaced by something non-equivalent at link time.

For example, if a function has weak linkage then the code defining it may be replaced by different code.

Definition at line 71 of file CIROpsEnums.h.

◆ isLinkOnceAnyLinkage()

bool cir::isLinkOnceAnyLinkage ( GlobalLinkageKind linkage)
static

Definition at line 27 of file CIROpsEnums.h.

Referenced by isLinkOnceLinkage().

◆ isLinkOnceLinkage()

bool cir::isLinkOnceLinkage ( GlobalLinkageKind linkage)
static

◆ isLinkOnceODRLinkage()

bool cir::isLinkOnceODRLinkage ( GlobalLinkageKind linkage)
static

Definition at line 30 of file CIROpsEnums.h.

Referenced by isLinkOnceLinkage().

◆ isLocalLinkage()

bool cir::isLocalLinkage ( GlobalLinkageKind linkage)
static

◆ isMatchingAddressSpace()

bool cir::isMatchingAddressSpace ( mlir::ptr::MemorySpaceAttrInterface cirAS,
clang::LangAS as )

Definition at line 1743 of file CIRTypes.cpp.

References clang::Default, normalizeDefaultAddressSpace(), and toCIRAddressSpaceAttr().

Referenced by emitBuiltinAlloca().

◆ isNamedBitField()

bool cir::isNamedBitField ( RecordMemberKind kind)
inline

Whether a member of this kind is an access unit the source can read a bit-field of.

A unit can be narrower than the type a bit-field in it was declared with, so its extent does not answer what the source declared; !cir.bitfield carries that. A true answer does not mean the member is an access unit: a union's base subobject takes this mark when any variant is one, whatever its own storage type came from. A unit of nothing but unnamed bit-fields is empty instead.

Definition at line 64 of file CIRTypes.h.

References kind.

◆ isPrivateLinkage()

bool cir::isPrivateLinkage ( GlobalLinkageKind linkage)
static

Definition at line 48 of file CIROpsEnums.h.

Referenced by isLocalLinkage().

◆ isSized()

bool cir::isSized ( mlir::Type ty)

Returns true if the type is a CIR sized type.

Types are sized if they implement SizedTypeInterface and return true from its method isSized.

Unsized types are those that do not have a size, such as void, or abstract types.

Definition at line 35 of file CIRTypes.cpp.

References cir::MissingFeatures::unsizedTypes().

Referenced by clang::CIRGen::CIRGenTypes::convertType(), determineNoUndef(), and cir::CIRDataLayout::getTypeSizeInBits().

◆ isSupportedCIRMemorySpaceAttr()

bool cir::isSupportedCIRMemorySpaceAttr ( mlir::ptr::MemorySpaceAttrInterface memorySpace)

Definition at line 1590 of file CIRTypes.cpp.

◆ isValidCIRAtomicOrderingCABI()

template<typename Int>
bool cir::isValidCIRAtomicOrderingCABI ( Int value)
inline

◆ isValidDeclarationLinkage()

bool cir::isValidDeclarationLinkage ( GlobalLinkageKind linkage)
static

Definition at line 64 of file CIROpsEnums.h.

References isExternalLinkage(), and isExternalWeakLinkage().

◆ isValidFundamentalIntWidth()

bool cir::isValidFundamentalIntWidth ( unsigned width)

◆ isValidLinkage()

bool cir::isValidLinkage ( GlobalLinkageKind gl)
static

Definition at line 113 of file CIROpsEnums.h.

References isExternalLinkage(), isLinkOnceLinkage(), isLocalLinkage(), and isWeakLinkage().

Referenced by getCIRGenToUse().

◆ isWeakAnyLinkage()

bool cir::isWeakAnyLinkage ( GlobalLinkageKind linkage)
static

Definition at line 36 of file CIROpsEnums.h.

Referenced by isWeakLinkage().

◆ isWeakForLinker()

bool cir::isWeakForLinker ( GlobalLinkageKind linkage)
static

Whether the definition of this global may be replaced at link time.

NB: Using this method outside of the code generators is almost always a mistake: when working at the IR level use isInterposable instead as it knows about ODR semantics.

Definition at line 104 of file CIROpsEnums.h.

Referenced by clang::CIRGen::CIRGenModule::createOrReplaceCXXRuntimeVariable(), and getCIRGenToUse().

◆ isWeakLinkage()

bool cir::isWeakLinkage ( GlobalLinkageKind linkage)
static

Definition at line 42 of file CIROpsEnums.h.

References isWeakAnyLinkage(), and isWeakODRLinkage().

Referenced by isValidLinkage().

◆ isWeakODRLinkage()

bool cir::isWeakODRLinkage ( GlobalLinkageKind linkage)
static

Definition at line 39 of file CIROpsEnums.h.

Referenced by getThreadLocalWrapperLinkage(), and isWeakLinkage().

◆ lowerDataMemberCast()

mlir::Value cir::lowerDataMemberCast ( mlir::Operation * op,
mlir::Value loweredSrc,
std::int64_t offset,
bool isDerivedToBase,
mlir::OpBuilder & builder )
static

Definition at line 452 of file LowerItaniumCXXABI.cpp.

◆ lowerFromCIRToLLVMIR()

std::unique_ptr< llvm::Module > cir::lowerFromCIRToLLVMIR ( mlir::ModuleOp MLIRModule,
llvm::LLVMContext & LLVMCtx,
bool EnableOpenMP,
llvm::StringRef mlirSaveTempsOutFile = {},
llvm::vfs::FileSystem * fs = nullptr )
static

Definition at line 61 of file CIRGenAction.cpp.

Referenced by cir::CIRGenConsumer::HandleTranslationUnit().

◆ lowerMethodCast()

mlir::Value cir::lowerMethodCast ( mlir::Operation * op,
mlir::Value loweredSrc,
std::int64_t offset,
bool isDerivedToBase,
bool useARMMethodPtrABI,
LowerModule & lowerMod,
mlir::OpBuilder & builder )
static

Definition at line 502 of file LowerItaniumCXXABI.cpp.

References getPtrDiffCIRTy().

◆ memberOwnsBytes()

bool cir::memberOwnsBytes ( mlir::Type memberTy)
inline

Whether a record member occupies bytes of its record.

Every member does except a zero-width bit-field, which contributes neither size nor alignment to the record and is left out of the lowered LLVM struct body.

Definition at line 125 of file CIRTypes.h.

Referenced by collectStoredInitializers(), and cir::direct::prepareTypeConverter().

◆ memberStorageType()

mlir::Type cir::memberStorageType ( mlir::Type memberTy)
inline

The storage a member is stored as: the access unit for a bit-field member, and the member type itself for anything else.

Null for a zero-width bit-field, which has no storage.

Definition at line 134 of file CIRTypes.h.

Referenced by memberPointeeType(), and cir::direct::prepareTypeConverter().

◆ normalizeDefaultAddressSpace()

mlir::ptr::MemorySpaceAttrInterface cir::normalizeDefaultAddressSpace ( mlir::ptr::MemorySpaceAttrInterface addrSpace)

Normalize LangAddressSpace::Default to null (empty attribute).

Definition at line 1719 of file CIRTypes.cpp.

Referenced by clang::CIRGen::CIRGenFunction::emitLifetimeEndOp(), clang::CIRGen::CIRGenFunction::emitLifetimeStartOp(), and isMatchingAddressSpace().

◆ operator&()

OverflowBehavior cir::operator& ( OverflowBehavior a,
OverflowBehavior b )
constexpr

Definition at line 44 of file CIRBaseBuilder.h.

◆ operator&=()

OverflowBehavior & cir::operator&= ( OverflowBehavior & a,
OverflowBehavior b )
constexpr

Definition at line 55 of file CIRBaseBuilder.h.

◆ operator<()

bool cir::operator< ( cir::MemOrder ,
cir::MemOrder  )
delete

◆ operator<=()

bool cir::operator<= ( cir::MemOrder ,
cir::MemOrder  )
delete

◆ operator>()

bool cir::operator> ( cir::MemOrder ,
cir::MemOrder  )
delete

◆ operator>=()

bool cir::operator>= ( cir::MemOrder ,
cir::MemOrder  )
delete

◆ operator|()

OverflowBehavior cir::operator| ( OverflowBehavior a,
OverflowBehavior b )
constexpr

Definition at line 39 of file CIRBaseBuilder.h.

◆ operator|=()

OverflowBehavior & cir::operator|= ( OverflowBehavior & a,
OverflowBehavior b )
constexpr

Definition at line 49 of file CIRBaseBuilder.h.

◆ registerAllDialects() [1/2]

void cir::registerAllDialects ( mlir::DialectRegistry & registry)

◆ registerAllDialects() [2/2]

void cir::registerAllDialects ( mlir::MLIRContext & context)

Definition at line 31 of file RegisterAllDialects.cpp.

References registerAllDialects().

◆ registerCIRAliasAnalyses()

void cir::registerCIRAliasAnalyses ( mlir::AliasAnalysis & aa)

Register all CIR alias analysis implementations with aa.

Passes that want full CIR alias information should call this rather than adding individual implementations:

mlir::AliasAnalysis aa(funcOp); cir::registerCIRAliasAnalyses(aa);

Definition at line 12 of file CIRAliasAnalysis.cpp.

◆ replaceCallWithTryCall()

mlir::Block * cir::replaceCallWithTryCall ( cir::CallOp callOp,
mlir::Block * unwindDest,
mlir::Location loc,
mlir::RewriterBase & rewriter )

Replace a cir::CallOp with a cir::TryCallOp whose unwind destination is unwindDest.

The call's parent block is split immediately after the call; the resulting suffix block becomes the try_call's normal destination and is returned to the caller.

All attributes of the original call other than the callee and operand segment sizes (which TryCallOp::create sets itself) are copied onto the new try_call. Uses of the original call's result, if any, are redirected to the try_call's result, and the original call is erased.

The call must not already be marked nothrow.

Definition at line 48 of file CIRTransformUtils.cpp.

◆ replaceThrowWithTryThrow()

mlir::Block * cir::replaceThrowWithTryThrow ( cir::ThrowOp throwOp,
mlir::Block * unwindDest,
mlir::Location loc,
mlir::RewriterBase & rewriter )

Replace a cir::ThrowOp with a cir::TryThrowOp whose unwind destination is unwindDest.

The throw's parent block is split immediately after the throw; the resulting suffix block (which should contain the cir.unreachable that follows every throw) becomes the try_throw's normal destination and is returned to the caller.

All attributes of the original throw other than the operand segment sizes (which TryThrowOp::create sets itself) are copied onto the new try_throw, and the original throw is erased.

Definition at line 109 of file CIRTransformUtils.cpp.

◆ runCIRToCIRPasses()

◆ setMLIRDataLayout()

void cir::setMLIRDataLayout ( mlir::ModuleOp mod,
const llvm::DataLayout & dl )

Translate dl into a DLTI data-layout spec and attach it to mod.

On top of the plain mlir::translateDataLayout entries this adds a #cir.ptr_spec entry keyed on !cir.ptr, which CIR pointer types read for their size and alignment; without it pointer widths default to 64 bits.

Definition at line 25 of file CIRDataLayoutSpec.cpp.

References cir::MissingFeatures::dataLayoutPtrHandlingBasedOnLangAS().

Referenced by cir::CIRGenerator::Initialize().

◆ testFlag()

bool cir::testFlag ( OverflowBehavior ob,
OverflowBehavior flag )
constexpr

◆ toCIRAddressSpaceAttr()

mlir::ptr::MemorySpaceAttrInterface cir::toCIRAddressSpaceAttr ( mlir::MLIRContext & ctx,
clang::LangAS langAS )

Convert an AST LangAS to the appropriate CIR address space attribute interface.

Definition at line 1729 of file CIRTypes.cpp.

References clang::isTargetAddressSpace(), toCIRLangAddressSpace(), and clang::toTargetAddressSpace().

Referenced by cir::CIRBaseBuilderTy::getPointerTo(), isMatchingAddressSpace(), and clang::CIRGen::CIRGenFunction::maybeCastStackAddressSpace().

◆ toCIRLangAddressSpace()

cir::LangAddressSpace cir::toCIRLangAddressSpace ( clang::LangAS langAS)

Definition at line 1596 of file CIRTypes.cpp.

Referenced by toCIRAddressSpaceAttr().

◆ tryGetRecordLayout()

RecordLayoutAttr cir::tryGetRecordLayout ( mlir::ModuleOp mod,
mlir::StringAttr name )

Same lookup as getRecordLayout, but returns a null attribute instead of asserting when the record has no layout entry.

Definition at line 927 of file CIRAttrs.cpp.

Referenced by getRecordLayout().