MLIR 22.0.0git
OpenACC.cpp File Reference
#include "mlir/Dialect/OpenACC/OpenACC.h"
#include "mlir/Dialect/Arith/IR/Arith.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/BuiltinAttributes.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/OpImplementation.h"
#include "mlir/IR/SymbolTable.h"
#include "mlir/Support/LLVM.h"
#include "mlir/Transforms/DialectConversion.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Support/LogicalResult.h"
#include <variant>
#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/OpenACCMPCommon/Interfaces/OpenACCMPOpsInterfaces.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< unsignedfindSegment (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 Op>
static LogicalResult checkVarAndVarType (Op op)
template<typename Op>
static LogicalResult checkVarAndAccVar (Op op)
template<typename Op>
static LogicalResult checkNoModifier (Op op)
template<typename Op>
static LogicalResult checkValidModifier (Op op, acc::DataClauseModifier validModifiers)
static ParseResult parseVar (mlir::OpAsmParser &parser, OpAsmParser::UnresolvedOperand &var)
static void printVar (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::Value var)
static ParseResult parseAccVar (mlir::OpAsmParser &parser, OpAsmParser::UnresolvedOperand &var, mlir::Type &accVarType)
static void printAccVar (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::Value accVar, mlir::Type accVarType)
static ParseResult parseVarPtrType (mlir::OpAsmParser &parser, mlir::Type &varPtrType, mlir::TypeAttr &varTypeAttr)
static void printVarPtrType (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::Type varPtrType, mlir::TypeAttr varTypeAttr)
template<typename StructureOp>
static ParseResult parseRegions (OpAsmParser &parser, OperationState &state, unsigned nRegions=1)
static bool isComputeOperation (Operation *op)
static LogicalResult verifyInitLikeSingleArgRegion (Operation *op, Region &region, 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.
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 parseOperandWithKeywordOnly (mlir::OpAsmParser &parser, std::optional< OpAsmParser::UnresolvedOperand > &operand, mlir::Type &operandType, mlir::UnitAttr &attr)
static void printOperandWithKeywordOnly (mlir::OpAsmPrinter &p, mlir::Operation *op, std::optional< mlir::Value > operand, mlir::Type operandType, mlir::UnitAttr attr)
static ParseResult parseOperandsWithKeywordOnly (mlir::OpAsmParser &parser, llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > &operands, llvm::SmallVectorImpl< Type > &types, mlir::UnitAttr &attr)
static void printOperandsWithKeywordOnly (mlir::OpAsmPrinter &p, mlir::Operation *op, mlir::OperandRange operands, mlir::TypeRange types, mlir::UnitAttr attr)
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.
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
void printLoopControl (OpAsmPrinter &p, Operation *op, Region &region, 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 &bindIdName, mlir::ArrayAttr &bindStrName, mlir::ArrayAttr &deviceIdTypes, mlir::ArrayAttr &deviceStrTypes)
static void printBindName (mlir::OpAsmPrinter &p, mlir::Operation *op, std::optional< mlir::ArrayAttr > bindIdName, std::optional< mlir::ArrayAttr > bindStrName, std::optional< mlir::ArrayAttr > deviceIdTypes, std::optional< mlir::ArrayAttr > deviceStrTypes)
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)

Macro Definition Documentation

◆ GET_ATTRDEF_CLASSES

#define GET_ATTRDEF_CLASSES

Definition at line 4600 of file OpenACC.cpp.

◆ GET_ATTRDEF_LIST

#define GET_ATTRDEF_LIST

◆ GET_OP_CLASSES

#define GET_OP_CLASSES

Definition at line 4597 of file OpenACC.cpp.

◆ GET_OP_LIST

#define GET_OP_LIST

◆ GET_TYPEDEF_CLASSES

#define GET_TYPEDEF_CLASSES

Definition at line 4603 of file OpenACC.cpp.

◆ GET_TYPEDEF_LIST

#define GET_TYPEDEF_LIST

Function Documentation

◆ checkDataOperands()

template<typename Op>
LogicalResult checkDataOperands ( Op op,
const mlir::ValueRange & operands )
static

Check dataOperands for acc.parallel, acc.serial and acc.kernels.

Definition at line 1497 of file OpenACC.cpp.

References mlir::OpState::emitError(), and success().

◆ checkDeclareOperands()

template<typename Op>
LogicalResult checkDeclareOperands ( Op & op,
const mlir::ValueRange & operands,
bool requireAtLeastOneOperand = true )
static

◆ checkDeviceTypes()

LogicalResult checkDeviceTypes ( mlir::ArrayAttr deviceTypes)

Check for duplicates in the DeviceType array attribute.

Definition at line 2993 of file OpenACC.cpp.

References success().

◆ checkNoModifier()

template<typename Op>
LogicalResult checkNoModifier ( Op op)
static

Definition at line 476 of file OpenACC.cpp.

References mlir::OpState::emitError(), and success().

◆ checkSymOperandList()

template<typename Op>
LogicalResult checkSymOperandList ( Operation * op,
std::optional< mlir::ArrayAttr > attributes,
mlir::OperandRange operands,
llvm::StringRef operandName,
llvm::StringRef symbolName,
bool checkOperandType = true )
static

◆ checkValidModifier()

template<typename Op>
LogicalResult checkValidModifier ( Op op,
acc::DataClauseModifier validModifiers )
static

Definition at line 484 of file OpenACC.cpp.

References mlir::OpState::emitError(), and success().

◆ checkVarAndAccVar()

template<typename Op>
LogicalResult checkVarAndAccVar ( Op op)
static

Definition at line 468 of file OpenACC.cpp.

References mlir::OpState::emitError(), and success().

◆ checkVarAndVarType()

template<typename Op>
LogicalResult checkVarAndVarType ( Op op)
static

Definition at line 450 of file OpenACC.cpp.

References mlir::OpState::emitError(), and success().

◆ checkWaitAndAsyncConflict()

template<typename Op>
LogicalResult checkWaitAndAsyncConflict ( Op op)
static

Definition at line 428 of file OpenACC.cpp.

References mlir::OpState::emitError(), hasDeviceType(), and success().

◆ findSegment()

std::optional< unsigned > findSegment ( ArrayAttr segments,
mlir::acc::DeviceType deviceType )
static

◆ getParallelismForDeviceType()

unsigned getParallelismForDeviceType ( acc::RoutineOp op,
acc::DeviceType dtype )
static

Definition at line 4058 of file OpenACC.cpp.

◆ getValueInDeviceTypeSegment()

mlir::Value getValueInDeviceTypeSegment ( std::optional< mlir::ArrayAttr > arrayAttr,
mlir::Operation::operand_range range,
mlir::acc::DeviceType deviceType )
static

Definition at line 1650 of file OpenACC.cpp.

References findSegment().

◆ getValuesFromSegments()

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

Definition at line 376 of file OpenACC.cpp.

References findSegment().

Referenced by getWaitDevnumValue(), and getWaitValuesWithoutDevnum().

◆ getWaitDevnumValue()

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

Definition at line 392 of file OpenACC.cpp.

References findSegment(), getValuesFromSegments(), and hasDeviceTypeValues().

◆ getWaitValuesWithoutDevnum()

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 )
static

Definition at line 408 of file OpenACC.cpp.

References findSegment(), and getValuesFromSegments().

◆ hasDeviceType()

bool hasDeviceType ( std::optional< mlir::ArrayAttr > arrayAttr,
mlir::acc::DeviceType deviceType )
static

Definition at line 338 of file OpenACC.cpp.

References hasDeviceTypeValues().

Referenced by checkWaitAndAsyncConflict().

◆ hasDeviceTypeValues()

◆ hasDuplicateDeviceTypes()

bool hasDuplicateDeviceTypes ( std::optional< mlir::ArrayAttr > segments,
llvm::SmallSet< mlir::acc::DeviceType, 3 > & deviceTypes )

Definition at line 2979 of file OpenACC.cpp.

◆ hasOnlyDeviceTypeNone()

bool hasOnlyDeviceTypeNone ( std::optional< mlir::ArrayAttr > attrs)
static

◆ isComputeOperation()

bool isComputeOperation ( Operation * op)
static

Definition at line 998 of file OpenACC.cpp.

◆ parseAccVar()

◆ parseBindName()

ParseResult parseBindName ( OpAsmParser & parser,
mlir::ArrayAttr & bindIdName,
mlir::ArrayAttr & bindStrName,
mlir::ArrayAttr & deviceIdTypes,
mlir::ArrayAttr & deviceStrTypes )
static

◆ parseCombinedConstructsLoop()

ParseResult parseCombinedConstructsLoop ( mlir::OpAsmParser & parser,
mlir::acc::CombinedConstructsTypeAttr & attr )
static

◆ parseDeviceTypeArrayAttr()

◆ parseDeviceTypeOperands()

ParseResult parseDeviceTypeOperands ( mlir::OpAsmParser & parser,
llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > & operands,
llvm::SmallVectorImpl< Type > & types,
mlir::ArrayAttr & deviceTypes )
static

Definition at line 2137 of file OpenACC.cpp.

References mlir::AsmParser::parseCommaSeparatedList(), and success().

◆ parseDeviceTypeOperandsWithKeywordOnly()

◆ parseDeviceTypeOperandsWithSegment()

◆ parseGangClause()

◆ parseGangValue()

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

◆ parseLoopControl()

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 )

◆ parseNumGangs()

◆ parseOperandsWithKeywordOnly()

◆ parseOperandWithKeywordOnly()

ParseResult parseOperandWithKeywordOnly ( mlir::OpAsmParser & parser,
std::optional< OpAsmParser::UnresolvedOperand > & operand,
mlir::Type & operandType,
mlir::UnitAttr & attr )
static

◆ parseRegions()

template<typename StructureOp>
ParseResult parseRegions ( OpAsmParser & parser,
OperationState & state,
unsigned nRegions = 1 )
static

◆ parseRoutineGangClause()

◆ parseSymOperandList()

ParseResult parseSymOperandList ( mlir::OpAsmParser & parser,
llvm::SmallVectorImpl< mlir::OpAsmParser::UnresolvedOperand > & operands,
llvm::SmallVectorImpl< Type > & types,
mlir::ArrayAttr & symbols )
static

◆ parseVar()

◆ parseVarPtrType()

ParseResult parseVarPtrType ( mlir::OpAsmParser & parser,
mlir::Type & varPtrType,
mlir::TypeAttr & varTypeAttr )
static

◆ parseWaitClause()

◆ printAccVar()

void printAccVar ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
mlir::Value accVar,
mlir::Type accVarType )
static

◆ printBindName()

void printBindName ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
std::optional< mlir::ArrayAttr > bindIdName,
std::optional< mlir::ArrayAttr > bindStrName,
std::optional< mlir::ArrayAttr > deviceIdTypes,
std::optional< mlir::ArrayAttr > deviceStrTypes )
static

Definition at line 4145 of file OpenACC.cpp.

References hasDeviceTypeValues(), and printSingleDeviceType().

◆ printCombinedConstructsLoop()

void printCombinedConstructsLoop ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
mlir::acc::CombinedConstructsTypeAttr attr )
static

Definition at line 2361 of file OpenACC.cpp.

◆ printDeviceTypeArrayAttr()

void printDeviceTypeArrayAttr ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
std::optional< mlir::ArrayAttr > deviceTypes )
static

Definition at line 4293 of file OpenACC.cpp.

References hasDeviceTypeValues().

◆ printDeviceTypeOperands()

void printDeviceTypeOperands ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
mlir::OperandRange operands,
mlir::TypeRange types,
std::optional< mlir::ArrayAttr > deviceTypes )
static

Definition at line 2164 of file OpenACC.cpp.

References hasDeviceTypeValues(), and printSingleDeviceType().

Referenced by printDeviceTypeOperandsWithKeywordOnly().

◆ printDeviceTypeOperandsWithKeywordOnly()

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

◆ printDeviceTypeOperandsWithSegment()

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

Definition at line 1989 of file OpenACC.cpp.

References printSingleDeviceType().

◆ printDeviceTypes()

void printDeviceTypes ( mlir::OpAsmPrinter & p,
std::optional< mlir::ArrayAttr > deviceTypes )
static

◆ printGangClause()

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 )

◆ printLoopControl()

void printLoopControl ( OpAsmPrinter & p,
Operation * op,
Region & region,
ValueRange lowerbound,
TypeRange lowerboundType,
ValueRange upperbound,
TypeRange upperboundType,
ValueRange steps,
TypeRange stepType )

◆ printNumGangs()

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

Definition at line 1926 of file OpenACC.cpp.

References printSingleDeviceType().

◆ printOperandsWithKeywordOnly()

void printOperandsWithKeywordOnly ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
mlir::OperandRange operands,
mlir::TypeRange types,
mlir::UnitAttr attr )
static

Definition at line 2325 of file OpenACC.cpp.

◆ printOperandWithKeywordOnly()

void printOperandWithKeywordOnly ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
std::optional< mlir::Value > operand,
mlir::Type operandType,
mlir::UnitAttr attr )
static

◆ printRoutineGangClause()

void printRoutineGangClause ( OpAsmPrinter & p,
Operation * op,
std::optional< mlir::ArrayAttr > gang,
std::optional< mlir::ArrayAttr > gangDim,
std::optional< mlir::ArrayAttr > gangDimDeviceTypes )

Definition at line 4236 of file OpenACC.cpp.

References hasDeviceTypeValues(), printDeviceTypes(), and printSingleDeviceType().

◆ printSingleDeviceType()

◆ printSymOperandList()

void printSymOperandList ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
mlir::OperandRange operands,
mlir::TypeRange types,
std::optional< mlir::ArrayAttr > attributes )
static

Definition at line 1481 of file OpenACC.cpp.

◆ printVar()

void printVar ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
mlir::Value var )
static

Definition at line 508 of file OpenACC.cpp.

References mlir::Value::getType(), and mlir::OpAsmPrinter::printOperand().

◆ printVarPtrType()

void printVarPtrType ( mlir::OpAsmPrinter & p,
mlir::Operation * op,
mlir::Type varPtrType,
mlir::TypeAttr varTypeAttr )
static

Definition at line 580 of file OpenACC.cpp.

References mlir::AsmPrinter::printType().

◆ printWaitClause()

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

◆ verifyDeviceTypeAndSegmentCountMatch()

template<typename Op>
LogicalResult verifyDeviceTypeAndSegmentCountMatch ( Op op,
OperandRange operands,
DenseI32ArrayAttr segments,
ArrayAttr deviceTypes,
llvm::StringRef keyword,
int32_t maxInSegment = 0 )
static

◆ verifyDeviceTypeCountMatch()

template<typename Op>
LogicalResult verifyDeviceTypeCountMatch ( Op op,
OperandRange operands,
ArrayAttr deviceTypes,
llvm::StringRef keyword )
static

Definition at line 1568 of file OpenACC.cpp.

References ArrayAttr(), mlir::OpState::emitOpError(), and success().

◆ verifyInitLikeSingleArgRegion()

LogicalResult verifyInitLikeSingleArgRegion ( Operation * op,
Region & region,
StringRef regionType,
StringRef regionName,
Type type,
bool verifyYield,
bool optional = false )
static