clang 22.0.0git
cir::direct Namespace Reference

Classes

class  CIRAttrToValue
class  CIRDialectLLVMIRTranslationInterface
 Implementation of the dialect interface that converts CIR attributes to LLVM IR metadata. More...
struct  ConvertCIRToLLVMPass
class  GlobalInitAttrRewriter

Functions

std::unique_ptr< llvm::Module > lowerDirectlyFromCIRToLLVMIR (mlir::ModuleOp mlirModule, llvm::LLVMContext &llvmCtx)
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::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)
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 mlir::LLVM::AtomicBinOp getLLVMAtomicBinOp (cir::AtomicFetchKind k, bool isInt, bool isSignedInt)
static llvm::StringLiteral getLLVMBinop (cir::AtomicFetchKind k, bool isInt)
static mlir::LogicalResult rewriteCallOrInvoke (mlir::Operation *op, mlir::ValueRange callOperands, mlir::ConversionPatternRewriter &rewriter, const mlir::TypeConverter *converter, mlir::FlatSymbolRefAttr calleeAttr)
bool hasTrailingZeros (cir::ConstArrayAttr attr)
static uint64_t getTypeSize (mlir::Type type, mlir::Operation &op)
static bool isIntTypeUnsigned (mlir::Type type)
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.
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)
static void collectUnreachable (mlir::Operation *parent, llvm::SmallVector< mlir::Operation * > &ops)
void createLLVMFuncOpIfNotExist (mlir::ConversionPatternRewriter &rewriter, mlir::Operation *srcOp, llvm::StringRef fnName, mlir::Type fnTy)
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)
void registerCIRDialectTranslation (mlir::DialectRegistry &registry)

Function Documentation

◆ buildCtorDtorList()

void cir::direct::buildCtorDtorList ( mlir::ModuleOp module,
StringRef globalXtorName,
StringRef llvmXtorName,
llvm::function_ref< std::pair< StringRef, int >(mlir::Attribute)> createXtor )
static

Definition at line 2912 of file LowerToLLVM.cpp.

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

◆ collectUnreachable()

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

Definition at line 3010 of file LowerToLLVM.cpp.

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

◆ computeBitfieldIntType()

mlir::IntegerType cir::direct::computeBitfieldIntType ( mlir::Type storageType,
mlir::MLIRContext * context,
unsigned & storageSize )

Definition at line 3815 of file LowerToLLVM.cpp.

◆ convertCmpKindToFCmpPredicate()

mlir::LLVM::FCmpPredicate cir::direct::convertCmpKindToFCmpPredicate ( cir::CmpOpKind kind)
static

Convert from a CIR comparison kind to an LLVM IR floating-point comparison kind.

Definition at line 2484 of file LowerToLLVM.cpp.

◆ convertCmpKindToICmpPredicate()

mlir::LLVM::ICmpPredicate cir::direct::convertCmpKindToICmpPredicate ( cir::CmpOpKind kind,
bool isSigned )
static

Convert from a CIR comparison kind to an LLVM IR integral comparison kind.

Definition at line 2461 of file LowerToLLVM.cpp.

◆ convertLinkage()

mlir::LLVM::Linkage cir::direct::convertLinkage ( cir::GlobalLinkageKind linkage)

Definition at line 148 of file LowerToLLVM.cpp.

◆ convertSideEffectForCall()

void cir::direct::convertSideEffectForCall ( mlir::Operation * callOp,
bool isNothrow,
cir::SideEffect sideEffect,
mlir::LLVM::MemoryEffectsAttr & memoryEffect,
bool & noUnwind,
bool & willReturn )

Definition at line 279 of file LowerToLLVM.cpp.

Referenced by rewriteCallOrInvoke().

◆ convertTypeForMemory()

mlir::Type cir::direct::convertTypeForMemory ( const mlir::TypeConverter & converter,
mlir::DataLayout const & dataLayout,
mlir::Type type )
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 69 of file LowerToLLVM.cpp.

Referenced by prepareTypeConverter(), and cir::direct::CIRAttrToValue::visitCirAttr().

◆ createCallLLVMIntrinsicOp()

mlir::LLVM::CallIntrinsicOp cir::direct::createCallLLVMIntrinsicOp ( mlir::ConversionPatternRewriter & rewriter,
mlir::Location loc,
const llvm::Twine & intrinsicName,
mlir::Type resultTy,
mlir::ValueRange operands )
static

Definition at line 319 of file LowerToLLVM.cpp.

Referenced by replaceOpWithCallLLVMIntrinsicOp().

◆ createConvertCIRToLLVMPass()

std::unique_ptr< mlir::Pass > cir::direct::createConvertCIRToLLVMPass ( )

Create a pass that fully lowers CIR to the LLVMIR dialect.

Definition at line 4084 of file LowerToLLVM.cpp.

Referenced by populateCIRToLLVMPasses().

◆ createIntCast()

mlir::Value cir::direct::createIntCast ( mlir::OpBuilder & bld,
mlir::Value src,
mlir::IntegerType dstTy,
bool isSigned = false )
static

Definition at line 82 of file LowerToLLVM.cpp.

Referenced by emitFromMemory(), and emitToMemory().

◆ createLLVMFuncOpIfNotExist()

void cir::direct::createLLVMFuncOpIfNotExist ( mlir::ConversionPatternRewriter & rewriter,
mlir::Operation * srcOp,
llvm::StringRef fnName,
mlir::Type fnTy )

Definition at line 3168 of file LowerToLLVM.cpp.

◆ emitFromMemory()

mlir::Value cir::direct::emitFromMemory ( mlir::ConversionPatternRewriter & rewriter,
mlir::DataLayout const & dataLayout,
cir::LoadOp op,
mlir::Value value )
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 116 of file LowerToLLVM.cpp.

References createIntCast().

◆ emitToMemory()

mlir::Value cir::direct::emitToMemory ( mlir::ConversionPatternRewriter & rewriter,
mlir::DataLayout const & dataLayout,
mlir::Type origType,
mlir::Value value )
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 133 of file LowerToLLVM.cpp.

References createIntCast().

◆ getLLVMAtomicBinOp()

mlir::LLVM::AtomicBinOp cir::direct::getLLVMAtomicBinOp ( cir::AtomicFetchKind k,
bool isInt,
bool isSignedInt )
static

Definition at line 846 of file LowerToLLVM.cpp.

◆ getLLVMBinop()

llvm::StringLiteral cir::direct::getLLVMBinop ( cir::AtomicFetchKind k,
bool isInt )
static

Definition at line 876 of file LowerToLLVM.cpp.

◆ getLLVMIntCast()

mlir::Value cir::direct::getLLVMIntCast ( mlir::ConversionPatternRewriter & rewriter,
mlir::Value llvmSrc,
mlir::Type llvmDstIntTy,
bool isUnsigned,
uint64_t cirSrcWidth,
uint64_t cirDstIntWidth )
static

Definition at line 213 of file LowerToLLVM.cpp.

References isUnsigned().

◆ getLLVMLandingPadStructTy()

mlir::LLVM::LLVMStructType cir::direct::getLLVMLandingPadStructTy ( mlir::ConversionPatternRewriter & rewriter)
static

Definition at line 3252 of file LowerToLLVM.cpp.

◆ getLLVMMemOrder()

mlir::LLVM::AtomicOrdering cir::direct::getLLVMMemOrder ( std::optional< cir::MemOrder > memorder)
static

Definition at line 750 of file LowerToLLVM.cpp.

◆ getTypeSize()

uint64_t cir::direct::getTypeSize ( mlir::Type type,
mlir::Operation & op )
static

Definition at line 1799 of file LowerToLLVM.cpp.

◆ getValueForVTableSymbol()

mlir::Value cir::direct::getValueForVTableSymbol ( mlir::Operation * op,
mlir::ConversionPatternRewriter & rewriter,
const mlir::TypeConverter * converter,
mlir::FlatSymbolRefAttr nameAttr,
mlir::Type & eltType )
static

Definition at line 3352 of file LowerToLLVM.cpp.

◆ hasTrailingZeros()

bool cir::direct::hasTrailingZeros ( cir::ConstArrayAttr attr)

Definition at line 1657 of file LowerToLLVM.cpp.

◆ isIntTypeUnsigned()

bool cir::direct::isIntTypeUnsigned ( mlir::Type type)
static

Definition at line 2350 of file LowerToLLVM.cpp.

◆ lowerCirAttrAsValue()

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 268 of file LowerToLLVM.cpp.

References cir::direct::CIRAttrToValue::visit().

◆ lowerCIRVisibilityToLLVMVisibility()

mlir::LLVM::Visibility cir::direct::lowerCIRVisibilityToLLVMVisibility ( cir::VisibilityKind visibilityKind)
static

Definition at line 102 of file LowerToLLVM.cpp.

◆ lowerDirectlyFromCIRToLLVMIR() [1/2]

std::unique_ptr< llvm::Module > cir::direct::lowerDirectlyFromCIRToLLVMIR ( mlir::ModuleOp mlirModule,
llvm::LLVMContext & llvmCtx )

◆ lowerDirectlyFromCIRToLLVMIR() [2/2]

std::unique_ptr< llvm::Module > cir::direct::lowerDirectlyFromCIRToLLVMIR ( mlir::ModuleOp mlirModule,
LLVMContext & llvmCtx )

◆ populateCIRToLLVMPasses()

void cir::direct::populateCIRToLLVMPasses ( mlir::OpPassManager & pm)

Adds passes that fully lower CIR to the LLVMIR dialect.

Definition at line 4088 of file LowerToLLVM.cpp.

References createConvertCIRToLLVMPass(), and mlir::populateCIRPreLoweringPasses().

Referenced by lowerDirectlyFromCIRToLLVMIR().

◆ prepareTypeConverter()

void cir::direct::prepareTypeConverter ( mlir::LLVMTypeConverter & converter,
mlir::DataLayout & dataLayout )
static

◆ registerCIRDialectTranslation()

void cir::direct::registerCIRDialectTranslation ( mlir::DialectRegistry & registry)

Definition at line 52 of file LowerToLLVMIR.cpp.

Referenced by mlir::registerCIRDialectTranslation().

◆ replaceOpWithCallLLVMIntrinsicOp()

mlir::LLVM::CallIntrinsicOp cir::direct::replaceOpWithCallLLVMIntrinsicOp ( mlir::ConversionPatternRewriter & rewriter,
mlir::Operation * op,
const llvm::Twine & intrinsicName,
mlir::Type resultTy,
mlir::ValueRange operands )
static

Definition at line 328 of file LowerToLLVM.cpp.

References createCallLLVMIntrinsicOp().

◆ rewriteCallOrInvoke()

mlir::LogicalResult cir::direct::rewriteCallOrInvoke ( mlir::Operation * op,
mlir::ValueRange callOperands,
mlir::ConversionPatternRewriter & rewriter,
const mlir::TypeConverter * converter,
mlir::FlatSymbolRefAttr calleeAttr )
static