#include #include "mlir/Dialect/LLVMIR/LLVMOpsDialect.cpp.inc" #include "mlir/Dialect/LLVMIR/LLVMOps.cpp.inc" #include "mlir/Dialect/LLVMIR/LLVMIntrinsicOps.cpp.inc"">

MLIR: lib/Dialect/LLVMIR/IR/LLVMDialect.cpp File Reference (original) (raw)

#include "[mlir/Dialect/LLVMIR/LLVMDialect.h](LLVMDialect%5F8h%5Fsource.html)"
#include "[TypeDetail.h](Dialect%5F2LLVMIR%5F2IR%5F2TypeDetail%5F8h%5Fsource.html)"
#include "[mlir/Dialect/LLVMIR/LLVMAttrs.h](LLVMAttrs%5F8h%5Fsource.html)"
#include "[mlir/Dialect/LLVMIR/LLVMInterfaces.h](LLVMInterfaces%5F8h%5Fsource.html)"
#include "[mlir/Dialect/LLVMIR/LLVMTypes.h](LLVMTypes%5F8h%5Fsource.html)"
#include "[mlir/IR/Attributes.h](Attributes%5F8h%5Fsource.html)"
#include "[mlir/IR/Builders.h](Builders%5F8h%5Fsource.html)"
#include "[mlir/IR/BuiltinOps.h](BuiltinOps%5F8h%5Fsource.html)"
#include "[mlir/IR/BuiltinTypes.h](mlir%5F2IR%5F2BuiltinTypes%5F8h%5Fsource.html)"
#include "[mlir/IR/DialectImplementation.h](DialectImplementation%5F8h%5Fsource.html)"
#include "[mlir/IR/MLIRContext.h](MLIRContext%5F8h%5Fsource.html)"
#include "[mlir/IR/Matchers.h](Matchers%5F8h%5Fsource.html)"
#include "[mlir/Interfaces/FunctionImplementation.h](FunctionImplementation%5F8h%5Fsource.html)"
#include "[mlir/Transforms/InliningUtils.h](InliningUtils%5F8h%5Fsource.html)"
#include "llvm/ADT/SCCIterator.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/AsmParser/Parser.h"
#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/Bitcode/BitcodeWriter.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/Mutex.h"
#include "llvm/Support/SourceMgr.h"
#include <numeric>
#include <optional>
#include "mlir/Dialect/LLVMIR/LLVMOpsDialect.cpp.inc"
#include "mlir/Dialect/LLVMIR/LLVMOps.cpp.inc"
#include "mlir/Dialect/LLVMIR/LLVMIntrinsicOps.cpp.inc"

Go to the source code of this file.

Macros
#define REGISTER_ENUM_TYPE(Ty)
#define GET_OP_LIST
#define GET_OP_LIST
#define GET_OP_CLASSES
#define GET_OP_CLASSES
Functions
static auto processFMFAttr (ArrayRef< NamedAttribute > attrs)
static LogicalResult verifySymbolAttrUse (FlatSymbolRefAttr symbol, Operation *op, SymbolTableCollection &symbolTable)
Verifies symbol's use in op to ensure the symbol is a valid and fully defined llvm.func. More...
static Type getI1SameShape (Type type)
Returns a boolean type that has the same shape as type. More...
static int parseOptionalKeywordAlternative (OpAsmParser &parser, ArrayRef< StringRef > keywords)
template<typename EnumTy , typename RetTy = EnumTy>
static RetTy parseOptionalLLVMKeyword (OpAsmParser &parser, OperationState &result, EnumTy defaultValue)
Parse an enum from the keyword, or default to the provided default value. More...
static void printOneOpBundle (OpAsmPrinter &p, OperandRange operands, TypeRange operandTypes, StringRef tag)
static void printOpBundles (OpAsmPrinter &p, Operation *op, OperandRangeRange opBundleOperands, TypeRangeRange opBundleOperandTypes, std::optional< ArrayAttr > opBundleTags)
static ParseResult parseOneOpBundle (OpAsmParser &p, SmallVector< SmallVector< OpAsmParser::UnresolvedOperand >> &opBundleOperands, SmallVector< SmallVector< Type >> &opBundleOperandTypes, SmallVector< Attribute > &opBundleTags)
static std::optional< ParseResult > parseOpBundles (OpAsmParser &p, SmallVector< SmallVector< OpAsmParser::UnresolvedOperand >> &opBundleOperands, SmallVector< SmallVector< Type >> &opBundleOperandTypes, ArrayAttr &opBundleTags)
template
static ParseResult parseCmpOp (OpAsmParser &parser, OperationState &result)
static Attribute getBoolAttribute (Type type, MLIRContext *ctx, bool value)
Returns a scalar or vector boolean attribute of the given type. More...
static ParseResult parseSwitchOpCases (OpAsmParser &parser, Type flagType, DenseIntElementsAttr &caseValues, SmallVectorImpl< Block * > &caseDestinations, SmallVectorImpl< SmallVector< OpAsmParser::UnresolvedOperand >> &caseOperands, SmallVectorImpl< SmallVector< Type >> &caseOperandTypes)
::= [ (case (, case )* )? ] ::= integer : bb-id (( ssa-use-and-type-list ))? More...
static void printSwitchOpCases (OpAsmPrinter &p, SwitchOp op, Type flagType, DenseIntElementsAttr caseValues, SuccessorRange caseDestinations, OperandRangeRange caseOperands, const TypeRangeRange &caseOperandTypes)
static Type extractVectorElementType (Type type)
Returns the elemental type of any LLVM-compatible vector type or self. More...
static void destructureIndices (Type currType, ArrayRef< GEPArg > indices, SmallVectorImpl< int32_t > &rawConstantIndices, SmallVectorImpl< Value > &dynamicIndices)
Destructures the 'indices' parameter into 'rawConstantIndices' and 'dynamicIndices', encoding the former in the process. More...
static ParseResult parseGEPIndices (OpAsmParser &parser, SmallVectorImpl< OpAsmParser::UnresolvedOperand > &indices, DenseI32ArrayAttr &rawConstantIndices)
static void printGEPIndices (OpAsmPrinter &printer, LLVM::GEPOp gepOp, OperandRange indices, DenseI32ArrayAttr rawConstantIndices)
static LogicalResult verifyStructIndices (Type baseGEPType, unsigned indexPos, GEPIndicesAdaptor< ValueRange > indices, function_ref< InFlightDiagnostic()> emitOpError)
For the given indices, check if they comply with baseGEPType, especially check against LLVMStructTypes nested within. More...
static LogicalResult verifyStructIndices (Type baseGEPType, GEPIndicesAdaptor< ValueRange > indices, function_ref< InFlightDiagnostic()> emitOpError)
Driver function around verifyStructIndices. More...
static bool isTypeCompatibleWithAtomicOp (Type type, const DataLayout &dataLayout)
Returns true if the given type is supported by atomic operations. More...
template
LogicalResult verifyAtomicMemOp (OpTy memOp, Type valueType, ArrayRef< AtomicOrdering > unsupportedOrderings)
Verifies the attributes and the type of atomic memory access operations. More...
static SmallVector< Type, 1 > getCallOpResultTypes (LLVMFunctionType calleeType)
Gets the MLIR Op-like result types of a LLVMFunctionType. More...
static TypeAttr getCallOpVarCalleeType (LLVMFunctionType calleeType)
Gets the variadic callee type for a LLVMFunctionType. More...
static LLVMFunctionType getLLVMFuncType (MLIRContext *context, TypeRange results, ValueRange args)
Constructs a LLVMFunctionType from MLIR results and args. More...
static LogicalResult verifyCallOpDebugInfo (CallOp callOp, LLVMFuncOp callee)
Verify that an inlinable callsite of a debug-info-bearing function in a debug-info-bearing function has a debug location attached to it. More...
template
LogicalResult verifyCallOpVarCalleeType (OpTy callOp)
Verify that the parameter and return types of the variadic callee type match the callOp argument and result types. More...
template
static LogicalResult verifyOperandBundles (OpType &op)
static ParseResult parseCallTypeAndResolveOperands (OpAsmParser &parser, OperationState &result, bool isDirect, ArrayRef< OpAsmParser::UnresolvedOperand > operands, SmallVectorImpl< DictionaryAttr > &argAttrs, SmallVectorImpl< DictionaryAttr > &resultAttrs)
Parses the type of a call operation and resolves the operands if the parsing succeeds. More...
static ParseResult parseOptionalCallFuncPtr (OpAsmParser &parser, SmallVectorImpl< OpAsmParser::UnresolvedOperand > &operands)
Parses an optional function pointer operand before the call argument list for indirect calls, or stops parsing at the function identifier otherwise. More...
static ParseResult resolveOpBundleOperands (OpAsmParser &parser, SMLoc loc, OperationState &state, ArrayRef< SmallVector< OpAsmParser::UnresolvedOperand >> opBundleOperands, ArrayRef< SmallVector< Type >> opBundleOperandTypes, StringAttr opBundleSizesAttrName)
static Type getInsertExtractValueElementType (function_ref< InFlightDiagnostic(StringRef)> emitError, Type containerType, ArrayRef< int64_t > position)
Extract the type at position in the LLVM IR aggregate type containerType. More...
static Type getInsertExtractValueElementType (Type llvmType, ArrayRef< int64_t > position)
Extract the type at position in the wrapped LLVM IR aggregate type containerType. More...
static ParseResult parseInsertExtractValueElementType (AsmParser &parser, Type &valueType, Type containerType, DenseI64ArrayAttr position)
Infer the value type from the container type and position. More...
static void printInsertExtractValueElementType (AsmPrinter &printer, Operation *op, Type valueType, Type containerType, DenseI64ArrayAttr position)
Nothing to print for an inferred type. More...
static Operation * parentLLVMModule (Operation *op)
template
static void printCommonGlobalAndAlias (OpAsmPrinter &p, OpType op)
static LogicalResult verifyComdat (Operation *op, std::optional< SymbolRefAttr > attr)
static LogicalResult verifyBlockTags (LLVMFuncOp funcOp)
template
static ParseResult parseCommonGlobalAndAlias (OpAsmParser &parser, OperationState &result)
Parse common attributes that might show up in the same order in both GlobalOp and AliasOp. More...
static bool isZeroAttribute (Attribute value)
LogicalResult checkGlobalXtorData (Operation *op, ArrayAttr data)
static ParseResult parseShuffleType (AsmParser &parser, Type v1Type, Type &resType, DenseI32ArrayAttr mask)
Build the result type of a shuffle vector operation. More...
static void printShuffleType (AsmPrinter &printer, Operation *op, Type v1Type, Type resType, DenseI32ArrayAttr mask)
Nothing to do when the result type is inferred. More...
static Type buildLLVMFunctionType (OpAsmParser &parser, SMLoc loc, ArrayRef< Type > inputs, ArrayRef< Type > outputs, function_interface_impl::VariadicFlag variadicFlag)
static int64_t getNumElements (Type t)
Compute the total number of elements in the given type, also taking into account nested types. More...
static bool hasScalableVectorType (Type t)
Check if the given type is a scalable vector type or a vector/array type that contains a nested scalable vector type. More...
static LogicalResult verifyStructArrayConstant (LLVM::ConstantOp op, LLVM::LLVMArrayType arrayType, ArrayAttr arrayAttr, int dim)
Verifies the constant array represented by arrayAttr matches the provided arrayType. More...
static LLVMStructType getValAndBoolStructType (Type valType)
Returns an LLVM struct type that contains a value type and a boolean type. More...
template
static LogicalResult verifyExtOp (ExtOp op)
Verifies that the given extension operation operates on consistent scalars or vectors, and that the target width is larger than the input width. More...
template
static OpFoldResult foldChainableCast (T castOp, typename T::FoldAdaptor adaptor)
Folds a cast op that can be chained. More...
static ParseResult parseIndirectBrOpSucessors (OpAsmParser &parser, Type &flagType, SmallVectorImpl< Block * > &succOperandBlocks, SmallVectorImpl< SmallVector< OpAsmParser::UnresolvedOperand >> &succOperands, SmallVectorImpl< SmallVector< Type >> &succOperandsTypes)
static void printIndirectBrOpSucessors (OpAsmPrinter &p, IndirectBrOp op, Type flagType, SuccessorRange succs, OperandRangeRange succOperands, const TypeRangeRange &succOperandsTypes)

GET_OP_CLASSES [1/2]

GET_OP_CLASSES [2/2]

GET_OP_LIST [1/2]

GET_OP_LIST [2/2]

REGISTER_ENUM_TYPE

| #define REGISTER_ENUM_TYPE | ( | | Ty | ) | | ---------------------------- | - | | -- | - |

Value:

template <> \

struct EnumTraits { \

static unsigned getMaxEnumVal() { return getMaxEnumValFor##Ty(); } \

}

std::string stringify(T &&t)

Generically convert a value to a std::string.

Definition at line 112 of file LLVMDialect.cpp.

buildLLVMFunctionType()

checkGlobalXtorData()

LogicalResult checkGlobalXtorData ( Operation * op,
ArrayAttr data
)

destructureIndices()

Destructures the 'indices' parameter into 'rawConstantIndices' and 'dynamicIndices', encoding the former in the process.

In the process, dynamic indices which are used to index into a structure type are converted to constant indices when possible. To do this, the GEPs element type should be passed as first parameter.

Definition at line 631 of file LLVMDialect.cpp.

References mlir::LLVM::kGEPConstantBitWidth, mlir::m_ConstantInt(), and mlir::matchPattern().

extractVectorElementType()

static Type extractVectorElementType ( Type type) static

Returns the elemental type of any LLVM-compatible vector type or self.

Definition at line 620 of file LLVMDialect.cpp.

foldChainableCast()

template

static OpFoldResult foldChainableCast ( T castOp, typename T::FoldAdaptor adaptor ) static

getBoolAttribute()

getCallOpResultTypes()

static SmallVector<Type, 1> getCallOpResultTypes ( LLVMFunctionType calleeType) static

Gets the MLIR Op-like result types of a LLVMFunctionType.

Definition at line 925 of file LLVMDialect.cpp.

getCallOpVarCalleeType()

static TypeAttr getCallOpVarCalleeType ( LLVMFunctionType calleeType) static

getI1SameShape()

static Type getI1SameShape ( Type type) static

getInsertExtractValueElementType() [1/2]

getInsertExtractValueElementType() [2/2]

static Type getInsertExtractValueElementType ( Type llvmType, ArrayRef< int64_t > position ) static

Extract the type at position in the wrapped LLVM IR aggregate type containerType.

Definition at line 1858 of file LLVMDialect.cpp.

getLLVMFuncType()

getNumElements()

static int64_t getNumElements ( Type t) static

getValAndBoolStructType()

static LLVMStructType getValAndBoolStructType ( Type valType) static

hasScalableVectorType()

static bool hasScalableVectorType ( Type t) static

Check if the given type is a scalable vector type or a vector/array type that contains a nested scalable vector type.

Definition at line 3134 of file LLVMDialect.cpp.

isTypeCompatibleWithAtomicOp()

static bool isTypeCompatibleWithAtomicOp ( Type type, const DataLayout & dataLayout ) static

isZeroAttribute()

static bool isZeroAttribute ( Attribute value) static

parentLLVMModule()

parseCallTypeAndResolveOperands()

parseCmpOp()

template

Definition at line 259 of file LLVMDialect.cpp.

References mlir::OperationState::addTypes(), mlir::OperationState::attributes, mlir::AsmParser::emitError(), mlir::AsmParser::getBuilder(), mlir::AsmParser::getCurrentLocation(), getI1SameShape(), mlir::Builder::getI64IntegerAttr(), mlir::LLVM::isCompatibleType(), mlir::OperationState::operands, mlir::AsmParser::parseAttribute(), mlir::AsmParser::parseColon(), mlir::AsmParser::parseComma(), mlir::OpAsmParser::parseOperand(), mlir::AsmParser::parseOptionalAttrDict(), mlir::AsmParser::parseType(), mlir::OpAsmParser::resolveOperand(), and mlir::NamedAttrList::set().

parseCommonGlobalAndAlias()

template

parseGEPIndices()

parseIndirectBrOpSucessors()

parseInsertExtractValueElementType()

parseOneOpBundle()

Definition at line 180 of file LLVMDialect.cpp.

References mlir::AsmParser::emitError(), mlir::get(), mlir::AsmParser::getContext(), mlir::AsmParser::getCurrentLocation(), mlir::AsmParser::parseColon(), mlir::AsmParser::parseLParen(), mlir::OpAsmParser::parseOperandList(), mlir::AsmParser::parseOptionalRParen(), mlir::AsmParser::parseRParen(), mlir::AsmParser::parseString(), and mlir::AsmParser::parseTypeList().

Referenced by parseOpBundles().

parseOpBundles()

parseOptionalCallFuncPtr()

parseOptionalKeywordAlternative()

static int parseOptionalKeywordAlternative ( OpAsmParser & parser, ArrayRef< StringRef > keywords ) static

parseOptionalLLVMKeyword()

template<typename EnumTy , typename RetTy = EnumTy>

parseShuffleType()

parseSwitchOpCases()

::= [ (case (, case )* )? ] ::= integer : bb-id (( ssa-use-and-type-list ))?

Definition at line 514 of file LLVMDialect.cpp.

References mlir::DenseIntElementsAttr::get(), mlir::get(), mlir::Type::getIntOrFloatBitWidth(), mlir::AsmParser::None, mlir::AsmParser::parseColon(), mlir::AsmParser::parseColonTypeList(), mlir::AsmParser::parseCommaSeparatedList(), mlir::AsmParser::parseInteger(), mlir::AsmParser::parseLSquare(), mlir::OpAsmParser::parseOperandList(), mlir::AsmParser::parseOptionalLParen(), mlir::AsmParser::parseOptionalRSquare(), mlir::AsmParser::parseRParen(), mlir::AsmParser::parseRSquare(), and mlir::OpAsmParser::parseSuccessor().

printCommonGlobalAndAlias()

template

static void printCommonGlobalAndAlias ( OpAsmPrinter & p, OpType op ) static

printGEPIndices()

printIndirectBrOpSucessors()

printInsertExtractValueElementType()

printOneOpBundle()

printOpBundles()

printShuffleType()

Nothing to do when the result type is inferred.

Definition at line 2725 of file LLVMDialect.cpp.

printSwitchOpCases()

processFMFAttr()

resolveOpBundleOperands()

verifyAtomicMemOp()

template

LogicalResult verifyAtomicMemOp ( OpTy memOp,
Type valueType,
ArrayRef< AtomicOrdering > unsupportedOrderings
)

verifyBlockTags()

static LogicalResult verifyBlockTags ( LLVMFuncOp funcOp) static

verifyCallOpDebugInfo()

static LogicalResult verifyCallOpDebugInfo ( CallOp callOp, LLVMFuncOp callee ) static

Verify that an inlinable callsite of a debug-info-bearing function in a debug-info-bearing function has a debug location attached to it.

This mirrors an LLVM IR verifier.

Definition at line 1069 of file LLVMDialect.cpp.

verifyCallOpVarCalleeType()

template

LogicalResult verifyCallOpVarCalleeType ( OpTy callOp )

Verify that the parameter and return types of the variadic callee type match the callOp argument and result types.

Definition at line 1094 of file LLVMDialect.cpp.

verifyComdat()

static LogicalResult verifyComdat ( Operation * op, std::optional< SymbolRefAttr > attr ) static

verifyExtOp()

template

static LogicalResult verifyExtOp ( ExtOp op) static

verifyOperandBundles()

template

static LogicalResult verifyOperandBundles ( OpType & op) static

verifyStructArrayConstant()

static LogicalResult verifyStructArrayConstant ( LLVM::ConstantOp op, LLVM::LLVMArrayType arrayType, ArrayAttr arrayAttr, int dim ) static

verifyStructIndices() [1/2]

verifyStructIndices() [2/2]

verifySymbolAttrUse()

kElemTypeAttrName

constexpr const char kElemTypeAttrName[] = "elem_type" staticconstexpr