MLIR 23.0.0git
ModuleImport.cpp File Reference
#include "mlir/Target/LLVMIR/ModuleImport.h"
#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/Target/LLVMIR/Import.h"
#include "AttrKindDetail.h"
#include "DebugImporter.h"
#include "LoopAnnotationImporter.h"
#include "mlir/Dialect/DLTI/DLTI.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/Matchers.h"
#include "mlir/Interfaces/DataLayoutInterfaces.h"
#include "mlir/Target/LLVMIR/DataLayoutImporter.h"
#include "mlir/Tools/mlir-translate/Translation.h"
#include "llvm/ADT/DepthFirstIterator.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/ADT/ScopeExit.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/IR/Comdat.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DebugProgramInstruction.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Operator.h"
#include "llvm/Support/LogicalResult.h"
#include "llvm/Support/ModRef.h"
#include <optional>
#include "mlir/Dialect/LLVMIR/LLVMConversionEnumsFromLLVM.inc"
#include "mlir/Dialect/LLVMIR/LLVMOpFromLLVMIRConversions.inc"

Go to the source code of this file.

Functions

static std::string diag (const llvm::Value &value)
static std::string diagMD (const llvm::Metadata *node, const llvm::Module *module)
static constexpr StringRef getGlobalCtorsVarName ()
 Returns the name of the global_ctors global variables.
static constexpr StringRef getNamelessGlobalPrefix ()
 Prefix used for symbols of nameless llvm globals.
static constexpr StringRef getGlobalDtorsVarName ()
 Returns the name of the global_dtors global variables.
static constexpr StringRef getGlobalComdatOpName ()
 Returns the symbol name for the module-level comdat operation.
static StringRef getLLVMSyncScope (llvm::Instruction *inst)
 Converts the sync scope identifier of inst to the string representation necessary to build an atomic LLVM dialect operation.
static SmallVector< int64_tgetPositionFromIndices (ArrayRef< unsigned > indices)
 Converts an array of unsigned indices to a signed integer position array.
static LogicalResult convertInstructionImpl (OpBuilder &odsBuilder, llvm::Instruction *inst, ModuleImport &moduleImport, LLVMImportInterface &iface)
 Converts the LLVM instructions that have a generated MLIR builder.
static Attribute convertMetadataToAttrImpl (MLIRContext *ctx, const llvm::Metadata *md, SmallPtrSetImpl< const llvm::Metadata * > &path, DenseMap< const llvm::Metadata *, Attribute > &attrMap)
 Depth-first conversion of the metadata node md to the matching LLVM dialect metadata attribute.
static Attribute convertMetadataToAttr (MLIRContext *ctx, const llvm::Metadata *md)
 Converts the metadata node md to the matching LLVM dialect metadata attribute.
static SetVector< llvm::BasicBlock * > getTopologicallySortedBlocks (ArrayRef< llvm::BasicBlock * > basicBlocks)
 Get a topologically sorted list of blocks for the given basic blocks.
static Attribute convertCGProfileModuleFlagValue (ModuleOp mlirModule, llvm::MDTuple *mdTuple)
static llvm::MDTuple * getTwoElementMDTuple (ModuleOp mlirModule, const llvm::Module *llvmModule, const llvm::MDOperand &md)
 Extract a two element MDTuple from a MDOperand.
static llvm::ConstantAsMetadata * getConstantMDFromKeyValueTuple (ModuleOp mlirModule, const llvm::Module *llvmModule, const llvm::MDOperand &md, StringRef matchKey, bool optional=false)
 Extract a constant metadata value from a two element tuple (<key, value>).
static FailureOr< uint64_t > convertInt64FromKeyValueTuple (ModuleOp mlirModule, const llvm::Module *llvmModule, const llvm::MDOperand &md, StringRef matchKey)
 Extract an integer value from a two element tuple (<key, value>).
static std::optional< ProfileSummaryFormatKind > convertProfileSummaryFormat (ModuleOp mlirModule, const llvm::Module *llvmModule, const llvm::MDOperand &formatMD)
static FailureOr< SmallVector< ModuleFlagProfileSummaryDetailedAttr > > convertProfileSummaryDetailed (ModuleOp mlirModule, const llvm::Module *llvmModule, const llvm::MDOperand &summaryMD)
static Attribute convertProfileSummaryModuleFlagValue (ModuleOp mlirModule, const llvm::Module *llvmModule, llvm::MDTuple *mdTuple)
static Attribute convertModuleFlagValueFromMDTuple (ModuleOp mlirModule, const llvm::Module *llvmModule, StringRef key, llvm::MDTuple *mdTuple)
 Invoke specific handlers for each known module flag value, returns nullptr if the key is unknown or unimplemented.
static Type getVectorTypeForAttr (Type type, ArrayRef< int64_t > arrayShape={})
 Returns type if it is a builtin integer or floating-point vector type that can be used to create an attribute or nullptr otherwise.
static TypedAttr getScalarConstantAsAttr (OpBuilder &builder, llvm::Constant *constScalar)
 Returns an integer or float attribute for the provided scalar constant constScalar or nullptr if the conversion fails.
static SmallVector< AttributegetSequenceConstantAsAttrs (OpBuilder &builder, llvm::ConstantDataSequential *constSequence)
 Returns an integer or float attribute array for the provided constant sequence constSequence or nullptr if the conversion fails.
static ArrayAttr convertLLVMAttributesToMLIR (Location loc, MLIRContext *context, llvm::AttributeSet attributes, ArrayRef< StringLiteral > attributesToSkip={}, ArrayRef< StringLiteral > attributePrefixesToSkip={})
 Converts LLVM string, integer, and enum attributes into MLIR attributes, skipping those in attributesToSkip and emitting a warning at loc for any other unsupported attributes.
static void processTargetSpecificAttrs (llvm::GlobalVariable *globalVar, GlobalOp globalOp)
 Converts LLVM attributes from globalVar into MLIR attributes and adds them to globalOp as target-specific attributes.
static LogicalResult checkFunctionTypeCompatibility (LLVMFunctionType callType, LLVMFunctionType calleeType)
 Checks if callType and calleeType are compatible and can be represented in MLIR.
static void processMemoryEffects (llvm::Function *func, LLVMFuncOp funcOp)
static void processDenormalFPEnv (llvm::Function *func, LLVMFuncOp funcOp)
template<typename OpTy>
static void convertNoBuiltinAttrs (MLIRContext *ctx, const llvm::AttributeSet &attrs, OpTy target)
template<typename OpTy>
static void convertAllocsizeAttr (MLIRContext *ctx, const llvm::AttributeSet &attrs, OpTy target)
static void processPassthroughAttrs (llvm::Function *func, LLVMFuncOp funcOp)
 Converts LLVM attributes from func into MLIR attributes and adds them to funcOp as passthrough attributes, skipping those listed in kExplicitLLVMFuncAttributes.
template<typename Op>
static LogicalResult convertCallBaseAttributes (llvm::CallBase *inst, Op op)
static bool isMetadataKillLocation (llvm::DbgVariableIntrinsic *dbgIntr)
 Checks if dbgIntr is a kill location that holds metadata instead of an SSA value.
static LogicalResult setDebugIntrinsicBuilderInsertionPoint (mlir::OpBuilder &builder, DominanceInfo &domInfo, Value argOperand)
 Ensure that the debug intrinsic is inserted right after the operand definition.

Variables

static constexpr std::array kExplicitLLVMFuncOpAttributes
static constexpr std::array kExplicitLLVMFuncOpAttributePrefixes

Function Documentation

◆ checkFunctionTypeCompatibility()

LogicalResult checkFunctionTypeCompatibility ( LLVMFunctionType callType,
LLVMFunctionType calleeType )
static

Checks if callType and calleeType are compatible and can be represented in MLIR.

Definition at line 2224 of file ModuleImport.cpp.

References success().

◆ convertAllocsizeAttr()

template<typename OpTy>
void convertAllocsizeAttr ( MLIRContext * ctx,
const llvm::AttributeSet & attrs,
OpTy target )
static

◆ convertCallBaseAttributes()

template<typename Op>
LogicalResult convertCallBaseAttributes ( llvm::CallBase * inst,
Op op )
static

Definition at line 3120 of file ModuleImport.cpp.

References success().

◆ convertCGProfileModuleFlagValue()

Attribute convertCGProfileModuleFlagValue ( ModuleOp mlirModule,
llvm::MDTuple * mdTuple )
static

Definition at line 598 of file ModuleImport.cpp.

References mlir::FlatSymbolRefAttr::get().

Referenced by convertModuleFlagValueFromMDTuple().

◆ convertInstructionImpl()

LogicalResult convertInstructionImpl ( OpBuilder & odsBuilder,
llvm::Instruction * inst,
ModuleImport & moduleImport,
LLVMImportInterface & iface )
static

Converts the LLVM instructions that have a generated MLIR builder.

Using a static implementation method called from the module import ensures the builders have to use the moduleImport argument and cannot directly call import methods. As a result, both the intrinsic and the instruction MLIR builders have to use the moduleImport argument and none of them has direct access to the private module import methods.

Definition at line 134 of file ModuleImport.cpp.

References mlir::LLVMImportInterface::convertInstruction(), and mlir::LLVMImportInterface::isConvertibleInstruction().

◆ convertInt64FromKeyValueTuple()

FailureOr< uint64_t > convertInt64FromKeyValueTuple ( ModuleOp mlirModule,
const llvm::Module * llvmModule,
const llvm::MDOperand & md,
StringRef matchKey )
static

Extract an integer value from a two element tuple (<key, value>).

Fail if requirements are not met. A warning is emitted if the found value isn't a LLVM constant integer.

Definition at line 670 of file ModuleImport.cpp.

References diagMD(), mlir::emitWarning(), and getConstantMDFromKeyValueTuple().

Referenced by convertProfileSummaryModuleFlagValue().

◆ convertLLVMAttributesToMLIR()

ArrayAttr convertLLVMAttributesToMLIR ( Location loc,
MLIRContext * context,
llvm::AttributeSet attributes,
ArrayRef< StringLiteral > attributesToSkip = {},
ArrayRef< StringLiteral > attributePrefixesToSkip = {} )
static

Converts LLVM string, integer, and enum attributes into MLIR attributes, skipping those in attributesToSkip and emitting a warning at loc for any other unsupported attributes.

Definition at line 1513 of file ModuleImport.cpp.

References ArrayAttr().

Referenced by processPassthroughAttrs(), and processTargetSpecificAttrs().

◆ convertMetadataToAttr()

Attribute convertMetadataToAttr ( MLIRContext * ctx,
const llvm::Metadata * md )
static

Converts the metadata node md to the matching LLVM dialect metadata attribute.

Returns a null attribute for shapes that the dialect's metadata-attribute hierarchy does not currently model, including cyclic metadata graphs that the immutable metadata attributes cannot express.

Definition at line 211 of file ModuleImport.cpp.

References convertMetadataToAttrImpl().

Referenced by mlir::LLVM::ModuleImport::convertValue().

◆ convertMetadataToAttrImpl()

Attribute convertMetadataToAttrImpl ( MLIRContext * ctx,
const llvm::Metadata * md,
SmallPtrSetImpl< const llvm::Metadata * > & path,
DenseMap< const llvm::Metadata *, Attribute > & attrMap )
static

Depth-first conversion of the metadata node md to the matching LLVM dialect metadata attribute.

Returns a null attribute for shapes that the dialect's metadata-attribute hierarchy does not currently model. path holds the metadata nodes on the current depth-first search path. Cyclic metadata graphs are valid in LLVM IR, but they cannot be expressed by the immutable, structurally-uniqued metadata attributes built here. The path set lets the traversal recognize such a back-edge and bail out. attrMap caches the attributes of fully converted nodes so that shared subgraphs are visited only once.

Definition at line 162 of file ModuleImport.cpp.

References convertMetadataToAttrImpl(), and mlir::FlatSymbolRefAttr::get().

Referenced by convertMetadataToAttr(), and convertMetadataToAttrImpl().

◆ convertModuleFlagValueFromMDTuple()

Attribute convertModuleFlagValueFromMDTuple ( ModuleOp mlirModule,
const llvm::Module * llvmModule,
StringRef key,
llvm::MDTuple * mdTuple )
static

Invoke specific handlers for each known module flag value, returns nullptr if the key is unknown or unimplemented.

Definition at line 902 of file ModuleImport.cpp.

References convertCGProfileModuleFlagValue(), convertProfileSummaryModuleFlagValue(), mlir::Builder::getArrayAttr(), and mlir::Builder::getStringAttr().

Referenced by mlir::LLVM::ModuleImport::convertModuleFlagsMetadata().

◆ convertNoBuiltinAttrs()

template<typename OpTy>
void convertNoBuiltinAttrs ( MLIRContext * ctx,
const llvm::AttributeSet & attrs,
OpTy target )
static

Definition at line 2829 of file ModuleImport.cpp.

References target.

Referenced by mlir::LLVM::ModuleImport::processFunctionAttributes().

◆ convertProfileSummaryDetailed()

FailureOr< SmallVector< ModuleFlagProfileSummaryDetailedAttr > > convertProfileSummaryDetailed ( ModuleOp mlirModule,
const llvm::Module * llvmModule,
const llvm::MDOperand & summaryMD )
static

◆ convertProfileSummaryFormat()

std::optional< ProfileSummaryFormatKind > convertProfileSummaryFormat ( ModuleOp mlirModule,
const llvm::Module * llvmModule,
const llvm::MDOperand & formatMD )
static

◆ convertProfileSummaryModuleFlagValue()

Attribute convertProfileSummaryModuleFlagValue ( ModuleOp mlirModule,
const llvm::Module * llvmModule,
llvm::MDTuple * mdTuple )
static

◆ diag()

std::string diag ( const llvm::Value & value)
static

Definition at line 58 of file ModuleImport.cpp.

Referenced by mlir::transform::gpu::alterGpuLaunch(), mlir::transform::TransformState::applyTransform(), mlir::transform::detail::applyTransformToEach(), mlir::transform::detail::checkApplyToOne(), checkDoubleConsume(), checkMappingSpec(), mlir::transform::detail::checkNestedConsumption(), checkRepeatedConsumptionInOperand(), cloneAndFuseFirstUse(), mlir::OperationConverter::convert(), mlir::LLVM::ModuleImport::convertAliases(), mlir::lsp::MLIRServer::convertFromBytecode(), mlir::LLVM::ModuleImport::convertGlobals(), mlir::LLVM::ModuleImport::convertIFuncs(), convertMixedValuesToInt(), mlir::LLVM::ModuleImport::convertValue(), mlir::transform::gpu::createGpuLaunch(), diagnoseInvalidOperandDominance(), mlir::detail::DiagnosticEngineImpl::emit(), mlir::DiagnosticEngine::emit(), emitDiag(), mlir::SourceMgrDiagnosticHandler::emitDiagnostic(), mlir::SourceMgrDiagnosticHandler::emitDiagnostic(), mlir::detail::ParallelDiagnosticHandlerImpl::emitDiagnostics(), mlir::detail::Parser::emitError(), mlir::Operation::emitError(), mlir::Operation::emitRemark(), mlir::Operation::emitWarning(), ensurePayloadIsSeparateFromTransform(), mlir::detail::PassCrashReproducerGenerator::finalize(), findPayloadRoot(), mlir::transform::TrackingListener::findReplacementOp(), mlir::transform::detail::findTransformEntryPoint(), mlir::python::MLIR_BINDINGS_PYTHON_DOMAIN::formatMLIRError(), getLspDiagnoticFromDiag(), getLspDiagnoticFromDiag(), getLspDiagnoticFromDiag(), getThreadIdBuilder(), mlir::remark::detail::InFlightRemark::InFlightRemark(), mlir::remark::detail::InFlightRemark::InFlightRemark(), legalizeUnresolvedMaterialization(), mlir::transform::gpu::mapForallToBlocksImpl(), mlir::transform::gpu::mapNestedForallToThreadsImpl(), mlir::transform::gpu::mapOneForallToThreadsImpl(), mlir::GPUFuncOpLowering::matchAndRewrite(), matchBlock(), mlir::transform::detail::mergeSymbolsInto(), mlir::detail::ConversionPatternRewriterImpl::notifyMatchFailure(), mlir::RewriterBase::notifyMatchFailure(), mlir::transform::ErrorCheckingTrackingListener::notifyMatchFailure(), mlir::transform::TrackingListener::notifyMatchFailure(), mlir::transform::ErrorCheckingTrackingListener::notifyPayloadReplacementNotFound(), mlir::transform::TrackingListener::notifyPayloadReplacementNotFound(), mlir::operator<<(), mlir::shard::operator<<(), mlir::detail::ParallelDiagnosticHandlerImpl::ParallelDiagnosticHandlerImpl(), mlir::AsmParser::parseColonType(), mlir::AsmParser::parseCustomTypeWithFallback(), mlir::tracing::FileLineColLocBreakpoint::parseFromString(), mlir::parseSourceString(), mlir::AsmParser::parseType(), mlir::python::MLIR_BINDINGS_PYTHON_DOMAIN::populateIRCore(), mlir::detail::ParallelDiagnosticHandlerImpl::print(), mlir::query::matcher::MatchFinder::printMatch(), printShapeToDiagnostic(), mlir::LLVM::ModuleImport::processFunction(), mlir::dlti::query(), mlir::BytecodeReader::Impl::read(), mlir::DiagnosticEngine::registerHandler(), mlir::SourceMgrDiagnosticVerifierHandler::registerInContext(), mlir::detail::ConversionPatternRewriterImpl::remapValues(), replaceForAllWithNewSignature(), mlir::python::MLIR_BINDINGS_PYTHON_DOMAIN::DefaultingPyMlirContext::resolve(), mlir::transform::TransformResults::setMappedValues(), mlir::DiagnosedSilenceableFailure::silenceableFailure(), mlir::DiagnosedSilenceableFailure::silenceableFailure(), mlir::SourceMgrDiagnosticHandler::SourceMgrDiagnosticHandler(), tileAndFuseFirstExtractUse(), tileAndFuseFirstExtractUseThroughContainingOpBlockArgument(), mlir::transform::tileToForallOpImpl(), unpackSingleIndexResultPayloadOperations(), unpackSingleIndexResultPayloadOperations(), mlir::irdl::RegionConstraint::verify(), verifyAndGetTerminator(), mlir::impl::verifyCastInterfaceOp(), mlir::detail::verifyDataLayoutOp(), verifyNamedSequenceOp(), mlir::transform::detail::verifyNoRecursionInCallGraph(), verifyOpAndAdjustFlags(), verifyOutputShapeCompatibleWithExpected(), mlir::transform::detail::verifyPossibleTopLevelTransformOpTrait(), verifyQuantifierRegions(), mlir::detail::verifyRegionBranchOpInterface(), mlir::transform::detail::verifyTransformOpInterface(), verifyTypeRangesMatch(), verifyYieldingSingleBlockOp(), mlir::detail::ParallelDiagnosticHandlerImpl::~ParallelDiagnosticHandlerImpl(), and mlir::SourceMgrDiagnosticHandler::~SourceMgrDiagnosticHandler().

◆ diagMD()

◆ getConstantMDFromKeyValueTuple()

llvm::ConstantAsMetadata * getConstantMDFromKeyValueTuple ( ModuleOp mlirModule,
const llvm::Module * llvmModule,
const llvm::MDOperand & md,
StringRef matchKey,
bool optional = false )
static

Extract a constant metadata value from a two element tuple (<key, value>).

Return nullptr if requirements are not met. A warning is emitted if the matchKey is different from the tuple's key.

Definition at line 648 of file ModuleImport.cpp.

References diagMD(), mlir::emitWarning(), and getTwoElementMDTuple().

Referenced by convertInt64FromKeyValueTuple(), and convertProfileSummaryModuleFlagValue().

◆ getGlobalComdatOpName()

constexpr StringRef getGlobalComdatOpName ( )
staticconstexpr

Returns the symbol name for the module-level comdat operation.

It must not conflict with the user namespace.

Definition at line 93 of file ModuleImport.cpp.

◆ getGlobalCtorsVarName()

constexpr StringRef getGlobalCtorsVarName ( )
staticconstexpr

Returns the name of the global_ctors global variables.

Definition at line 77 of file ModuleImport.cpp.

Referenced by mlir::LLVM::ModuleImport::convertGlobals().

◆ getGlobalDtorsVarName()

constexpr StringRef getGlobalDtorsVarName ( )
staticconstexpr

Returns the name of the global_dtors global variables.

Definition at line 87 of file ModuleImport.cpp.

Referenced by mlir::LLVM::ModuleImport::convertGlobals().

◆ getLLVMSyncScope()

StringRef getLLVMSyncScope ( llvm::Instruction * inst)
static

Converts the sync scope identifier of inst to the string representation necessary to build an atomic LLVM dialect operation.

Returns the empty string if the operation has either no sync scope or the default system-level sync scope attached. The atomic operations only set their sync scope attribute if they have a non-default sync scope attached.

Definition at line 102 of file ModuleImport.cpp.

◆ getNamelessGlobalPrefix()

constexpr StringRef getNamelessGlobalPrefix ( )
staticconstexpr

Prefix used for symbols of nameless llvm globals.

Definition at line 82 of file ModuleImport.cpp.

◆ getPositionFromIndices()

SmallVector< int64_t > getPositionFromIndices ( ArrayRef< unsigned > indices)
static

Converts an array of unsigned indices to a signed integer position array.

Definition at line 122 of file ModuleImport.cpp.

References indices.

◆ getScalarConstantAsAttr()

TypedAttr getScalarConstantAsAttr ( OpBuilder & builder,
llvm::Constant * constScalar )
static

Returns an integer or float attribute for the provided scalar constant constScalar or nullptr if the conversion fails.

Definition at line 1297 of file ModuleImport.cpp.

References mlir::emitError(), mlir::Builder::getContext(), mlir::Builder::getFloatAttr(), mlir::LLVM::detail::getFloatType(), and mlir::Builder::getIntegerAttr().

Referenced by mlir::LLVM::ModuleImport::convertIntrinsicArguments(), and getSequenceConstantAsAttrs().

◆ getSequenceConstantAsAttrs()

SmallVector< Attribute > getSequenceConstantAsAttrs ( OpBuilder & builder,
llvm::ConstantDataSequential * constSequence )
static

Returns an integer or float attribute array for the provided constant sequence constSequence or nullptr if the conversion fails.

Definition at line 1331 of file ModuleImport.cpp.

References getScalarConstantAsAttr().

◆ getTopologicallySortedBlocks()

SetVector< llvm::BasicBlock * > getTopologicallySortedBlocks ( ArrayRef< llvm::BasicBlock * > basicBlocks)
static

Get a topologically sorted list of blocks for the given basic blocks.

Definition at line 220 of file ModuleImport.cpp.

Referenced by mlir::LLVM::ModuleImport::processFunction().

◆ getTwoElementMDTuple()

llvm::MDTuple * getTwoElementMDTuple ( ModuleOp mlirModule,
const llvm::Module * llvmModule,
const llvm::MDOperand & md )
static

Extract a two element MDTuple from a MDOperand.

Emit a warning in case something else is found.

Definition at line 635 of file ModuleImport.cpp.

References diagMD(), and mlir::emitWarning().

Referenced by convertProfileSummaryDetailed(), convertProfileSummaryFormat(), and getConstantMDFromKeyValueTuple().

◆ getVectorTypeForAttr()

Type getVectorTypeForAttr ( Type type,
ArrayRef< int64_t > arrayShape = {} )
static

Returns type if it is a builtin integer or floating-point vector type that can be used to create an attribute or nullptr otherwise.

If provided, arrayShape is added to the shape of the vector to create an attribute that matches an array of vectors.

Definition at line 1250 of file ModuleImport.cpp.

◆ isMetadataKillLocation()

bool isMetadataKillLocation ( llvm::DbgVariableIntrinsic * dbgIntr)
static

Checks if dbgIntr is a kill location that holds metadata instead of an SSA value.

Definition at line 3324 of file ModuleImport.cpp.

◆ processDenormalFPEnv()

void processDenormalFPEnv ( llvm::Function * func,
LLVMFuncOp funcOp )
static

◆ processMemoryEffects()

void processMemoryEffects ( llvm::Function * func,
LLVMFuncOp funcOp )
static

◆ processPassthroughAttrs()

void processPassthroughAttrs ( llvm::Function * func,
LLVMFuncOp funcOp )
static

Converts LLVM attributes from func into MLIR attributes and adds them to funcOp as passthrough attributes, skipping those listed in kExplicitLLVMFuncAttributes.

Definition at line 2877 of file ModuleImport.cpp.

References ArrayAttr(), convertLLVMAttributesToMLIR(), kExplicitLLVMFuncOpAttributePrefixes, and kExplicitLLVMFuncOpAttributes.

Referenced by mlir::LLVM::ModuleImport::processFunctionAttributes().

◆ processTargetSpecificAttrs()

void processTargetSpecificAttrs ( llvm::GlobalVariable * globalVar,
GlobalOp globalOp )
static

Converts LLVM attributes from globalVar into MLIR attributes and adds them to globalOp as target-specific attributes.

Definition at line 1570 of file ModuleImport.cpp.

References ArrayAttr(), and convertLLVMAttributesToMLIR().

◆ setDebugIntrinsicBuilderInsertionPoint()

LogicalResult setDebugIntrinsicBuilderInsertionPoint ( mlir::OpBuilder & builder,
DominanceInfo & domInfo,
Value argOperand )
static

Ensure that the debug intrinsic is inserted right after the operand definition.

Otherwise, the operand might not necessarily dominate the intrinsic. If the defining operation is a terminator, insert the intrinsic into a dominated block.

Definition at line 3338 of file ModuleImport.cpp.

References mlir::Block::empty(), mlir::Block::front(), mlir::Value::getDefiningOp(), mlir::detail::DominanceInfoBase< IsPostDom >::getNode(), mlir::Value::getParentBlock(), mlir::Block::getTerminator(), mlir::Operation::hasTrait(), mlir::OpBuilder::setInsertionPoint(), mlir::OpBuilder::setInsertionPointAfterValue(), and success().

Variable Documentation

◆ kExplicitLLVMFuncOpAttributePrefixes

std::array kExplicitLLVMFuncOpAttributePrefixes
staticconstexpr
Initial value:
{
StringLiteral("no-builtin-"),
}

Definition at line 2824 of file ModuleImport.cpp.

Referenced by processPassthroughAttrs().

◆ kExplicitLLVMFuncOpAttributes

std::array kExplicitLLVMFuncOpAttributes
staticconstexpr

Definition at line 2778 of file ModuleImport.cpp.

Referenced by processPassthroughAttrs().