MLIR
19.0.0git
|
#include <cassert>
#include <cstdint>
#include <functional>
#include <utility>
#include "mlir/Dialect/Arith/IR/Arith.h"
#include "mlir/Dialect/CommonFolders.h"
#include "mlir/Dialect/UB/IR/UBOps.h"
#include "mlir/IR/Builders.h"
#include "mlir/IR/BuiltinAttributeInterfaces.h"
#include "mlir/IR/BuiltinAttributes.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/OpImplementation.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/IR/TypeUtilities.h"
#include "mlir/Support/LogicalResult.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/FloatingPointMode.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/TypeSwitch.h"
#include "ArithCanonicalization.inc"
#include "mlir/Dialect/Arith/IR/ArithOps.cpp.inc"
#include "mlir/Dialect/Arith/IR/ArithOpsEnums.cpp.inc"
Go to the source code of this file.
Classes | |
class | CmpFIntToFPConst |
struct | SelectToExtUI |
Macros | |
#define | GET_OP_CLASSES |
Typedefs | |
template<typename... Types> | |
using | type_list = std::tuple< Types... > * |
Functions | |
static IntegerAttr | applyToIntegerAttrs (PatternRewriter &builder, Value res, Attribute lhs, Attribute rhs, function_ref< APInt(const APInt &, const APInt &)> binFn) |
static IntegerAttr | addIntegerAttrs (PatternRewriter &builder, Value res, Attribute lhs, Attribute rhs) |
static IntegerAttr | subIntegerAttrs (PatternRewriter &builder, Value res, Attribute lhs, Attribute rhs) |
static IntegerAttr | mulIntegerAttrs (PatternRewriter &builder, Value res, Attribute lhs, Attribute rhs) |
static llvm::RoundingMode | convertArithRoundingModeToLLVMIR (RoundingMode roundingMode) |
Equivalent to convertRoundingModeToLLVM(convertArithRoundingModeToLLVM(roundingMode)). More... | |
static arith::CmpIPredicateAttr | invertPredicate (arith::CmpIPredicateAttr pred) |
static int64_t | getScalarOrElementWidth (Type type) |
static int64_t | getScalarOrElementWidth (Value value) |
static FailureOr< APInt > | getIntOrSplatIntValue (Attribute attr) |
static Attribute | getBoolAttribute (Type type, bool value) |
static Type | getI1SameShape (Type type) |
Return the type of the same shape (scalar, vector or tensor) containing i1. More... | |
static APInt | calculateUnsignedOverflow (const APInt &sum, const APInt &operand) |
static APInt | signedCeilNonnegInputs (const APInt &a, const APInt &b, bool &overflow) |
static Value | foldAndIofAndI (arith::AndIOp op) |
Fold and(a, and(a, b)) to and(a, b) More... | |
template<typename... ShapedTypes, typename... ElementTypes> | |
static Type | getUnderlyingType (Type type, type_list< ShapedTypes... >, type_list< ElementTypes... >) |
Returns a non-null type only if the provided type is one of the allowed types or one of the allowed shaped types of the allowed types. More... | |
template<typename... ElementTypes> | |
static Type | getTypeIfLike (Type type) |
Get allowed underlying types for vectors and tensors. More... | |
template<typename... ElementTypes> | |
static Type | getTypeIfLikeOrMemRef (Type type) |
Get allowed underlying types for vectors, tensors, and memrefs. More... | |
static bool | hasSameEncoding (Type typeA, Type typeB) |
Return false if both types are ranked tensor with mismatching encoding. More... | |
static bool | areValidCastInputsAndOutputs (TypeRange inputs, TypeRange outputs) |
template<typename ValType , typename Op > | |
static LogicalResult | verifyExtOp (Op op) |
template<typename ValType , typename Op > | |
static LogicalResult | verifyTruncateOp (Op op) |
template<template< typename > class WidthComparator, typename... ElementTypes> | |
static bool | checkWidthChangeCast (TypeRange inputs, TypeRange outputs) |
Validate a cast that changes the width of a type. More... | |
static FailureOr< APFloat > | convertFloatValue (APFloat sourceValue, const llvm::fltSemantics &targetSemantics, llvm::RoundingMode roundingMode=llvm::RoundingMode::NearestTiesToEven) |
Attempts to convert sourceValue to an APFloat value with targetSemantics and roundingMode , without any information loss. More... | |
template<typename From , typename To > | |
static bool | checkIntFloatCast (TypeRange inputs, TypeRange outputs) |
static bool | areIndexCastCompatible (TypeRange inputs, TypeRange outputs) |
static bool | applyCmpPredicateToEqualOperands (arith::CmpIPredicate predicate) |
Returns true if the predicate is true for two equal operands. More... | |
static std::optional< int64_t > | getIntegerWidth (Type t) |
#define GET_OP_CLASSES |
Definition at line 2583 of file ArithOps.cpp.
using type_list = std::tuple<Types...> * |
Definition at line 1193 of file ArithOps.cpp.
|
static |
Definition at line 52 of file ArithOps.cpp.
References applyToIntegerAttrs().
|
static |
Returns true if the predicate is true for two equal operands.
Definition at line 1746 of file ArithOps.cpp.
|
static |
Definition at line 43 of file ArithOps.cpp.
References mlir::get(), and mlir::Value::getType().
Referenced by addIntegerAttrs(), mulIntegerAttrs(), and subIntegerAttrs().
Definition at line 1602 of file ArithOps.cpp.
References areValidCastInputsAndOutputs(), mlir::Type::isIndex(), and mlir::Type::isSignlessInteger().
Definition at line 1235 of file ArithOps.cpp.
References hasSameEncoding(), mlir::succeeded(), and mlir::verifyCompatibleShapes().
Referenced by areIndexCastCompatible(), checkIntFloatCast(), and checkWidthChangeCast().
|
static |
Definition at line 338 of file ArithOps.cpp.
References getZero().
|
static |
Definition at line 1500 of file ArithOps.cpp.
References areValidCastInputsAndOutputs().
|
static |
Validate a cast that changes the width of a type.
Definition at line 1277 of file ArithOps.cpp.
References areValidCastInputsAndOutputs(), and getTypeIfLike().
|
static |
Equivalent to convertRoundingModeToLLVM(convertArithRoundingModeToLLVM(roundingMode)).
Not possible to implement as chain of calls as this would introduce a circular dependency with MLIRArithAttrToLLVMConversion and make arith depend on the LLVM dialect and on translation to LLVM.
Definition at line 101 of file ArithOps.cpp.
|
static |
Attempts to convert sourceValue
to an APFloat value with targetSemantics
and roundingMode
, without any information loss.
Definition at line 1292 of file ArithOps.cpp.
References mlir::failure().
|
static |
Fold and(a, and(a, b))
to and(a, b)
Definition at line 811 of file ArithOps.cpp.
Definition at line 142 of file ArithOps.cpp.
References mlir::BoolAttr::get(), mlir::DenseElementsAttr::get(), and mlir::Type::getContext().
Return the type of the same shape (scalar, vector or tensor) containing i1.
Definition at line 163 of file ArithOps.cpp.
References mlir::get(), and mlir::Type::getContext().
|
static |
Definition at line 1764 of file ArithOps.cpp.
Definition at line 134 of file ArithOps.cpp.
References mlir::failure(), mlir::m_ConstantInt(), and mlir::matchPattern().
|
static |
Definition at line 122 of file ArithOps.cpp.
References mlir::getElementTypeOrSelf(), mlir::Type::getIntOrFloatBitWidth(), and mlir::Type::isIntOrFloat().
Referenced by getScalarOrElementWidth().
|
static |
Definition at line 130 of file ArithOps.cpp.
References getScalarOrElementWidth(), and mlir::Value::getType().
Get allowed underlying types for vectors and tensors.
Definition at line 1213 of file ArithOps.cpp.
References getUnderlyingType().
Referenced by checkWidthChangeCast().
Get allowed underlying types for vectors, tensors, and memrefs.
Definition at line 1220 of file ArithOps.cpp.
References getUnderlyingType().
|
static |
Returns a non-null type only if the provided type is one of the allowed types or one of the allowed shaped types of the allowed types.
Returns the element type if a valid shaped type is provided.
Definition at line 1199 of file ArithOps.cpp.
References mlir::getElementTypeOrSelf().
Referenced by getTypeIfLike(), and getTypeIfLikeOrMemRef().
Return false if both types are ranked tensor with mismatching encoding.
Definition at line 1227 of file ArithOps.cpp.
Referenced by areValidCastInputsAndOutputs().
|
static |
Definition at line 117 of file ArithOps.cpp.
References mlir::get(), and mlir::arith::invertPredicate().
|
static |
Definition at line 62 of file ArithOps.cpp.
References applyToIntegerAttrs().
|
static |
Definition at line 636 of file ArithOps.cpp.
|
static |
Definition at line 57 of file ArithOps.cpp.
References applyToIntegerAttrs().
|
static |
Definition at line 1249 of file ArithOps.cpp.
|
static |
Definition at line 1263 of file ArithOps.cpp.