clang 24.0.0git
cir Namespace Reference

Namespaces

namespace  acc
namespace  detail
namespace  direct
namespace  omp

Classes

class  ABIArgInfo
struct  ABIClassifierOptions
 The target-specific settings a classifier needs beyond what it can read from the module. More...
class  CIRABIClassifier
 Produces the classification CallConvLowering rewrites a signature from. More...
class  CIRABIClassifierCommon
 Classifies through the LLVM ABI Lowering Library. More...
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  EmitCIRBCAction
class  EmitLLVMAction
class  EmitObjAction
class  FenvOpTrait
struct  FloatingPointEnvironmentResource
 The process floating-point environment, including its rounding mode and exception state. More...
struct  GlobalCtorDtorEntry
 Helper type for lowering global ctor/dtors, that contain all the values needed for transforming the values between IRs. More...
class  LowerModule
struct  MissingFeatures
class  RecordRewritingTypeConverter
 A type converter that converts the types nested in pointers, arrays, functions and records. More...
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 , AMDGPU }
 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, bool enableVerifier, bool enableIdiomRecognizer, bool enableCIRSimplify, bool enableLibOpt, llvm::StringRef libOptOptions, bool enableCallConvLowering)
void registerCIRAliasAnalyses (mlir::AliasAnalysis &aa, mlir::Operation *op)
 Register all CIR alias analysis implementations with aa, which answers queries about values within op.
constexpr OverflowBehavior operator| (OverflowBehavior a, OverflowBehavior b)
constexpr OverflowBehavior operator& (OverflowBehavior a, OverflowBehavior b)
constexpr OverflowBehavior & operator|= (OverflowBehavior &a, OverflowBehavior b)
constexpr OverflowBehavior & operator&= (OverflowBehavior &a, OverflowBehavior b)
constexpr bool testFlag (OverflowBehavior ob, OverflowBehavior flag)
void buildTerminatedBody (mlir::OpBuilder &builder, mlir::Location loc)
template<typename Op>
Op::Properties getDefaultProperties (mlir::MLIRContext *context)
 The properties of Op with every ODS-declared default applied.
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.
AllocaOp getUnderlyingAlloca (mlir::Value addr)
 The alloca that defines addr, looking through casts that preserve the underlying storage.
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)
mlir::ParseResult parseOmittedTerminatorRegion (mlir::OpAsmParser &parser, mlir::Region &region)
void printOmittedTerminatorRegion (mlir::OpAsmPrinter &printer, cir::ScopeOp &op, mlir::Region &region)
mlir::OptionalParseResult parseGlobalMemorySpace (mlir::AsmParser &p, mlir::ptr::MemorySpaceAttrInterface &attr)
void printGlobalMemorySpace (mlir::AsmPrinter &printer, cir::GlobalOp op, mlir::ptr::MemorySpaceAttrInterface attr)
mlir::ParseResult parseAssumeBundle (mlir::OpAsmParser &p, cir::AssumeBundleKindAttr &bundleKindAttr, llvm::SmallVector< mlir::OpAsmParser::UnresolvedOperand, 4 > &bundleArgs, llvm::SmallVector< mlir::Type, 1 > &bundleArgTypes)
void printAssumeBundle (mlir::OpAsmPrinter &p, cir::AssumeOp op, cir::AssumeBundleKindAttr kindAttr, mlir::OperandRange bundleArgs, mlir::TypeRange bundleArgTypes)
mlir::ParseResult parseIndirectBrOpSucessors (mlir::OpAsmParser &parser, mlir::Type &flagType, llvm::SmallVectorImpl< mlir::Block * > &succOperandBlocks, llvm::SmallVectorImpl< llvm::SmallVector< mlir::OpAsmParser::UnresolvedOperand > > &succOperands, llvm::SmallVectorImpl< llvm::SmallVector< mlir::Type > > &succOperandsTypes)
void printIndirectBrOpSucessors (mlir::OpAsmPrinter &p, cir::IndirectBrOp op, mlir::Type flagType, mlir::SuccessorRange succs, mlir::OperandRangeRange succOperands, const mlir::TypeRangeRange &succOperandsTypes)
mlir::ParseResult parseSwitchFlatOpCases (mlir::OpAsmParser &parser, mlir::Type flagType, mlir::ArrayAttr &caseValues, llvm::SmallVectorImpl< mlir::Block * > &caseDestinations, llvm::SmallVectorImpl< llvm::SmallVector< mlir::OpAsmParser::UnresolvedOperand > > &caseOperands, llvm::SmallVectorImpl< llvm::SmallVector< mlir::Type > > &caseOperandTypes)
void printSwitchFlatOpCases (mlir::OpAsmPrinter &p, cir::SwitchFlatOp op, mlir::Type flagType, mlir::ArrayAttr caseValues, mlir::SuccessorRange caseDestinations, mlir::OperandRangeRange caseOperands, const mlir::TypeRangeRange &caseOperandTypes)
mlir::ParseResult parseComdatName (mlir::OpAsmParser &parser, mlir::StringAttr &comdatAttr)
void printComdatName (mlir::OpAsmPrinter &p, cir::GlobalOp op, mlir::StringAttr comdat)
mlir::ParseResult parseGlobalOpTypeAndInitialValue (mlir::OpAsmParser &parser, mlir::TypeAttr &typeAttr, mlir::Attribute &initialValueAttr, mlir::Region &ctorRegion, mlir::Region &dtorRegion)
void printGlobalOpTypeAndInitialValue (mlir::OpAsmPrinter &p, cir::GlobalOp op, mlir::TypeAttr type, mlir::Attribute initAttr, mlir::Region &ctorRegion, mlir::Region &dtorRegion)
mlir::ParseResult parseCopyTypes (mlir::OpAsmParser &parser, mlir::Type &srcType, mlir::Type &dstType)
void printCopyTypes (mlir::OpAsmPrinter &printer, mlir::Operation *, mlir::Type srcType, mlir::Type dstType)
mlir::ParseResult parseTryHandlerRegions (mlir::OpAsmParser &parser, llvm::SmallVectorImpl< std::unique_ptr< mlir::Region > > &handlerRegions, mlir::ArrayAttr &handlerTypes)
void printTryHandlerRegions (mlir::OpAsmPrinter &printer, cir::TryOp op, mlir::MutableArrayRef< mlir::Region > handlerRegions, mlir::ArrayAttr handlerTypes)
mlir::ParseResult parseEhDispatchDestinations (mlir::OpAsmParser &parser, mlir::ArrayAttr &catchTypes, llvm::SmallVectorImpl< mlir::Block * > &catchDestinations, mlir::Block *&defaultDestination, mlir::UnitAttr &defaultIsCatchAll)
void printEhDispatchDestinations (mlir::OpAsmPrinter &p, cir::EhDispatchOp op, mlir::ArrayAttr catchTypes, mlir::SuccessorRange catchDestinations, mlir::Block *defaultDestination, mlir::UnitAttr defaultIsCatchAll)
std::unique_ptr< CIRABIClassifier > createTestTargetABIClassifier (const mlir::DataLayout &dl)
 The MLIR test ABI target's classifier, whose predictable rules approximate x86_64 SysV.
std::unique_ptr< CIRABIClassifier > createInjectedABIClassifier (const mlir::DataLayout &dl, llvm::StringRef attrName)
 A classifier that reads each function's classification from the DictionaryAttr named attrName.
std::unique_ptr< CIRABIClassifier > createX86_64ABIClassifier (const mlir::DataLayout &dl, mlir::ModuleOp modOp, const ABIClassifierOptions &options)
 The x86_64 System V classifier.
std::unique_ptr< CIRABIClassifier > createAMDGPUABIClassifier (const mlir::DataLayout &dl, mlir::ModuleOp modOp)
 The AMDGPU classifier.
llvm::CallingConv::ID convertCallingConv (cir::CallingConv cc)
 Map a CIR calling convention to the llvm::CallingConv the ABI classifier uses.
cir::FuncType getIndirectCalleeType (cir::CIRCallOpInterface call)
 The signature the indirect call call reaches its callee through.
std::unique_ptr< CIRCXXABI > createItaniumCXXABI (LowerModule &lm)
 Creates an Itanium-family ABI.
std::unique_ptr< CIRCXXABI > createMicrosoftCXXABI (LowerModule &lm)
 Creates a Microsoft-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< CIRCXXABI > createCXXABI (LowerModule &lm)
static std::unique_ptr< TargetLoweringInfo > createTargetLoweringInfo (LowerModule &lm)
std::unique_ptr< LowerModule > createLowerModule (mlir::ModuleOp module)
std::unique_ptr< TargetLoweringInfo > createAMDGPUTargetLoweringInfo ()
std::unique_ptr< TargetLoweringInfo > createNVPTXTargetLoweringInfo ()
std::unique_ptr< TargetLoweringInfo > createCommonSPIRTargetLoweringInfo ()
std::unique_ptr< TargetLoweringInfo > createSPIRVTargetLoweringInfo ()
static std::optional< mlir::FileLineColLoc > findFileLineColLoc (mlir::Location loc)
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 void printCIRModule (mlir::ModuleOp MLIRModule, raw_ostream &OS)
static void embedSYCLDeviceBinary (CompilerInstance &CI, llvm::Module &M)
static void emitCIRModuleOutput (CIRGenAction::OutputType Action, CompilerInstance &CI, mlir::ModuleOp MlirModule, llvm::LLVMContext &LLVMCtx, SmallVectorImpl<::clang::LinkModule > &LinkModules, BackendDiagnosticConsumer &DiagConsumer, std::unique_ptr< raw_pwrite_stream > OutputStream, llvm::function_ref< void(llvm::Module &)> AddFunctionSourceLocations={})
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 llvm::Triple &triple, clang::LangOptions::ClangABI compat)
 Whether __attribute__((target(...))) on a function may raise its AVX ABI level above the command line's.
static llvm::abi::X86ABICompatInfo getX86ABICompatInfo (const llvm::Triple &triple, clang::LangOptions::ClangABI compat)
 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 
AMDGPU 

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 llvm::Triple & triple,
clang::LangOptions::ClangABI compat )
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.

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 53 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

◆ 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 730 of file LowerItaniumCXXABI.cpp.

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

◆ 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().

◆ convertCallingConv()

llvm::CallingConv::ID cir::convertCallingConv ( cir::CallingConv cc)

Map a CIR calling convention to the llvm::CallingConv the ABI classifier uses.

FIXME: Only the AMDGPU kernel convention is mapped.

Conventions the classifier does not distinguish fall back to C.

Every other convention is classified as C.

Definition at line 761 of file CIRABIClassifier.cpp.

Referenced by cir::CIRABIClassifierCommon::classifyFunction(), and cir::CIRABIClassifierCommon::classifyVariadicCall().

◆ createAMDGPUABIClassifier()

std::unique_ptr< CIRABIClassifier > cir::createAMDGPUABIClassifier ( const mlir::DataLayout & dl,
mlir::ModuleOp modOp )

The AMDGPU classifier.

Definition at line 58 of file CIRABIClassifierAMDGPU.cpp.

Referenced by createABIClassifier().

◆ createAMDGPUTargetLoweringInfo()

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

Definition at line 50 of file AMDGPU.cpp.

Referenced by createTargetLoweringInfo().

◆ createCommonSPIRTargetLoweringInfo()

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

Definition at line 53 of file SPIRV.cpp.

Referenced by createTargetLoweringInfo().

◆ createCXXABI()

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

◆ createInjectedABIClassifier()

std::unique_ptr< CIRABIClassifier > cir::createInjectedABIClassifier ( const mlir::DataLayout & dl,
llvm::StringRef attrName )

A classifier that reads each function's classification from the DictionaryAttr named attrName.

Definition at line 978 of file CIRABIClassifier.cpp.

Referenced by createABIClassifier().

◆ createItaniumCXXABI()

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

Creates an Itanium-family ABI.

Definition at line 131 of file LowerItaniumCXXABI.cpp.

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

Referenced by createCXXABI().

◆ createLowerModule()

◆ createMicrosoftCXXABI()

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

Creates a Microsoft-family ABI.

Definition at line 153 of file LowerMicrosoftCXXABI.cpp.

Referenced by createCXXABI().

◆ 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 57 of file SPIRV.cpp.

Referenced by createTargetLoweringInfo().

◆ createTargetLoweringInfo()

◆ createTestTargetABIClassifier()

std::unique_ptr< CIRABIClassifier > cir::createTestTargetABIClassifier ( const mlir::DataLayout & dl)

The MLIR test ABI target's classifier, whose predictable rules approximate x86_64 SysV.

Definition at line 973 of file CIRABIClassifier.cpp.

Referenced by createABIClassifier().

◆ createX86_64ABIClassifier()

std::unique_ptr< CIRABIClassifier > cir::createX86_64ABIClassifier ( const mlir::DataLayout & dl,
mlir::ModuleOp modOp,
const ABIClassifierOptions & options )

The x86_64 System V classifier.

Definition at line 112 of file CIRABIClassifierX86_64.cpp.

Referenced by createABIClassifier().

◆ embedSYCLDeviceBinary()

◆ emitCIRModuleOutput()

void cir::emitCIRModuleOutput ( CIRGenAction::OutputType Action,
CompilerInstance & CI,
mlir::ModuleOp MlirModule,
llvm::LLVMContext & LLVMCtx,
SmallVectorImpl<::clang::LinkModule > & LinkModules,
BackendDiagnosticConsumer & DiagConsumer,
std::unique_ptr< raw_pwrite_stream > OutputStream,
llvm::function_ref< void(llvm::Module &)> AddFunctionSourceLocations = {} )
static

◆ findFileLineColLoc()

std::optional< mlir::FileLineColLoc > cir::findFileLineColLoc ( mlir::Location loc)
static

Definition at line 74 of file CIRDiagnosticHandler.cpp.

References findFileLineColLoc().

Referenced by findFileLineColLoc().

◆ 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 25 of file CIRPasses.cpp.

References None, and X86_64.

Referenced by runCIRToCIRPasses().

◆ getDefaultProperties()

template<typename Op>
Op::Properties cir::getDefaultProperties ( mlir::MLIRContext * context)

The properties of Op with every ODS-declared default applied.

The aggregate op builders that take a Properties struct do not apply those defaults themselves, so callers of those builders have to do it here.

Definition at line 87 of file CIRDialect.h.

Referenced by emitNeonCallToOp(), clang::CIRGen::CIRGenFunction::emitOpenACCLoopConstruct(), cir::direct::lowerConstrainableFPOp(), and cir::direct::lowerFPVectorReduction().

◆ 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 43 of file CIRTypes.cpp.

Referenced by abiTypeToCIR().

◆ getIndirectCalleeType()

cir::FuncType cir::getIndirectCalleeType ( cir::CIRCallOpInterface call)

The signature the indirect call call reaches its callee through.

Definition at line 1717 of file CIRABIRewriteContext.cpp.

Referenced by cir::CIRABIClassifierCommon::classifyIndirectCall(), and cir::CIRABIRewriteContext::rewriteCallSite().

◆ 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 1142 of file CIRAttrs.cpp.

References tryGetRecordLayout().

◆ getUnderlyingAlloca()

cir::AllocaOp cir::getUnderlyingAlloca ( mlir::Value addr)

The alloca that defines addr, looking through casts that preserve the underlying storage.

Null when the chain does not end at an alloca.

Use the result only to inspect the allocation, such as its alignment or its allocated type. Addressing has to keep using addr, whose type and address space may differ from the alloca's own result.

Definition at line 520 of file CIRDialect.cpp.

Referenced by clang::CIRGen::Address::getUnderlyingAllocaOp(), and cir::CIRABIRewriteContext::rewriteCallSite().

◆ getX86ABICompatInfo()

llvm::abi::X86ABICompatInfo cir::getX86ABICompatInfo ( const llvm::Triple & triple,
clang::LangOptions::ClangABI compat )
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 56 of file CIRPasses.cpp.

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 48 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 1829 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 65 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 36 of file CIRTypes.cpp.

References cir::MissingFeatures::unsizedTypes().

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

◆ isSupportedCIRMemorySpaceAttr()

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

Definition at line 1674 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 461 of file LowerItaniumCXXABI.cpp.

References int64_t.

◆ 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 70 of file CIRGenAction.cpp.

◆ 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 511 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 126 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 135 of file CIRTypes.h.

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

◆ normalizeDefaultAddressSpace()

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

◆ 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.

◆ parseAssumeBundle()

mlir::ParseResult cir::parseAssumeBundle ( mlir::OpAsmParser & p,
cir::AssumeBundleKindAttr & bundleKindAttr,
llvm::SmallVector< mlir::OpAsmParser::UnresolvedOperand, 4 > & bundleArgs,
llvm::SmallVector< mlir::Type, 1 > & bundleArgTypes )

◆ parseComdatName()

mlir::ParseResult cir::parseComdatName ( mlir::OpAsmParser & parser,
mlir::StringAttr & comdatAttr )

◆ parseCopyTypes()

mlir::ParseResult cir::parseCopyTypes ( mlir::OpAsmParser & parser,
mlir::Type & srcType,
mlir::Type & dstType )

Definition at line 4034 of file CIRDialect.cpp.

◆ parseEhDispatchDestinations()

mlir::ParseResult cir::parseEhDispatchDestinations ( mlir::OpAsmParser & parser,
mlir::ArrayAttr & catchTypes,
llvm::SmallVectorImpl< mlir::Block * > & catchDestinations,
mlir::Block *& defaultDestination,
mlir::UnitAttr & defaultIsCatchAll )

◆ parseGlobalMemorySpace()

mlir::OptionalParseResult cir::parseGlobalMemorySpace ( mlir::AsmParser & p,
mlir::ptr::MemorySpaceAttrInterface & attr )

Definition at line 1791 of file CIRTypes.cpp.

References parseMemorySpace().

◆ parseGlobalOpTypeAndInitialValue()

mlir::ParseResult cir::parseGlobalOpTypeAndInitialValue ( mlir::OpAsmParser & parser,
mlir::TypeAttr & typeAttr,
mlir::Attribute & initialValueAttr,
mlir::Region & ctorRegion,
mlir::Region & dtorRegion )

◆ parseIndirectBrOpSucessors()

mlir::ParseResult cir::parseIndirectBrOpSucessors ( mlir::OpAsmParser & parser,
mlir::Type & flagType,
llvm::SmallVectorImpl< mlir::Block * > & succOperandBlocks,
llvm::SmallVectorImpl< llvm::SmallVector< mlir::OpAsmParser::UnresolvedOperand > > & succOperands,
llvm::SmallVectorImpl< llvm::SmallVector< mlir::Type > > & succOperandsTypes )

◆ parseOmittedTerminatorRegion()

mlir::ParseResult cir::parseOmittedTerminatorRegion ( mlir::OpAsmParser & parser,
mlir::Region & region )

Definition at line 488 of file CIRDialect.cpp.

References ensureRegionTerm().

◆ parseSwitchFlatOpCases()

mlir::ParseResult cir::parseSwitchFlatOpCases ( mlir::OpAsmParser & parser,
mlir::Type flagType,
mlir::ArrayAttr & caseValues,
llvm::SmallVectorImpl< mlir::Block * > & caseDestinations,
llvm::SmallVectorImpl< llvm::SmallVector< mlir::OpAsmParser::UnresolvedOperand > > & caseOperands,
llvm::SmallVectorImpl< llvm::SmallVector< mlir::Type > > & caseOperandTypes )

◆ parseTryHandlerRegions()

mlir::ParseResult cir::parseTryHandlerRegions ( mlir::OpAsmParser & parser,
llvm::SmallVectorImpl< std::unique_ptr< mlir::Region > > & handlerRegions,
mlir::ArrayAttr & handlerTypes )

Definition at line 5383 of file CIRDialect.cpp.

◆ printAssumeBundle()

void cir::printAssumeBundle ( mlir::OpAsmPrinter & p,
cir::AssumeOp op,
cir::AssumeBundleKindAttr kindAttr,
mlir::OperandRange bundleArgs,
mlir::TypeRange bundleArgTypes )

◆ printCIRModule()

void cir::printCIRModule ( mlir::ModuleOp MLIRModule,
raw_ostream & OS )
static

Definition at line 80 of file CIRGenAction.cpp.

◆ printComdatName()

void cir::printComdatName ( mlir::OpAsmPrinter & p,
cir::GlobalOp op,
mlir::StringAttr comdat )

◆ printCopyTypes()

void cir::printCopyTypes ( mlir::OpAsmPrinter & printer,
mlir::Operation * ,
mlir::Type srcType,
mlir::Type dstType )

Definition at line 4025 of file CIRDialect.cpp.

◆ printEhDispatchDestinations()

void cir::printEhDispatchDestinations ( mlir::OpAsmPrinter & p,
cir::EhDispatchOp op,
mlir::ArrayAttr catchTypes,
mlir::SuccessorRange catchDestinations,
mlir::Block * defaultDestination,
mlir::UnitAttr defaultIsCatchAll )

◆ printGlobalMemorySpace()

void cir::printGlobalMemorySpace ( mlir::AsmPrinter & printer,
cir::GlobalOp op,
mlir::ptr::MemorySpaceAttrInterface attr )

Definition at line 1800 of file CIRTypes.cpp.

References printMemorySpace().

◆ printGlobalOpTypeAndInitialValue()

void cir::printGlobalOpTypeAndInitialValue ( mlir::OpAsmPrinter & p,
cir::GlobalOp op,
mlir::TypeAttr type,
mlir::Attribute initAttr,
mlir::Region & ctorRegion,
mlir::Region & dtorRegion )

◆ printIndirectBrOpSucessors()

void cir::printIndirectBrOpSucessors ( mlir::OpAsmPrinter & p,
cir::IndirectBrOp op,
mlir::Type flagType,
mlir::SuccessorRange succs,
mlir::OperandRangeRange succOperands,
const mlir::TypeRangeRange & succOperandsTypes )

◆ printOmittedTerminatorRegion()

void cir::printOmittedTerminatorRegion ( mlir::OpAsmPrinter & printer,
cir::ScopeOp & op,
mlir::Region & region )

Definition at line 498 of file CIRDialect.cpp.

References omitRegionTerm().

◆ printSwitchFlatOpCases()

void cir::printSwitchFlatOpCases ( mlir::OpAsmPrinter & p,
cir::SwitchFlatOp op,
mlir::Type flagType,
mlir::ArrayAttr caseValues,
mlir::SuccessorRange caseDestinations,
mlir::OperandRangeRange caseOperands,
const mlir::TypeRangeRange & caseOperandTypes )

◆ printTryHandlerRegions()

void cir::printTryHandlerRegions ( mlir::OpAsmPrinter & printer,
cir::TryOp op,
mlir::MutableArrayRef< mlir::Region > handlerRegions,
mlir::ArrayAttr handlerTypes )

Definition at line 5340 of file CIRDialect.cpp.

◆ registerAllDialects() [1/2]

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

◆ registerAllDialects() [2/2]

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

Definition at line 37 of file RegisterAllDialects.cpp.

References registerAllDialects().

◆ registerCIRAliasAnalyses()

void cir::registerCIRAliasAnalyses ( mlir::AliasAnalysis & aa,
mlir::Operation * op )

Register all CIR alias analysis implementations with aa, which answers queries about values within op.

Pass the same operation aa was created for; the implementations use the data layout in effect at op, so values from a different layout scope must not be queried.

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

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

Definition at line 12 of file CIRAliasAnalysis.cpp.

Referenced by cir::CIRABIRewriteContext::CIRABIRewriteContext().

◆ 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 try_throw's normal destination is a new block, inserted right after the throw's block, that holds only a cir.unreachable; it is returned to the caller. The ops that followed the throw in its block (typically a cir.unreachable) are erased.

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 105 of file CIRTransformUtils.cpp.

◆ runCIRToCIRPasses()

mlir::LogicalResult cir::runCIRToCIRPasses ( mlir::ModuleOp theModule,
mlir::MLIRContext & mlirCtx,
bool enableVerifier,
bool enableIdiomRecognizer,
bool enableCIRSimplify,
bool enableLibOpt,
llvm::StringRef libOptOptions,
bool enableCallConvLowering )

◆ 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()

◆ toCIRLangAddressSpace()

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

Definition at line 1680 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 1131 of file CIRAttrs.cpp.

Referenced by getRecordLayout(), recordCanPassInRegs(), recordDeclaredAlign(), recordIsTransparentUnion(), and recordUnadjustedAlign().