MLIR
19.0.0git
|
#include "mlir/Dialect/OpenACC/OpenACC.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/Dialect/LLVMIR/LLVMTypes.h"
#include "mlir/Dialect/MemRef/IR/MemRef.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/OpImplementation.h"
#include "mlir/Transforms/DialectConversion.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/TypeSwitch.h"
#include "mlir/Dialect/OpenACC/OpenACCOpsDialect.cpp.inc"
#include "mlir/Dialect/OpenACC/OpenACCOpsEnums.cpp.inc"
#include "mlir/Dialect/OpenACC/OpenACCOpsInterfaces.cpp.inc"
#include "mlir/Dialect/OpenACC/OpenACCTypeInterfaces.cpp.inc"
#include "mlir/Dialect/OpenACC/OpenACCOps.cpp.inc"
#include "mlir/Dialect/OpenACC/OpenACCOpsAttributes.cpp.inc"
#include "mlir/Dialect/OpenACC/OpenACCOpsTypes.cpp.inc"
Go to the source code of this file.
Macros | |
#define | GET_OP_LIST |
#define | GET_ATTRDEF_LIST |
#define | GET_TYPEDEF_LIST |
#define | GET_OP_CLASSES |
#define | GET_ATTRDEF_CLASSES |
#define | GET_TYPEDEF_CLASSES |
Functions | |
static bool | hasDeviceTypeValues (std::optional< mlir::ArrayAttr > arrayAttr) |
static bool | hasDeviceType (std::optional< mlir::ArrayAttr > arrayAttr, mlir::acc::DeviceType deviceType) |
static void | printDeviceTypes (mlir::OpAsmPrinter &p, std::optional< mlir::ArrayAttr > deviceTypes) |
static std::optional< unsigned > | findSegment (ArrayAttr segments, mlir::acc::DeviceType deviceType) |
static mlir::Operation::operand_range | getValuesFromSegments (std::optional< mlir::ArrayAttr > arrayAttr, mlir::Operation::operand_range range, std::optional< llvm::ArrayRef< int32_t >> segments, mlir::acc::DeviceType deviceType) |
static mlir::Value | getWaitDevnumValue (std::optional< mlir::ArrayAttr > deviceTypeAttr, mlir::Operation::operand_range operands, std::optional< llvm::ArrayRef< int32_t >> segments, std::optional< mlir::ArrayAttr > hasWaitDevnum, mlir::acc::DeviceType deviceType) |
static mlir::Operation::operand_range | getWaitValuesWithoutDevnum (std::optional< mlir::ArrayAttr > deviceTypeAttr, mlir::Operation::operand_range operands, std::optional< llvm::ArrayRef< int32_t >> segments, std::optional< mlir::ArrayAttr > hasWaitDevnum, mlir::acc::DeviceType deviceType) |
template<typename Op > | |
static LogicalResult | checkWaitAndAsyncConflict (Op op) |
template<typename StructureOp > | |
static ParseResult | parseRegions (OpAsmParser &parser, OperationState &state, unsigned nRegions=1) |
static bool | isComputeOperation (Operation *op) |
static LogicalResult | verifyInitLikeSingleArgRegion (Operation *op, Region ®ion, StringRef regionType, StringRef regionName, Type type, bool verifyYield, bool optional=false) |
static ParseResult | parseSymOperandList (mlir::OpAsmParser &parser, llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > &operands, llvm::SmallVectorImpl< Type > &types, mlir::ArrayAttr &symbols) |
static void | printSymOperandList (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::OperandRange operands, mlir::TypeRange types, std::optional< mlir::ArrayAttr > attributes) |
template<typename Op > | |
static LogicalResult | checkDataOperands (Op op, const mlir::ValueRange &operands) |
Check dataOperands for acc.parallel, acc.serial and acc.kernels. More... | |
template<typename Op > | |
static LogicalResult | checkSymOperandList (Operation *op, std::optional< mlir::ArrayAttr > attributes, mlir::OperandRange operands, llvm::StringRef operandName, llvm::StringRef symbolName, bool checkOperandType=true) |
template<typename Op > | |
static LogicalResult | verifyDeviceTypeCountMatch (Op op, OperandRange operands, ArrayAttr deviceTypes, llvm::StringRef keyword) |
template<typename Op > | |
static LogicalResult | verifyDeviceTypeAndSegmentCountMatch (Op op, OperandRange operands, DenseI32ArrayAttr segments, ArrayAttr deviceTypes, llvm::StringRef keyword, int32_t maxInSegment=0) |
static mlir::Value | getValueInDeviceTypeSegment (std::optional< mlir::ArrayAttr > arrayAttr, mlir::Operation::operand_range range, mlir::acc::DeviceType deviceType) |
static ParseResult | parseNumGangs (mlir::OpAsmParser &parser, llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > &operands, llvm::SmallVectorImpl< Type > &types, mlir::ArrayAttr &deviceTypes, mlir::DenseI32ArrayAttr &segments) |
static void | printSingleDeviceType (mlir::OpAsmPrinter &p, mlir::Attribute attr) |
static void | printNumGangs (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::OperandRange operands, mlir::TypeRange types, std::optional< mlir::ArrayAttr > deviceTypes, std::optional< mlir::DenseI32ArrayAttr > segments) |
static ParseResult | parseDeviceTypeOperandsWithSegment (mlir::OpAsmParser &parser, llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > &operands, llvm::SmallVectorImpl< Type > &types, mlir::ArrayAttr &deviceTypes, mlir::DenseI32ArrayAttr &segments) |
static void | printDeviceTypeOperandsWithSegment (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::OperandRange operands, mlir::TypeRange types, std::optional< mlir::ArrayAttr > deviceTypes, std::optional< mlir::DenseI32ArrayAttr > segments) |
static ParseResult | parseWaitClause (mlir::OpAsmParser &parser, llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > &operands, llvm::SmallVectorImpl< Type > &types, mlir::ArrayAttr &deviceTypes, mlir::DenseI32ArrayAttr &segments, mlir::ArrayAttr &hasDevNum, mlir::ArrayAttr &keywordOnly) |
static bool | hasOnlyDeviceTypeNone (std::optional< mlir::ArrayAttr > attrs) |
static void | printWaitClause (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::OperandRange operands, mlir::TypeRange types, std::optional< mlir::ArrayAttr > deviceTypes, std::optional< mlir::DenseI32ArrayAttr > segments, std::optional< mlir::ArrayAttr > hasDevNum, std::optional< mlir::ArrayAttr > keywordOnly) |
static ParseResult | parseDeviceTypeOperands (mlir::OpAsmParser &parser, llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > &operands, llvm::SmallVectorImpl< Type > &types, mlir::ArrayAttr &deviceTypes) |
static void | printDeviceTypeOperands (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::OperandRange operands, mlir::TypeRange types, std::optional< mlir::ArrayAttr > deviceTypes) |
static ParseResult | parseDeviceTypeOperandsWithKeywordOnly (mlir::OpAsmParser &parser, llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > &operands, llvm::SmallVectorImpl< Type > &types, mlir::ArrayAttr &deviceTypes, mlir::ArrayAttr &keywordOnlyDeviceType) |
static void | printDeviceTypeOperandsWithKeywordOnly (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::OperandRange operands, mlir::TypeRange types, std::optional< mlir::ArrayAttr > deviceTypes, std::optional< mlir::ArrayAttr > keywordOnlyDeviceTypes) |
static ParseResult | parseCombinedConstructsLoop (mlir::OpAsmParser &parser, mlir::acc::CombinedConstructsTypeAttr &attr) |
static void | printCombinedConstructsLoop (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::acc::CombinedConstructsTypeAttr attr) |
static ParseResult | parseGangValue (OpAsmParser &parser, llvm::StringRef keyword, llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > &operands, llvm::SmallVectorImpl< Type > &types, llvm::SmallVector< GangArgTypeAttr > &attributes, GangArgTypeAttr gangArgType, bool &needCommaBetweenValues, bool &newValue) |
static ParseResult | parseGangClause (OpAsmParser &parser, llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > &gangOperands, llvm::SmallVectorImpl< Type > &gangOperandsType, mlir::ArrayAttr &gangArgType, mlir::ArrayAttr &deviceType, mlir::DenseI32ArrayAttr &segments, mlir::ArrayAttr &gangOnlyDeviceType) |
void | printGangClause (OpAsmPrinter &p, Operation *op, mlir::OperandRange operands, mlir::TypeRange types, std::optional< mlir::ArrayAttr > gangArgTypes, std::optional< mlir::ArrayAttr > deviceTypes, std::optional< mlir::DenseI32ArrayAttr > segments, std::optional< mlir::ArrayAttr > gangOnlyDeviceTypes) |
bool | hasDuplicateDeviceTypes (std::optional< mlir::ArrayAttr > segments, llvm::SmallSet< mlir::acc::DeviceType, 3 > &deviceTypes) |
LogicalResult | checkDeviceTypes (mlir::ArrayAttr deviceTypes) |
Check for duplicates in the DeviceType array attribute. More... | |
ParseResult | parseLoopControl (OpAsmParser &parser, Region ®ion, SmallVectorImpl< OpAsmParser::UnresolvedOperand > &lowerbound, SmallVectorImpl< Type > &lowerboundType, SmallVectorImpl< OpAsmParser::UnresolvedOperand > &upperbound, SmallVectorImpl< Type > &upperboundType, SmallVectorImpl< OpAsmParser::UnresolvedOperand > &step, SmallVectorImpl< Type > &stepType) |
loop-control ::= control ( ssa-id-and-type-list ) = ( ssa-id-and-type-list ) to ( ssa-id-and-type-list ) step ( ssa-id-and-type-list ) region More... | |
void | printLoopControl (OpAsmPrinter &p, Operation *op, Region ®ion, ValueRange lowerbound, TypeRange lowerboundType, ValueRange upperbound, TypeRange upperboundType, ValueRange steps, TypeRange stepType) |
template<typename Op > | |
static LogicalResult | checkDeclareOperands (Op &op, const mlir::ValueRange &operands, bool requireAtLeastOneOperand=true) |
static unsigned | getParallelismForDeviceType (acc::RoutineOp op, acc::DeviceType dtype) |
static ParseResult | parseBindName (OpAsmParser &parser, mlir::ArrayAttr &bindName, mlir::ArrayAttr &deviceTypes) |
static void | printBindName (mlir::OpAsmPrinter &p, mlir::Operation *op, std::optional< mlir::ArrayAttr > bindName, std::optional< mlir::ArrayAttr > deviceTypes) |
static ParseResult | parseRoutineGangClause (OpAsmParser &parser, mlir::ArrayAttr &gang, mlir::ArrayAttr &gangDim, mlir::ArrayAttr &gangDimDeviceTypes) |
void | printRoutineGangClause (OpAsmPrinter &p, Operation *op, std::optional< mlir::ArrayAttr > gang, std::optional< mlir::ArrayAttr > gangDim, std::optional< mlir::ArrayAttr > gangDimDeviceTypes) |
static ParseResult | parseDeviceTypeArrayAttr (OpAsmParser &parser, mlir::ArrayAttr &deviceTypes) |
static void | printDeviceTypeArrayAttr (mlir::OpAsmPrinter &p, mlir::Operation *op, std::optional< mlir::ArrayAttr > deviceTypes) |
#define GET_ATTRDEF_CLASSES |
Definition at line 2831 of file OpenACC.cpp.
#define GET_ATTRDEF_LIST |
#define GET_OP_CLASSES |
Definition at line 2828 of file OpenACC.cpp.
#define GET_OP_LIST |
#define GET_TYPEDEF_CLASSES |
Definition at line 2834 of file OpenACC.cpp.
#define GET_TYPEDEF_LIST |
|
static |
Check dataOperands for acc.parallel, acc.serial and acc.kernels.
Definition at line 676 of file OpenACC.cpp.
|
static |
Definition at line 2331 of file OpenACC.cpp.
LogicalResult checkDeviceTypes | ( | mlir::ArrayAttr | deviceTypes | ) |
Check for duplicates in the DeviceType array attribute.
Definition at line 1775 of file OpenACC.cpp.
References mlir::failure(), and mlir::success().
|
static |
Definition at line 691 of file OpenACC.cpp.
|
static |
Definition at line 172 of file OpenACC.cpp.
|
static |
Definition at line 107 of file OpenACC.cpp.
Referenced by getValueInDeviceTypeSegment(), getValuesFromSegments(), getWaitDevnumValue(), and getWaitValuesWithoutDevnum().
|
static |
Definition at line 2413 of file OpenACC.cpp.
|
static |
Definition at line 822 of file OpenACC.cpp.
References findSegment().
|
static |
Definition at line 120 of file OpenACC.cpp.
References findSegment().
Referenced by getWaitDevnumValue(), and getWaitValuesWithoutDevnum().
|
static |
Definition at line 136 of file OpenACC.cpp.
References findSegment(), getValuesFromSegments(), and hasDeviceTypeValues().
|
static |
Definition at line 152 of file OpenACC.cpp.
References findSegment(), and getValuesFromSegments().
|
static |
Definition at line 82 of file OpenACC.cpp.
References hasDeviceTypeValues().
|
static |
Definition at line 76 of file OpenACC.cpp.
Referenced by getWaitDevnumValue(), hasDeviceType(), hasOnlyDeviceTypeNone(), and printDeviceTypes().
bool hasDuplicateDeviceTypes | ( | std::optional< mlir::ArrayAttr > | segments, |
llvm::SmallSet< mlir::acc::DeviceType, 3 > & | deviceTypes | ||
) |
Definition at line 1760 of file OpenACC.cpp.
|
static |
Definition at line 1122 of file OpenACC.cpp.
References hasDeviceTypeValues(), and None.
|
static |
Definition at line 459 of file OpenACC.cpp.
|
static |
Definition at line 2446 of file OpenACC.cpp.
References mlir::failed(), mlir::AsmParser::parseCommaSeparatedList(), and mlir::success().
|
static |
Definition at line 1287 of file OpenACC.cpp.
References mlir::AsmParser::emitError(), mlir::failure(), mlir::get(), mlir::AsmParser::getContext(), mlir::AsmParser::getCurrentLocation(), mlir::AsmParser::parseLParen(), mlir::AsmParser::parseOptionalKeyword(), mlir::AsmParser::parseRParen(), mlir::succeeded(), and mlir::success().
|
static |
Definition at line 2573 of file OpenACC.cpp.
References mlir::failed(), mlir::failure(), mlir::get(), mlir::AsmParser::getContext(), None, mlir::AsmParser::parseCommaSeparatedList(), mlir::AsmParser::parseOptionalLParen(), mlir::AsmParser::parseOptionalLSquare(), mlir::AsmParser::parseRParen(), mlir::AsmParser::parseRSquare(), mlir::succeeded(), and mlir::success().
|
static |
Definition at line 1167 of file OpenACC.cpp.
References mlir::failed(), mlir::AsmParser::parseCommaSeparatedList(), and mlir::success().
|
static |
Definition at line 1205 of file OpenACC.cpp.
References mlir::failed(), mlir::failure(), mlir::get(), mlir::AsmParser::getContext(), None, mlir::AsmParser::parseComma(), mlir::AsmParser::parseCommaSeparatedList(), mlir::AsmParser::parseOptionalLParen(), mlir::AsmParser::parseOptionalLSquare(), mlir::AsmParser::parseRSquare(), mlir::succeeded(), and mlir::success().
|
static |
Definition at line 975 of file OpenACC.cpp.
References mlir::failed(), mlir::failure(), mlir::detail::DenseArrayAttrImpl< int32_t >::get(), mlir::get(), mlir::AsmParser::getContext(), mlir::AsmParser::None, None, mlir::AsmParser::parseAttribute(), mlir::AsmParser::parseCommaSeparatedList(), mlir::AsmParser::parseLBrace(), mlir::AsmParser::parseOptionalComma(), mlir::AsmParser::parseOptionalLSquare(), mlir::AsmParser::parseRBrace(), mlir::AsmParser::parseRSquare(), mlir::succeeded(), and mlir::success().
|
static |
Definition at line 1588 of file OpenACC.cpp.
References mlir::AsmParser::emitError(), mlir::failed(), mlir::failure(), mlir::get(), mlir::AsmParser::getContext(), mlir::AsmParser::getCurrentLocation(), None, mlir::AsmParser::parseAttribute(), mlir::AsmParser::parseCommaSeparatedList(), parseGangValue(), mlir::AsmParser::parseLBrace(), mlir::AsmParser::parseOptionalComma(), mlir::AsmParser::parseOptionalLParen(), mlir::AsmParser::parseOptionalLSquare(), mlir::AsmParser::parseRBrace(), mlir::AsmParser::parseRParen(), mlir::AsmParser::parseRSquare(), mlir::succeeded(), and mlir::success().
|
static |
Definition at line 1569 of file OpenACC.cpp.
References mlir::failure(), mlir::AsmParser::parseColonType(), mlir::AsmParser::parseEqual(), mlir::OpAsmParser::parseOperand(), mlir::AsmParser::parseOptionalKeyword(), mlir::succeeded(), and mlir::success().
Referenced by parseGangClause().
ParseResult parseLoopControl | ( | OpAsmParser & | parser, |
Region & | region, | ||
SmallVectorImpl< OpAsmParser::UnresolvedOperand > & | lowerbound, | ||
SmallVectorImpl< Type > & | lowerboundType, | ||
SmallVectorImpl< OpAsmParser::UnresolvedOperand > & | upperbound, | ||
SmallVectorImpl< Type > & | upperboundType, | ||
SmallVectorImpl< OpAsmParser::UnresolvedOperand > & | step, | ||
SmallVectorImpl< Type > & | stepType | ||
) |
loop-control ::= control
(
ssa-id-and-type-list )
=
(
ssa-id-and-type-list )
to
(
ssa-id-and-type-list )
step
(
ssa-id-and-type-list )
region
Definition at line 2047 of file OpenACC.cpp.
References mlir::failure(), None, mlir::OpAsmParser::parseArgumentList(), mlir::AsmParser::parseColonTypeList(), mlir::AsmParser::parseEqual(), mlir::AsmParser::parseKeyword(), mlir::AsmParser::parseLParen(), mlir::OpAsmParser::parseOperandList(), mlir::AsmParser::parseOptionalKeyword(), mlir::OpAsmParser::parseRegion(), mlir::AsmParser::parseRParen(), and mlir::succeeded().
|
static |
Definition at line 908 of file OpenACC.cpp.
References mlir::failed(), mlir::failure(), mlir::detail::DenseArrayAttrImpl< int32_t >::get(), mlir::get(), mlir::AsmParser::getContext(), mlir::AsmParser::None, None, mlir::AsmParser::parseAttribute(), mlir::AsmParser::parseCommaSeparatedList(), mlir::AsmParser::parseLBrace(), mlir::AsmParser::parseOptionalComma(), mlir::AsmParser::parseOptionalLSquare(), mlir::AsmParser::parseRBrace(), mlir::AsmParser::parseRSquare(), mlir::succeeded(), and mlir::success().
|
static |
Definition at line 445 of file OpenACC.cpp.
|
static |
Definition at line 2482 of file OpenACC.cpp.
References mlir::failed(), mlir::failure(), mlir::get(), mlir::AsmParser::getContext(), None, mlir::AsmParser::parseComma(), mlir::AsmParser::parseCommaSeparatedList(), mlir::AsmParser::parseOptionalLParen(), mlir::AsmParser::parseOptionalLSquare(), mlir::AsmParser::parseRSquare(), mlir::succeeded(), and mlir::success().
|
static |
Definition at line 640 of file OpenACC.cpp.
References mlir::failed(), mlir::failure(), mlir::get(), mlir::AsmParser::getContext(), mlir::AsmParser::parseCommaSeparatedList(), and mlir::success().
|
static |
Definition at line 1038 of file OpenACC.cpp.
References mlir::failed(), mlir::failure(), mlir::detail::DenseArrayAttrImpl< int32_t >::get(), mlir::BoolAttr::get(), mlir::get(), mlir::AsmParser::getContext(), mlir::AsmParser::None, None, mlir::AsmParser::parseAttribute(), mlir::AsmParser::parseColon(), mlir::AsmParser::parseComma(), mlir::AsmParser::parseCommaSeparatedList(), mlir::AsmParser::parseLBrace(), mlir::AsmParser::parseOptionalComma(), mlir::AsmParser::parseOptionalKeyword(), mlir::AsmParser::parseOptionalLParen(), mlir::AsmParser::parseOptionalLSquare(), mlir::AsmParser::parseRBrace(), mlir::AsmParser::parseRParen(), mlir::AsmParser::parseRSquare(), mlir::succeeded(), and mlir::success().
|
static |
Definition at line 2472 of file OpenACC.cpp.
|
static |
Definition at line 1313 of file OpenACC.cpp.
|
static |
Definition at line 2600 of file OpenACC.cpp.
|
static |
Definition at line 1194 of file OpenACC.cpp.
|
static |
Definition at line 1267 of file OpenACC.cpp.
|
static |
Definition at line 1021 of file OpenACC.cpp.
|
static |
Definition at line 96 of file OpenACC.cpp.
References hasDeviceTypeValues().
void printGangClause | ( | OpAsmPrinter & | p, |
Operation * | op, | ||
mlir::OperandRange | operands, | ||
mlir::TypeRange | types, | ||
std::optional< mlir::ArrayAttr > | gangArgTypes, | ||
std::optional< mlir::ArrayAttr > | deviceTypes, | ||
std::optional< mlir::DenseI32ArrayAttr > | segments, | ||
std::optional< mlir::ArrayAttr > | gangOnlyDeviceTypes | ||
) |
Definition at line 1715 of file OpenACC.cpp.
void printLoopControl | ( | OpAsmPrinter & | p, |
Operation * | op, | ||
Region & | region, | ||
ValueRange | lowerbound, | ||
TypeRange | lowerboundType, | ||
ValueRange | upperbound, | ||
TypeRange | upperboundType, | ||
ValueRange | steps, | ||
TypeRange | stepType | ||
) |
Definition at line 2078 of file OpenACC.cpp.
|
static |
Definition at line 958 of file OpenACC.cpp.
void printRoutineGangClause | ( | OpAsmPrinter & | p, |
Operation * | op, | ||
std::optional< mlir::ArrayAttr > | gang, | ||
std::optional< mlir::ArrayAttr > | gangDim, | ||
std::optional< mlir::ArrayAttr > | gangDimDeviceTypes | ||
) |
Definition at line 2543 of file OpenACC.cpp.
|
static |
Definition at line 952 of file OpenACC.cpp.
References None.
|
static |
Definition at line 660 of file OpenACC.cpp.
|
static |
Definition at line 1133 of file OpenACC.cpp.
|
static |
Definition at line 757 of file OpenACC.cpp.
|
static |
Definition at line 747 of file OpenACC.cpp.
|
static |
Definition at line 535 of file OpenACC.cpp.