|
clang 23.0.0git
|
Classes | |
| class | CIRAttrToValue |
| class | CIRDialectLLVMIRTranslationInterface |
| Implementation of the dialect interface that converts CIR attributes to LLVM IR metadata. More... | |
| struct | ConvertCIRToLLVMPass |
| class | GlobalInitAttrRewriter |
| struct | LLVMBlockAddressInfo |
Functions | |
| std::unique_ptr< llvm::Module > | lowerDirectlyFromCIRToLLVMIR (mlir::ModuleOp mlirModule, llvm::LLVMContext &llvmCtx, llvm::StringRef mlirSaveTempsOutFile={}, llvm::vfs::FileSystem *fs=nullptr) |
| std::unique_ptr< mlir::Pass > | createConvertCIRToLLVMPass () |
| Create a pass that fully lowers CIR to the LLVMIR dialect. | |
| void | populateCIRToLLVMPasses (mlir::OpPassManager &pm) |
| Adds passes that fully lower CIR to the LLVMIR dialect. | |
| static mlir::Type | convertTypeForMemory (const mlir::TypeConverter &converter, mlir::DataLayout const &dataLayout, mlir::Type type) |
| Given a type convertor and a data layout, convert the given type to a type that is suitable for memory operations. | |
| static mlir::Value | createIntCast (mlir::OpBuilder &bld, mlir::Value src, mlir::IntegerType dstTy, bool isSigned=false) |
| static mlir::LLVM::Visibility | lowerCIRVisibilityToLLVMVisibility (cir::VisibilityKind visibilityKind) |
| static mlir::Value | emitFromMemory (mlir::ConversionPatternRewriter &rewriter, mlir::DataLayout const &dataLayout, cir::LoadOp op, mlir::Value value) |
| Emits the value from memory as expected by its users. | |
| static mlir::Value | emitToMemory (mlir::ConversionPatternRewriter &rewriter, mlir::DataLayout const &dataLayout, mlir::Type origType, mlir::Value value) |
| Emits a value to memory with the expected scalar type. | |
| mlir::LLVM::Linkage | convertLinkage (cir::GlobalLinkageKind linkage) |
| static mlir::LLVM::CConv | convertCallingConv (cir::CallingConv callingConv) |
| static mlir::Value | getLLVMIntCast (mlir::ConversionPatternRewriter &rewriter, mlir::Value llvmSrc, mlir::Type llvmDstIntTy, bool isUnsigned, uint64_t cirSrcWidth, uint64_t cirDstIntWidth) |
| mlir::Value | lowerCirAttrAsValue (mlir::Operation *parentOp, const mlir::Attribute attr, mlir::ConversionPatternRewriter &rewriter, const mlir::TypeConverter *converter) |
| Switches on the type of attribute and calls the appropriate conversion. | |
| void | convertSideEffectForCall (mlir::Operation *callOp, bool isNothrow, cir::SideEffect sideEffect, mlir::LLVM::MemoryEffectsAttr &memoryEffect, bool &noUnwind, bool &willReturn, bool &noReturn) |
| static mlir::LLVM::CallIntrinsicOp | createCallLLVMIntrinsicOp (mlir::ConversionPatternRewriter &rewriter, mlir::Location loc, const llvm::Twine &intrinsicName, mlir::Type resultTy, mlir::ValueRange operands) |
| static mlir::LLVM::CallIntrinsicOp | replaceOpWithCallLLVMIntrinsicOp (mlir::ConversionPatternRewriter &rewriter, mlir::Operation *op, const llvm::Twine &intrinsicName, mlir::Type resultTy, mlir::ValueRange operands) |
| static mlir::LLVM::AtomicOrdering | getLLVMMemOrder (std::optional< cir::MemOrder > memorder) |
| static llvm::StringRef | getLLVMSyncScope (cir::SyncScopeKind syncScope) |
| static std::optional< llvm::StringRef > | getLLVMSyncScope (std::optional< cir::SyncScopeKind > syncScope) |
| static mlir::LLVM::AtomicBinOp | getLLVMAtomicBinOp (cir::AtomicFetchKind k, bool isInt, bool isSignedInt) |
| static llvm::StringLiteral | getLLVMBinopForPostAtomic (cir::AtomicFetchKind k, bool isInt) |
| static mlir::Value | convertToIndexTy (mlir::ConversionPatternRewriter &rewriter, mlir::ModuleOp mod, mlir::Value index, mlir::Type baseTy, cir::IntType strideTy) |
| static void | lowerCallAttributes (cir::CIRCallOpInterface op, SmallVectorImpl< mlir::NamedAttribute > &result) |
| static mlir::LogicalResult | rewriteCallOrInvoke (mlir::Operation *op, mlir::ValueRange callOperands, mlir::ConversionPatternRewriter &rewriter, const mlir::TypeConverter *converter, mlir::SymbolTableCollection &symbolTables, mlir::FlatSymbolRefAttr calleeAttr, mlir::Block *continueBlock=nullptr, mlir::Block *landingPadBlock=nullptr) |
| bool | hasTrailingZeros (cir::ConstArrayAttr attr) |
| static uint64_t | getTypeSize (mlir::Type type, mlir::Operation &op) |
| static mlir::LLVM::IntegerOverflowFlags | nswFlag (bool nsw) |
| template<typename CIROp, typename LLVMIntOp> | |
| static mlir::LogicalResult | lowerIncDecOp (CIROp op, typename CIROp::Adaptor adaptor, mlir::ConversionPatternRewriter &rewriter, double fpConstant) |
| static bool | isIntTypeUnsigned (mlir::Type type) |
| template<typename BinOp> | |
| static mlir::LLVM::IntegerOverflowFlags | intOverflowFlag (BinOp op) |
| template<typename UIntSatOp, typename SIntSatOp, typename IntOp, typename FPOp, typename CIROp> | |
| static mlir::LogicalResult | lowerSaturatableArithOp (CIROp op, mlir::Value lhs, mlir::Value rhs, mlir::ConversionPatternRewriter &rewriter) |
| Lower an arithmetic op that supports saturation, overflow flags, and an FP variant. | |
| template<typename UIntOp, typename SIntOp, typename FPOp, typename CIROp> | |
| static mlir::LogicalResult | lowerIntFPBinaryOp (CIROp op, mlir::Value lhs, mlir::Value rhs, mlir::ConversionPatternRewriter &rewriter) |
| Lower a binary op that maps to unsigned/signed/FP LLVM ops depending on operand type. | |
| template<typename CIROp, typename UIntOp, typename SIntOp> | |
| static mlir::LogicalResult | lowerMinMaxOp (CIROp op, typename CIROp::Adaptor adaptor, mlir::ConversionPatternRewriter &rewriter) |
| static mlir::LLVM::ICmpPredicate | convertCmpKindToICmpPredicate (cir::CmpOpKind kind, bool isSigned) |
| Convert from a CIR comparison kind to an LLVM IR integral comparison kind. | |
| static mlir::LLVM::FCmpPredicate | convertCmpKindToFCmpPredicate (cir::CmpOpKind kind) |
| Convert from a CIR comparison kind to an LLVM IR floating-point comparison kind. | |
| template<typename OpTy> | |
| static mlir::LogicalResult | lowerBinOpOverflow (OpTy op, typename OpTy::Adaptor adaptor, mlir::ConversionPatternRewriter &rewriter, const mlir::TypeConverter *typeConverter, llvm::StringRef opStr) |
| Shared lowering logic for checked binary arithmetic overflow operations. | |
| static void | prepareTypeConverter (mlir::LLVMTypeConverter &converter, mlir::DataLayout &dataLayout) |
| static void | buildCtorDtorList (mlir::ModuleOp module, StringRef globalXtorName, StringRef llvmXtorName, llvm::function_ref< std::pair< StringRef, int >(mlir::Attribute)> createXtor) |
| void | createLLVMFuncOpIfNotExist (mlir::ConversionPatternRewriter &rewriter, mlir::Operation *srcOp, llvm::StringRef fnName, mlir::Type fnTy, mlir::ArrayAttr argAttrs=nullptr, mlir::ArrayAttr resAttrs=nullptr) |
| static mlir::LLVM::LLVMStructType | getLLVMLandingPadStructTy (mlir::ConversionPatternRewriter &rewriter) |
| static mlir::Value | getValueForVTableSymbol (mlir::Operation *op, mlir::ConversionPatternRewriter &rewriter, const mlir::TypeConverter *converter, mlir::FlatSymbolRefAttr nameAttr, mlir::Type &eltType) |
| mlir::IntegerType | computeBitfieldIntType (mlir::Type storageType, mlir::MLIRContext *context, unsigned &storageSize) |
| std::unique_ptr< llvm::Module > | lowerDirectlyFromCIRToLLVMIR (mlir::ModuleOp mlirModule, LLVMContext &llvmCtx, StringRef mlirSaveTempsOutFile, llvm::vfs::FileSystem *fs) |
| void | registerCIRDialectTranslation (mlir::DialectRegistry ®istry) |
|
static |
Definition at line 3334 of file LowerToLLVM.cpp.
Referenced by cir::direct::ConvertCIRToLLVMPass::runOnOperation().
| mlir::IntegerType cir::direct::computeBitfieldIntType | ( | mlir::Type | storageType, |
| mlir::MLIRContext * | context, | ||
| unsigned & | storageSize ) |
Definition at line 4552 of file LowerToLLVM.cpp.
References computeBitfieldIntType().
Referenced by computeBitfieldIntType().
|
static |
Definition at line 192 of file LowerToLLVM.cpp.
|
static |
Convert from a CIR comparison kind to an LLVM IR floating-point comparison kind.
Definition at line 2865 of file LowerToLLVM.cpp.
References kind.
|
static |
Convert from a CIR comparison kind to an LLVM IR integral comparison kind.
Definition at line 2839 of file LowerToLLVM.cpp.
References kind.
| mlir::LLVM::Linkage cir::direct::convertLinkage | ( | cir::GlobalLinkageKind | linkage | ) |
Definition at line 161 of file LowerToLLVM.cpp.
| void cir::direct::convertSideEffectForCall | ( | mlir::Operation * | callOp, |
| bool | isNothrow, | ||
| cir::SideEffect | sideEffect, | ||
| mlir::LLVM::MemoryEffectsAttr & | memoryEffect, | ||
| bool & | noUnwind, | ||
| bool & | willReturn, | ||
| bool & | noReturn ) |
Definition at line 313 of file LowerToLLVM.cpp.
Referenced by rewriteCallOrInvoke().
|
static |
Definition at line 1432 of file LowerToLLVM.cpp.
References getLLVMIntCast(), and isUnsigned().
|
static |
Given a type convertor and a data layout, convert the given type to a type that is suitable for memory operations.
For example, this can be used to lower cir.bool accesses to i8.
Definition at line 82 of file LowerToLLVM.cpp.
Referenced by prepareTypeConverter().
|
static |
Definition at line 356 of file LowerToLLVM.cpp.
Referenced by replaceOpWithCallLLVMIntrinsicOp().
| std::unique_ptr< mlir::Pass > cir::direct::createConvertCIRToLLVMPass | ( | ) |
Create a pass that fully lowers CIR to the LLVMIR dialect.
Definition at line 5017 of file LowerToLLVM.cpp.
References createConvertCIRToLLVMPass().
Referenced by createConvertCIRToLLVMPass(), and populateCIRToLLVMPasses().
|
static |
Definition at line 95 of file LowerToLLVM.cpp.
Referenced by emitFromMemory(), and emitToMemory().
| void cir::direct::createLLVMFuncOpIfNotExist | ( | mlir::ConversionPatternRewriter & | rewriter, |
| mlir::Operation * | srcOp, | ||
| llvm::StringRef | fnName, | ||
| mlir::Type | fnTy, | ||
| mlir::ArrayAttr | argAttrs = nullptr, | ||
| mlir::ArrayAttr | resAttrs = nullptr ) |
Definition at line 3851 of file LowerToLLVM.cpp.
References createLLVMFuncOpIfNotExist().
Referenced by createLLVMFuncOpIfNotExist().
|
static |
Emits the value from memory as expected by its users.
Should be called when the memory represetnation of a CIR type is not equal to its scalar representation.
Definition at line 129 of file LowerToLLVM.cpp.
References createIntCast().
|
static |
Emits a value to memory with the expected scalar type.
Should be called when the memory represetnation of a CIR type is not equal to its scalar representation.
Definition at line 146 of file LowerToLLVM.cpp.
References createIntCast().
|
static |
Definition at line 959 of file LowerToLLVM.cpp.
|
static |
Definition at line 993 of file LowerToLLVM.cpp.
|
static |
Definition at line 266 of file LowerToLLVM.cpp.
References isUnsigned().
Referenced by convertToIndexTy().
|
static |
Definition at line 3942 of file LowerToLLVM.cpp.
References getLLVMLandingPadStructTy().
Referenced by getLLVMLandingPadStructTy().
|
static |
Definition at line 837 of file LowerToLLVM.cpp.
|
static |
Definition at line 856 of file LowerToLLVM.cpp.
Referenced by getLLVMSyncScope().
|
static |
Definition at line 861 of file LowerToLLVM.cpp.
References getLLVMSyncScope().
|
static |
Definition at line 2093 of file LowerToLLVM.cpp.
|
static |
Definition at line 4084 of file LowerToLLVM.cpp.
References getValueForVTableSymbol().
Referenced by getValueForVTableSymbol().
| bool cir::direct::hasTrailingZeros | ( | cir::ConstArrayAttr | attr | ) |
Definition at line 1936 of file LowerToLLVM.cpp.
|
static |
Definition at line 2691 of file LowerToLLVM.cpp.
Referenced by lowerSaturatableArithOp().
|
static |
Definition at line 2679 of file LowerToLLVM.cpp.
Referenced by lowerIntFPBinaryOp(), lowerMinMaxOp(), and lowerSaturatableArithOp().
|
static |
Shared lowering logic for checked binary arithmetic overflow operations.
The opStr parameter specifies the arithmetic operation name used in the LLVM intrinsic (e.g., "add", "sub", "mul").
Definition at line 2994 of file LowerToLLVM.cpp.
References sign().
|
static |
Definition at line 1677 of file LowerToLLVM.cpp.
References cir::MissingFeatures::opFuncExtraAttrs().
Referenced by rewriteCallOrInvoke().
| mlir::Value cir::direct::lowerCirAttrAsValue | ( | mlir::Operation * | parentOp, |
| mlir::Attribute | attr, | ||
| mlir::ConversionPatternRewriter & | rewriter, | ||
| const mlir::TypeConverter * | converter ) |
Switches on the type of attribute and calls the appropriate conversion.
Convert a CIR attribute to an LLVM attribute.
May use the datalayout for lowering attributes to-be-stored in memory.
Definition at line 302 of file LowerToLLVM.cpp.
|
static |
Definition at line 115 of file LowerToLLVM.cpp.
| std::unique_ptr< llvm::Module > cir::direct::lowerDirectlyFromCIRToLLVMIR | ( | mlir::ModuleOp | mlirModule, |
| llvm::LLVMContext & | llvmCtx, | ||
| llvm::StringRef | mlirSaveTempsOutFile = {}, | ||
| llvm::vfs::FileSystem * | fs = nullptr ) |
Referenced by lowerDirectlyFromCIRToLLVMIR().
| std::unique_ptr< llvm::Module > cir::direct::lowerDirectlyFromCIRToLLVMIR | ( | mlir::ModuleOp | mlirModule, |
| LLVMContext & | llvmCtx, | ||
| StringRef | mlirSaveTempsOutFile, | ||
| llvm::vfs::FileSystem * | fs ) |
Definition at line 5028 of file LowerToLLVM.cpp.
References lowerDirectlyFromCIRToLLVMIR(), populateCIRToLLVMPasses(), and mlir::registerCIRDialectTranslation().
|
static |
Definition at line 2584 of file LowerToLLVM.cpp.
References nswFlag().
|
static |
Lower a binary op that maps to unsigned/signed/FP LLVM ops depending on operand type.
Used for Div and Rem which share identical dispatch logic.
Definition at line 2756 of file LowerToLLVM.cpp.
References isIntTypeUnsigned().
|
static |
Definition at line 2812 of file LowerToLLVM.cpp.
References isIntTypeUnsigned().
|
static |
Lower an arithmetic op that supports saturation, overflow flags, and an FP variant.
Used for Add and Sub which share identical dispatch logic.
Definition at line 2704 of file LowerToLLVM.cpp.
References intOverflowFlag(), and isIntTypeUnsigned().
|
static |
Definition at line 2577 of file LowerToLLVM.cpp.
Referenced by lowerIncDecOp().
| void cir::direct::populateCIRToLLVMPasses | ( | mlir::OpPassManager & | pm | ) |
Adds passes that fully lower CIR to the LLVMIR dialect.
Definition at line 5021 of file LowerToLLVM.cpp.
References createConvertCIRToLLVMPass(), mlir::populateCIRPreLoweringPasses(), and populateCIRToLLVMPasses().
Referenced by lowerDirectlyFromCIRToLLVMIR(), and populateCIRToLLVMPasses().
|
static |
Definition at line 3220 of file LowerToLLVM.cpp.
References cir::MissingFeatures::addressSpace(), and convertTypeForMemory().
Referenced by cir::direct::ConvertCIRToLLVMPass::runOnOperation().
| void cir::direct::registerCIRDialectTranslation | ( | mlir::DialectRegistry & | registry | ) |
Definition at line 113 of file LowerToLLVMIR.cpp.
Referenced by mlir::registerCIRDialectTranslation().
|
static |
Definition at line 365 of file LowerToLLVM.cpp.
References createCallLLVMIntrinsicOp().
|
static |
Definition at line 1694 of file LowerToLLVM.cpp.
References convertSideEffectForCall(), lowerCallAttributes(), and cir::MissingFeatures::opCallCallConv().