MLIR
22.0.0git
|
#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/StringExtras.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/IR/Comdat.h"
#include "llvm/IR/Constants.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/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. More... | |
static constexpr StringRef | getNamelessGlobalPrefix () |
Prefix used for symbols of nameless llvm globals. More... | |
static constexpr StringRef | getGlobalDtorsVarName () |
Returns the name of the global_dtors global variables. More... | |
static constexpr StringRef | getGlobalComdatOpName () |
Returns the symbol name for the module-level comdat operation. More... | |
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. More... | |
static SmallVector< int64_t > | getPositionFromIndices (ArrayRef< unsigned > indices) |
Converts an array of unsigned indices to a signed integer position array. More... | |
static LogicalResult | convertInstructionImpl (OpBuilder &odsBuilder, llvm::Instruction *inst, ModuleImport &moduleImport, LLVMImportInterface &iface) |
Converts the LLVM instructions that have a generated MLIR builder. More... | |
static SetVector< llvm::BasicBlock * > | getTopologicallySortedBlocks (ArrayRef< llvm::BasicBlock * > basicBlocks) |
Get a topologically sorted list of blocks for the given basic blocks. More... | |
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 . More... | |
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>). More... | |
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>). More... | |
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. More... | |
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. More... | |
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. More... | |
static SmallVector< Attribute > | getSequenceConstantAsAttrs (OpBuilder &builder, llvm::ConstantDataSequential *constSequence) |
Returns an integer or float attribute array for the provided constant sequence constSequence or nullptr if the conversion fails. More... | |
static ArrayAttr | convertLLVMAttributesToMLIR (Location loc, MLIRContext *context, llvm::AttributeSet attributes, ArrayRef< StringLiteral > attributesToSkip={}) |
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. More... | |
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. More... | |
static LogicalResult | checkFunctionTypeCompatibility (LLVMFunctionType callType, LLVMFunctionType calleeType) |
Checks if callType and calleeType are compatible and can be represented in MLIR. More... | |
static void | processMemoryEffects (llvm::Function *func, LLVMFuncOp funcOp) |
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 . More... | |
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. More... | |
Variables | |
static constexpr std::array | kExplicitLLVMFuncOpAttributes |
|
static |
Checks if callType
and calleeType
are compatible and can be represented in MLIR.
Definition at line 2099 of file ModuleImport.cpp.
|
static |
Definition at line 2856 of file ModuleImport.cpp.
|
static |
Definition at line 525 of file ModuleImport.cpp.
References mlir::get(), and mlir::FlatSymbolRefAttr::get().
Referenced by convertModuleFlagValueFromMDTuple().
|
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 131 of file ModuleImport.cpp.
References mlir::LLVMImportInterface::convertInstruction(), and mlir::LLVMImportInterface::isConvertibleInstruction().
|
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 597 of file ModuleImport.cpp.
References diagMD(), mlir::emitWarning(), and getConstantMDFromKeyValueTuple().
Referenced by convertProfileSummaryModuleFlagValue().
|
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 1416 of file ModuleImport.cpp.
Referenced by processPassthroughAttrs(), and processTargetSpecificAttrs().
|
static |
Invoke specific handlers for each known module flag value, returns nullptr if the key is unknown or unimplemented.
Definition at line 829 of file ModuleImport.cpp.
References convertCGProfileModuleFlagValue(), and convertProfileSummaryModuleFlagValue().
Referenced by mlir::LLVM::ModuleImport::convertModuleFlagsMetadata().
|
static |
Definition at line 644 of file ModuleImport.cpp.
References diagMD(), mlir::emitWarning(), mlir::get(), and getTwoElementMDTuple().
Referenced by convertProfileSummaryModuleFlagValue().
|
static |
Definition at line 615 of file ModuleImport.cpp.
References diagMD(), mlir::emitWarning(), and getTwoElementMDTuple().
Referenced by convertProfileSummaryModuleFlagValue().
|
static |
Definition at line 698 of file ModuleImport.cpp.
References convertInt64FromKeyValueTuple(), convertProfileSummaryDetailed(), convertProfileSummaryFormat(), diagMD(), mlir::emitWarning(), mlir::remark::failed(), mlir::get(), and getConstantMDFromKeyValueTuple().
Referenced by convertModuleFlagValueFromMDTuple().
|
static |
Definition at line 55 of file ModuleImport.cpp.
Referenced by mlir::transform::gpu::alterGpuLaunch(), mlir::transform::TransformState::applyTransform(), mlir::transform::detail::checkApplyToOne(), checkDoubleConsume(), checkMappingSpec(), mlir::transform::detail::checkNestedConsumption(), checkRepeatedConsumptionInOperand(), cloneAndFuseFirstUse(), mlir::LLVM::ModuleImport::convertAliases(), mlir::lsp::MLIRServer::convertFromBytecode(), mlir::LLVM::ModuleImport::convertGlobals(), mlir::LLVM::ModuleImport::convertIFuncs(), mlir::LLVM::ModuleImport::convertValue(), mlir::transform::gpu::createGpuLaunch(), diagnoseInvalidOperandDominance(), mlir::DiagnosticEngine::emit(), mlir::detail::DiagnosticEngineImpl::emit(), emitDiag(), mlir::SourceMgrDiagnosticHandler::emitDiagnostic(), mlir::detail::ParallelDiagnosticHandlerImpl::emitDiagnostics(), mlir::Operation::emitError(), mlir::detail::Parser::emitError(), mlir::Operation::emitRemark(), mlir::Operation::emitWarning(), ensurePayloadIsSeparateFromTransform(), mlir::detail::PassCrashReproducerGenerator::finalize(), findPayloadRoot(), mlir::transform::TrackingListener::findReplacementOp(), mlir::transform::detail::findTransformEntryPoint(), getLspDiagnoticFromDiag(), getThreadIdBuilder(), legalizeUnresolvedMaterialization(), mlir::pdll::Lexer::Lexer(), mlir::transform::gpu::mapForallToBlocksImpl(), mlir::transform::gpu::mapNestedForallToThreadsImpl(), mlir::transform::gpu::mapOneForallToThreadsImpl(), mlir::GPUFuncOpLowering::matchAndRewrite(), mlir::transform::detail::mergeSymbolsInto(), mlir::RewriterBase::notifyMatchFailure(), mlir::transform::TrackingListener::notifyMatchFailure(), mlir::transform::ErrorCheckingTrackingListener::notifyMatchFailure(), mlir::detail::ConversionPatternRewriterImpl::notifyMatchFailure(), mlir::transform::ErrorCheckingTrackingListener::notifyPayloadReplacementNotFound(), mlir::operator<<(), mlir::detail::ParallelDiagnosticHandlerImpl::ParallelDiagnosticHandlerImpl(), mlir::AsmParser::parseColonType(), mlir::AsmParser::parseCustomTypeWithFallback(), mlir::tracing::FileLineColLocBreakpoint::parseFromString(), mlir::AsmParser::parseType(), mlir::detail::ParallelDiagnosticHandlerImpl::print(), mlir::query::matcher::MatchFinder::printMatch(), printRegionEdgeName(), mlir::LLVM::ModuleImport::processFunction(), mlir::dlti::query(), mlir::BytecodeReader::Impl::read(), mlir::DiagnosticEngine::registerHandler(), mlir::SourceMgrDiagnosticVerifierHandler::registerInContext(), mlir::detail::ConversionPatternRewriterImpl::remapValues(), mlir::transform::TransformResults::setMappedValues(), mlir::DiagnosedSilenceableFailure::silenceableFailure(), mlir::SourceMgrDiagnosticHandler::SourceMgrDiagnosticHandler(), tileAndFuseFirstExtractUse(), tileAndFuseFirstExtractUseThroughContainingOpBlockArgument(), mlir::lsp::toJSON(), mlir::irdl::RegionConstraint::verify(), verifyAndGetTerminator(), mlir::impl::verifyCastInterfaceOp(), mlir::detail::verifyDataLayoutOp(), verifyNamedSequenceOp(), verifyOpAndAdjustFlags(), mlir::transform::detail::verifyPossibleTopLevelTransformOpTrait(), verifyQuantifierRegions(), mlir::transform::detail::verifyTransformOpInterface(), verifyTypeRangesMatch(), verifyTypesAlongAllEdges(), mlir::detail::verifyTypesAlongControlFlowEdges(), verifyYieldingSingleBlockOp(), and mlir::detail::ParallelDiagnosticHandlerImpl::~ParallelDiagnosticHandlerImpl().
|
static |
Definition at line 65 of file ModuleImport.cpp.
Referenced by convertInt64FromKeyValueTuple(), mlir::LLVM::ModuleImport::convertModuleFlagsMetadata(), convertProfileSummaryDetailed(), convertProfileSummaryFormat(), convertProfileSummaryModuleFlagValue(), getConstantMDFromKeyValueTuple(), getTwoElementMDTuple(), mlir::LLVM::ModuleImport::processFunction(), and mlir::LLVM::ModuleImport::translateDereferenceableAttr().
|
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 575 of file ModuleImport.cpp.
References diagMD(), mlir::emitWarning(), and getTwoElementMDTuple().
Referenced by convertInt64FromKeyValueTuple(), and convertProfileSummaryModuleFlagValue().
|
staticconstexpr |
Returns the symbol name for the module-level comdat operation.
It must not conflict with the user namespace.
Definition at line 90 of file ModuleImport.cpp.
|
staticconstexpr |
Returns the name of the global_ctors global variables.
Definition at line 74 of file ModuleImport.cpp.
Referenced by mlir::LLVM::ModuleImport::convertGlobals().
|
staticconstexpr |
Returns the name of the global_dtors global variables.
Definition at line 84 of file ModuleImport.cpp.
Referenced by mlir::LLVM::ModuleImport::convertGlobals().
|
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 99 of file ModuleImport.cpp.
|
staticconstexpr |
Prefix used for symbols of nameless llvm globals.
Definition at line 79 of file ModuleImport.cpp.
|
static |
Converts an array of unsigned indices to a signed integer position array.
Definition at line 119 of file ModuleImport.cpp.
|
static |
Returns an integer or float attribute for the provided scalar constant constScalar
or nullptr if the conversion fails.
Definition at line 1213 of file ModuleImport.cpp.
References mlir::emitError(), mlir::get(), mlir::Builder::getContext(), mlir::Builder::getFloatAttr(), mlir::LLVM::detail::getFloatType(), and mlir::Builder::getIntegerAttr().
Referenced by mlir::LLVM::ModuleImport::convertIntrinsicArguments(), and getSequenceConstantAsAttrs().
|
static |
Returns an integer or float attribute array for the provided constant sequence constSequence
or nullptr if the conversion fails.
Definition at line 1244 of file ModuleImport.cpp.
References getScalarConstantAsAttr().
|
static |
Get a topologically sorted list of blocks for the given basic blocks.
Definition at line 152 of file ModuleImport.cpp.
Referenced by mlir::LLVM::ModuleImport::processFunction().
|
static |
Extract a two element MDTuple
from a MDOperand
.
Emit a warning in case something else is found.
Definition at line 562 of file ModuleImport.cpp.
References diagMD(), and mlir::emitWarning().
Referenced by convertProfileSummaryDetailed(), convertProfileSummaryFormat(), and getConstantMDFromKeyValueTuple().
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 1166 of file ModuleImport.cpp.
|
static |
Checks if dbgIntr
is a kill location that holds metadata instead of an SSA value.
Definition at line 3017 of file ModuleImport.cpp.
|
static |
Definition at line 2573 of file ModuleImport.cpp.
References mlir::get().
Referenced by mlir::LLVM::ModuleImport::processFunctionAttributes().
|
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 2627 of file ModuleImport.cpp.
References convertLLVMAttributesToMLIR(), and kExplicitLLVMFuncOpAttributes.
Referenced by mlir::LLVM::ModuleImport::processFunctionAttributes().
|
static |
Converts LLVM attributes from globalVar
into MLIR attributes and adds them to globalOp
as target-specific attributes.
Definition at line 1465 of file ModuleImport.cpp.
References convertLLVMAttributesToMLIR().
|
staticconstexpr |
Definition at line 2592 of file ModuleImport.cpp.
Referenced by processPassthroughAttrs().