From 76ccca8d155d333d7ae0a5c8213309158acbae24 Mon Sep 17 00:00:00 2001 From: lattner Date: Thu, 13 Feb 2020 23:15:38 +0000 Subject: [PATCH] Automated deployment: Thu Feb 13 23:15:38 UTC 2020 18088f749385b6b88ebe500d1890e89aaf617229 --- docs/Dialects/VectorOps/index.html | 22 +++++++++++----------- docs/Dialects/index.html | 2 +- docs/Dialects/index.xml | 2 +- docs/index.html | 2 +- index.xml | 2 +- users/index.html | 2 +- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/Dialects/VectorOps/index.html b/docs/Dialects/VectorOps/index.html index 866aeca705b22..93acba9939149 100644 --- a/docs/Dialects/VectorOps/index.html +++ b/docs/Dialects/VectorOps/index.html @@ -1,5 +1,5 @@ Dialect 'vector' definition - MLIR

-MLIR

Multi-Level IR Compiler Framework

Multi-Level IR Compiler Framework

Dialect 'vector' definition

Operation definition

vector.broadcast (vector::BroadcastOp)

broadcast operation

Description:

Broadcasts the scalar or k-D vector value in the source operand to a n-D result vector such that the broadcast makes sense, i.e., the source operand is duplicated to match the given rank and sizes in the result vector. The legality rules are:

  • the source operand must have the same element type as the result type
  • a k-D vector <s_1 x .. x s_k x type> can be broadcast to @@ -204,7 +204,7 @@ close to the corresponding LLVM intrinsics:

    http://llvm.org/docs/LangRef.html#experimental-vector-reduction-intrinsics

    Examples:

      %1 = vector.reduction "add", %0 : vector<16xf32> into f32
     
       %3 = vector.reduction "xor", %2 : vector<4xi32> into i32
    -

    Operands:

    1. vector: vector of any type values

    Attributes:

    AttributeMLIR TypeDescription
    kindStringAttrstring attribute attribute

    Results:

    1. dest: any type

    vector.reshape (vector::ReshapeOp)

    vector reshape operation

    Description:

    Reshapes its vector operand from ‘input_shape’ to ‘output_shape’ maintaining +

    Operands:

    1. vector: vector of any type values

    Attributes:

    AttributeMLIR TypeDescription
    kindStringAttrstring attribute attribute

    Results:

    1. dest: any type

    vector.reductionv2 (vector::ReductionV2Op)

    reduction operation

    Description:

    As vector.reduction, but with a fused accumulator (add/mul for fp only).

    Operands:

    1. vector: vector of 32-bit float or 64-bit float values
    2. acc: any type

    Attributes:

    AttributeMLIR TypeDescription
    kindStringAttrstring attribute attribute

    Results:

    1. dest: any type

    vector.reshape (vector::ReshapeOp)

    vector reshape operation

    Description:

    Reshapes its vector operand from ‘input_shape’ to ‘output_shape’ maintaining fixed vector dimension ‘fixed_vector_sizes’ on the innermost vector dimensions.

    The parameters ‘input_shape’ and ‘output_shape’ represent valid data shapes across fixed vector shapes. For example, if a vector has a valid data @@ -254,7 +254,7 @@ [i, -, -, -]], [[j, k, l, m], [n, o, p, q], -[r, -, -, -]]]

    Operands:

    1. vector: vector of any type values
    2. input_shape: index
    3. output_shape: index

    Attributes:

    AttributeMLIR TypeDescription
    fixed_vector_sizesArrayAttr64-bit integer array attribute attribute
    operand_segment_sizesDenseIntElementsAttr32-bit integer elements attribute attribute

    Results:

    1. «unnamed»: vector of any type values

    vector.shape_cast (vector::ShapeCastOp)

    shape_cast casts between vector shapes

    Description:

    The shape_cast operation casts between an n-D source vector shape and +[r, -, -, -]]]

    Operands:

    1. vector: vector of any type values
    2. input_shape: index
    3. output_shape: index

    Attributes:

    AttributeMLIR TypeDescription
    fixed_vector_sizesArrayAttr64-bit integer array attribute attribute
    operand_segment_sizesDenseIntElementsAttr32-bit integer elements attribute attribute

    Results:

    1. «unnamed»: vector of any type values

    vector.shape_cast (vector::ShapeCastOp)

    shape_cast casts between vector shapes

    Description:

    The shape_cast operation casts between an n-D source vector shape and a k-D result vector shape (the element type remains the same).

    If reducing rank (n > k), result dimension sizes must be a product of contiguous source dimension sizes. If expanding rank (n < k), source dimensions must factor into a @@ -275,7 +275,7 @@ // may have different shapes. %5 = vector.shape_cast %4 : tuple<vector<3x4x2xf32>, vector<3x3x2xf32>> to tuple<vector<12x2xf32>, vector<9x2xf32>> -

Operands:

  1. source: vector of any type values or tuple with any combination of vector of any type values values

Attributes:

Results:

  1. result: vector of any type values or tuple with any combination of vector of any type values values

vector.shuffle (vector::ShuffleOp)

shuffle operation

Description:

The shuffle operation constructs a permutation (or duplication) of elements +

Operands:

  1. source: vector of any type values or tuple with any combination of vector of any type values values

Attributes:

Results:

  1. result: vector of any type values or tuple with any combination of vector of any type values values

vector.shuffle (vector::ShuffleOp)

shuffle operation

Description:

The shuffle operation constructs a permutation (or duplication) of elements from two input vectors, returning a vector with the same element type as the input and a length that is the same as the shuffle mask. The two input vectors must have the same element type, rank, and trailing dimension sizes @@ -293,7 +293,7 @@ %2 = vector.shuffle %a, %b[3, 2, 1, 0] : vector<2xf32>, vector<2xf32> ; yields vector<4xf32> -

Operands:

  1. v1: vector of any type values
  2. v2: vector of any type values

Attributes:

AttributeMLIR TypeDescription
maskArrayAttr64-bit integer array attribute attribute

Results:

  1. vector: vector of any type values

vector.strided_slice (vector::StridedSliceOp)

strided_slice operation

Description:

Takes an n-D vector, k-D offsets integer array attribute, a k-sized +

Operands:

  1. v1: vector of any type values
  2. v2: vector of any type values

Attributes:

AttributeMLIR TypeDescription
maskArrayAttr64-bit integer array attribute attribute

Results:

  1. vector: vector of any type values

vector.strided_slice (vector::StridedSliceOp)

strided_slice operation

Description:

Takes an n-D vector, k-D offsets integer array attribute, a k-sized sizes integer array attribute, a k-sized strides integer array attribute and extracts the n-D subvector at the proper offset.

At the moment strides must contain only 1s. // TODO(ntv) support non-1 strides.

Returns an n-D vector where the first k-D dimensions match the sizes @@ -303,7 +303,7 @@ vector<4x8x16xf32> to vector<2x4x16xf32>

// TODO(ntv) Evolve to a range form syntax similar to: %1 = vector.strided_slice %0[0:2:1][2:4:1] -vector<4x8x16xf32> to vector<2x4x16xf32>

Operands:

  1. vector: vector of any type values

Attributes:

AttributeMLIR TypeDescription
offsetsArrayAttr64-bit integer array attribute attribute
sizesArrayAttr64-bit integer array attribute attribute
stridesArrayAttr64-bit integer array attribute attribute

Results:

  1. «unnamed»: vector of any type values

vector.transfer_read (vector::TransferReadOp)

Reads a supervector from memory into an SSA vector value.

Description:

The vector.transfer_read op performs a blocking read from a slice within +vector<4x8x16xf32> to vector<2x4x16xf32>

Operands:

  1. vector: vector of any type values

Attributes:

AttributeMLIR TypeDescription
offsetsArrayAttr64-bit integer array attribute attribute
sizesArrayAttr64-bit integer array attribute attribute
stridesArrayAttr64-bit integer array attribute attribute

Results:

  1. «unnamed»: vector of any type values

vector.transfer_read (vector::TransferReadOp)

Reads a supervector from memory into an SSA vector value.

Description:

The vector.transfer_read op performs a blocking read from a slice within a MemRef supplied as its first operand @@ -391,7 +391,7 @@ %4 = vector.transfer_read %arg1[%c3, %c3], %vf0 {permutation_map = (d0, d1)->(d0, d1)} : memref<?x?xvector<4x3xf32>>, vector<1x1x4x3xf32> -

Operands:

  1. memref: memref of any type values
  2. indices: index
  3. padding: any type

Attributes:

AttributeMLIR TypeDescription
permutation_mapAffineMapAttrAffineMap attribute attribute

Results:

  1. vector: vector of any type values

vector.transfer_write (vector::TransferWriteOp)

The vector.transfer_write op writes a supervector to memory.

Description:

The vector.transfer_write performs a blocking write from a +

Operands:

  1. memref: memref of any type values
  2. indices: index
  3. padding: any type

Attributes:

AttributeMLIR TypeDescription
permutation_mapAffineMapAttrAffineMap attribute attribute

Results:

  1. vector: vector of any type values

vector.transfer_write (vector::TransferWriteOp)

The vector.transfer_write op writes a supervector to memory.

Description:

The vector.transfer_write performs a blocking write from a vector , supplied as its first operand, into a slice within a @@ -432,7 +432,7 @@ vector.transfer_write %4, %arg1[%c3, %c3] {permutation_map = (d0, d1)->(d0, d1)} : vector<1x1x4x3xf32>, memref<?x?xvector<4x3xf32>> -

Operands:

  1. vector: vector of any type values
  2. memref: memref of any type values
  3. indices: index

Attributes:

AttributeMLIR TypeDescription
permutation_mapAffineMapAttrAffineMap attribute attribute

Results:

vector.tuple_get (vector::TupleGetOp)

vector tuple get operation

Description:

Returns the tuple element of ‘vectors’ at ‘index’.

Note that this operation is used during the vector op unrolling +

Operands:

  1. vector: vector of any type values
  2. memref: memref of any type values
  3. indices: index

Attributes:

AttributeMLIR TypeDescription
permutation_mapAffineMapAttrAffineMap attribute attribute

Results:

vector.tuple_get (vector::TupleGetOp)

vector tuple get operation

Description:

Returns the tuple element of ‘vectors’ at ‘index’.

Note that this operation is used during the vector op unrolling transformation and should be removed before lowering to lower-level dialects.

Examples:

  %4 = vector.tuple %0, %1, %2, %3
     : vector<2x2xf32>, vector<2x1xf32>, vector<2x2xf32>, vector<2x1xf32>>
@@ -440,7 +440,7 @@
   %5 = vector.tuple_get %4, 1
     : tuple<vector<2x2xf32>, vector<2x1xf32>,
             vector<2x2xf32>, vector<2x1xf32>>
-

Operands:

  1. vectors: tuple with any combination of vector of any type values values

Attributes:

AttributeMLIR TypeDescription
indexIntegerAttrarbitrary integer attribute attribute

Results:

  1. «unnamed»: vector of any type values

vector.tuple (vector::TupleOp)

make tuple of vectors operation

Description:

Returns a tuple of its operands ‘vectors’.

Note that this operation is used during the vector op unrolling +

Operands:

  1. vectors: tuple with any combination of vector of any type values values

Attributes:

AttributeMLIR TypeDescription
indexIntegerAttrarbitrary integer attribute attribute

Results:

  1. «unnamed»: vector of any type values

vector.tuple (vector::TupleOp)

make tuple of vectors operation

Description:

Returns a tuple of its operands ‘vectors’.

Note that this operation is used during the vector op unrolling transformation and should be removed before lowering to lower-level dialects.

Examples:

  %0 = vector.transfer_read ... : vector<2x2xf32>
   %1 = vector.transfer_read ... : vector<2x1xf32>
@@ -450,12 +450,12 @@
   %4 = vector.tuple %0, %1, %2, %3
     : vector<2x2xf32>, vector<2x1xf32>, vector<2x2xf32>, vector<2x1xf32>
 
-

Operands:

  1. vectors: vector of any type values

Attributes:

Results:

  1. «unnamed»: tuple with any combination of vector of any type values values

vector.type_cast (vector::TypeCastOp)

type_cast op converts a scalar memref to a vector memref

Description:

Performs a conversion from a memref with scalar element to a memref with a +

Operands:

  1. vectors: vector of any type values

Attributes:

Results:

  1. «unnamed»: tuple with any combination of vector of any type values values

vector.type_cast (vector::TypeCastOp)

type_cast op converts a scalar memref to a vector memref

Description:

Performs a conversion from a memref with scalar element to a memref with a single vector element, copying the shape of the memref to the vector. This is the minimal viable operation that is required to makeke super-vectorization operational. It can be seen as a special case of the view operation but scoped in the super-vectorization context.

Syntax:

operation ::= `vector.type_cast` ssa-use : memref-type to memref-type
 

Example:

%A  = alloc() : memref<5x4x3xf32>
 %VA = vector.type_cast %A : memref<5x4x3xf32> to memref<vector<5x4x3xf32>>
-

Operands:

  1. memref: statically shaped memref of any type values

Attributes:

Results:

  1. «unnamed»: memref of any type values

\ No newline at end of file diff --git a/docs/Dialects/index.xml b/docs/Dialects/index.xml index e2c80f427c0e7..2bd4e05b9ae36 100644 --- a/docs/Dialects/index.xml +++ b/docs/Dialects/index.xml @@ -13,7 +13,7 @@ Operands: inputs: tensor of 32-bit float values Attributes: Attribute MLIR Type This dialect contains operations for shape inference. Note: Unless explicitly stated, all functions that return a shape and take shapes as input, return the invalid shape if one of its operands is an invalid shape. This avoids flagging multiple errors for one verification failure. The dialect itself does not specify how errors should be combined (there are multiple different options, from always chosing first operand, concatting etc.Dialect 'spv' definitionhttps://mlir.llvm.org/docs/Dialects/SPIRVOps/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/SPIRVOps/The SPIR-V dialect in MLIR. SPIR-V is a binary intermediate language for representing graphical-shader stages and compute kernels for multiple Khronos APIs, including OpenCL, OpenGL, and Vulkan. See https://www.khronos.org/registry/spir-v for more details regarding SPIR-V itself. -The SPIR-V dialect aims to be a proper compiler intermediate representation to facilitate transformations. Ops in this dialect stay at the same semantic level as the SPIR-V specification and try to have one-to-one mapping to the corresponding SPIR-V instructions; but they may deviate representationally to utilize MLIR mechanisms if it results in better representation and thus benefits transformations.Dialect 'vector' definitionhttps://mlir.llvm.org/docs/Dialects/VectorOps/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/VectorOps/Operation definition vector.broadcast (vector::BroadcastOp) vector.constant_mask (vector::ConstantMaskOp) vector.contract (vector::ContractionOp) vector.create_mask (vector::CreateMaskOp) vector.extractelement (vector::ExtractElementOp) vector.extract (vector::ExtractOp) vector.extract_slices (vector::ExtractSlicesOp) vector.fma (vector::FMAOp) vector.insertelement (vector::InsertElementOp) vector.insert (vector::InsertOp) vector.insert_slices (vector::InsertSlicesOp) vector.insert_strided_slice (vector::InsertStridedSliceOp) vector.outerproduct (vector::OuterProductOp) vector.print (vector::PrintOp) vector.reduction (vector::ReductionOp) vector.reshape (vector::ReshapeOp) vector.shape_cast (vector::ShapeCastOp) vector.shuffle (vector::ShuffleOp) vector.strided_slice (vector::StridedSliceOp) vector.transfer_read (vector::TransferReadOp) vector.transfer_write (vector::TransferWriteOp) vector.tuple_get (vector::TupleGetOp) vector.tuple (vector::TupleOp) vector.type_cast (vector::TypeCastOp) Operation definition vector.broadcast (vector::BroadcastOp) broadcast operation +The SPIR-V dialect aims to be a proper compiler intermediate representation to facilitate transformations. Ops in this dialect stay at the same semantic level as the SPIR-V specification and try to have one-to-one mapping to the corresponding SPIR-V instructions; but they may deviate representationally to utilize MLIR mechanisms if it results in better representation and thus benefits transformations.Dialect 'vector' definitionhttps://mlir.llvm.org/docs/Dialects/VectorOps/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/VectorOps/Operation definition vector.broadcast (vector::BroadcastOp) vector.constant_mask (vector::ConstantMaskOp) vector.contract (vector::ContractionOp) vector.create_mask (vector::CreateMaskOp) vector.extractelement (vector::ExtractElementOp) vector.extract (vector::ExtractOp) vector.extract_slices (vector::ExtractSlicesOp) vector.fma (vector::FMAOp) vector.insertelement (vector::InsertElementOp) vector.insert (vector::InsertOp) vector.insert_slices (vector::InsertSlicesOp) vector.insert_strided_slice (vector::InsertStridedSliceOp) vector.outerproduct (vector::OuterProductOp) vector.print (vector::PrintOp) vector.reduction (vector::ReductionOp) vector.reductionv2 (vector::ReductionV2Op) vector.reshape (vector::ReshapeOp) vector.shape_cast (vector::ShapeCastOp) vector.shuffle (vector::ShuffleOp) vector.strided_slice (vector::StridedSliceOp) vector.transfer_read (vector::TransferReadOp) vector.transfer_write (vector::TransferWriteOp) vector.tuple_get (vector::TupleGetOp) vector.tuple (vector::TupleOp) vector.type_cast (vector::TypeCastOp) Operation definition vector.broadcast (vector::BroadcastOp) broadcast operation Description: Broadcasts the scalar or k-D vector value in the source operand to a n-D result vector such that the broadcast makes sense, i.GPU Dialecthttps://mlir.llvm.org/docs/Dialects/GPU/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/GPU/Note: this dialect is more likely to change than others in the near future; use with caution. This dialect provides middle-level abstractions for launching GPU kernels following a programming model similar to that of CUDA or OpenCL. It provides abstractions for kernel invocations (and may eventually provide those for device management) that are not present at the lower level (e.g., as LLVM IR intrinsics for GPUs). Its goal is to abstract away device- and driver-specific manipulations to launch a GPU kernel and provide a simple path towards GPU execution from MLIR.Linalg Dialecthttps://mlir.llvm.org/docs/Dialects/Linalg/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/Linalg/Payload-Carrying Ops Property 1: Input and Output Operands Define The Iteration Space Property 2: Reversible Mappings Between Control and Data Structures Property 3: The Type Of Iterators is Defined Explicitly Property 4: The Compute Payload is Specified With a Region Property 5: May Map To an External Library Call Property 6: Perfectly Nested Writes To The Whole Output Operands Putting it Together Data Representation: Views Metadata Ops Named Payload-Carrying Ops Linalg is designed to solve the High-level Hierarchical Optimization (HHO box) in MLIR and to interoperate nicely within a Mixture Of Expert Compilers environment (i.LLVM IR Dialecthttps://mlir.llvm.org/docs/Dialects/LLVM/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/LLVM/This dialect wraps the LLVM IR types and instructions into MLIR types and operations. It provides several additional operations that are necessary to cover for the differences in the IR structure (e.g., MLIR does not have phi operations and LLVM IR does not have a constant operation). In this document, we use &ldquo;LLVM IR&rdquo; to designate the intermediate representation of LLVM and &ldquo;LLVM IR dialect&rdquo; to refer to the MLIR dialect reflecting LLVM instructions and types.SPIR-V Dialecthttps://mlir.llvm.org/docs/Dialects/SPIR-V/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/SPIR-V/This document describes the design of the SPIR-V dialect in MLIR. It lists various design choices we made for modeling different SPIR-V mechanisms, and their rationale. diff --git a/docs/index.html b/docs/index.html index c9557102f9bd8..da6782e43030e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,3 +1,3 @@ Code Documentation - MLIR

MLIR

Multi-Level IR Compiler Framework

\ No newline at end of file +Next - Dialects \ No newline at end of file diff --git a/index.xml b/index.xml index 79f07c9d82f69..7b4825b5109d5 100644 --- a/index.xml +++ b/index.xml @@ -28,7 +28,7 @@ Operands: inputs: tensor of 32-bit float values Attributes: Attribute MLIR Type This dialect contains operations for shape inference. Note: Unless explicitly stated, all functions that return a shape and take shapes as input, return the invalid shape if one of its operands is an invalid shape. This avoids flagging multiple errors for one verification failure. The dialect itself does not specify how errors should be combined (there are multiple different options, from always chosing first operand, concatting etc.
Dialect 'spv' definitionhttps://mlir.llvm.org/docs/Dialects/SPIRVOps/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/SPIRVOps/The SPIR-V dialect in MLIR. SPIR-V is a binary intermediate language for representing graphical-shader stages and compute kernels for multiple Khronos APIs, including OpenCL, OpenGL, and Vulkan. See https://www.khronos.org/registry/spir-v for more details regarding SPIR-V itself. -The SPIR-V dialect aims to be a proper compiler intermediate representation to facilitate transformations. Ops in this dialect stay at the same semantic level as the SPIR-V specification and try to have one-to-one mapping to the corresponding SPIR-V instructions; but they may deviate representationally to utilize MLIR mechanisms if it results in better representation and thus benefits transformations.Dialect 'vector' definitionhttps://mlir.llvm.org/docs/Dialects/VectorOps/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/VectorOps/Operation definition vector.broadcast (vector::BroadcastOp) vector.constant_mask (vector::ConstantMaskOp) vector.contract (vector::ContractionOp) vector.create_mask (vector::CreateMaskOp) vector.extractelement (vector::ExtractElementOp) vector.extract (vector::ExtractOp) vector.extract_slices (vector::ExtractSlicesOp) vector.fma (vector::FMAOp) vector.insertelement (vector::InsertElementOp) vector.insert (vector::InsertOp) vector.insert_slices (vector::InsertSlicesOp) vector.insert_strided_slice (vector::InsertStridedSliceOp) vector.outerproduct (vector::OuterProductOp) vector.print (vector::PrintOp) vector.reduction (vector::ReductionOp) vector.reshape (vector::ReshapeOp) vector.shape_cast (vector::ShapeCastOp) vector.shuffle (vector::ShuffleOp) vector.strided_slice (vector::StridedSliceOp) vector.transfer_read (vector::TransferReadOp) vector.transfer_write (vector::TransferWriteOp) vector.tuple_get (vector::TupleGetOp) vector.tuple (vector::TupleOp) vector.type_cast (vector::TypeCastOp) Operation definition vector.broadcast (vector::BroadcastOp) broadcast operation +The SPIR-V dialect aims to be a proper compiler intermediate representation to facilitate transformations. Ops in this dialect stay at the same semantic level as the SPIR-V specification and try to have one-to-one mapping to the corresponding SPIR-V instructions; but they may deviate representationally to utilize MLIR mechanisms if it results in better representation and thus benefits transformations.Dialect 'vector' definitionhttps://mlir.llvm.org/docs/Dialects/VectorOps/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/VectorOps/Operation definition vector.broadcast (vector::BroadcastOp) vector.constant_mask (vector::ConstantMaskOp) vector.contract (vector::ContractionOp) vector.create_mask (vector::CreateMaskOp) vector.extractelement (vector::ExtractElementOp) vector.extract (vector::ExtractOp) vector.extract_slices (vector::ExtractSlicesOp) vector.fma (vector::FMAOp) vector.insertelement (vector::InsertElementOp) vector.insert (vector::InsertOp) vector.insert_slices (vector::InsertSlicesOp) vector.insert_strided_slice (vector::InsertStridedSliceOp) vector.outerproduct (vector::OuterProductOp) vector.print (vector::PrintOp) vector.reduction (vector::ReductionOp) vector.reductionv2 (vector::ReductionV2Op) vector.reshape (vector::ReshapeOp) vector.shape_cast (vector::ShapeCastOp) vector.shuffle (vector::ShuffleOp) vector.strided_slice (vector::StridedSliceOp) vector.transfer_read (vector::TransferReadOp) vector.transfer_write (vector::TransferWriteOp) vector.tuple_get (vector::TupleGetOp) vector.tuple (vector::TupleOp) vector.type_cast (vector::TypeCastOp) Operation definition vector.broadcast (vector::BroadcastOp) broadcast operation Description: Broadcasts the scalar or k-D vector value in the source operand to a n-D result vector such that the broadcast makes sense, i.Dialect Conversionhttps://mlir.llvm.org/docs/DialectConversion/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/DialectConversion/This document describes a framework in MLIR in which to perform operation conversions between, and within dialects. This framework allows for transforming illegal operations to those supported by a provided conversion target, via a set of pattern-based operation rewriting patterns. Modes of Conversion Conversion Target Recursive Legality Rewrite Pattern Specification Restrictions Type Conversion Type Converter Conversion Patterns Region Signature Conversion To utilize the framework, a few things must be provided:GPU Dialecthttps://mlir.llvm.org/docs/Dialects/GPU/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/GPU/Note: this dialect is more likely to change than others in the near future; use with caution. This dialect provides middle-level abstractions for launching GPU kernels following a programming model similar to that of CUDA or OpenCL. It provides abstractions for kernel invocations (and may eventually provide those for device management) that are not present at the lower level (e.g., as LLVM IR intrinsics for GPUs). Its goal is to abstract away device- and driver-specific manipulations to launch a GPU kernel and provide a simple path towards GPU execution from MLIR.Introduction and Usage Guide to MLIR's Diagnostics Infrastructurehttps://mlir.llvm.org/docs/Diagnostics/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Diagnostics/Source Locations CallSite Location FileLineCol Location Fused Location Name Location Opaque Location Unknown Location Diagnostic Engine Constructing a Diagnostic Diagnostic Appending arguments Attaching notes InFlight Diagnostic Diagnostic Configuration Options Print Operation On Diagnostic Print StackTrace On Diagnostic Common Diagnostic Handlers Scoped Diagnostic Handler SourceMgr Diagnostic Handler SourceMgr Diagnostic Verifier Handler Parallel Diagnostic Handler This document presents an introduction to using and interfacing with MLIR&rsquo;s diagnostics infrastructure.Introduction to MLIR Interfaceshttps://mlir.llvm.org/docs/Interfaces/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Interfaces/MLIR is generic and very extensible; it allows for opaquely representing many different dialects that have their own operations, attributes, types, and so on. This allows for dialects to be very expressive in their semantics and for MLIR to capture many different levels of abstraction. The downside to this is that transformations and analyses must be extremely conservative about the operations that they encounter, and must special-case the different dialects that they support.Introduction to MLIR Operation Traitshttps://mlir.llvm.org/docs/Traits/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Traits/Defining a Trait Parametric Traits Attaching a Trait Using a Trait Trait List Broadcastable Commutative Function-Like HasParent IsolatedFromAbove NoSideEffect Single Block with Implicit Terminator Symbol SymbolTable Terminator MLIR allows for a truly open operation ecosystem, as any dialect may define operations that suit a specific level of abstraction. Traits are a mechanism in which to abstract implementation details and properties that are common across many different operations.Linalg Dialecthttps://mlir.llvm.org/docs/Dialects/Linalg/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/Linalg/Payload-Carrying Ops Property 1: Input and Output Operands Define The Iteration Space Property 2: Reversible Mappings Between Control and Data Structures Property 3: The Type Of Iterators is Defined Explicitly Property 4: The Compute Payload is Specified With a Region Property 5: May Map To an External Library Call Property 6: Perfectly Nested Writes To The Whole Output Operands Putting it Together Data Representation: Views Metadata Ops Named Payload-Carrying Ops Linalg is designed to solve the High-level Hierarchical Optimization (HHO box) in MLIR and to interoperate nicely within a Mixture Of Expert Compilers environment (i.Linalg Dialect Rationale: The Case For Compiler-Friendly Custom Operationshttps://mlir.llvm.org/docs/RationaleLinalgDialect/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/RationaleLinalgDialect/Positioning Inception Evolution Lessons from ONNX Lessons from LIFT Lessons from XLA Lessons from Halide and TVM Lessons from Tensor Comprehensions Lessons from Polyhedral compilers Lessons from the Affine dialect Transformations and Simplicity First Preservation of Information Declarative Specification: Avoid Raising Progressive Lowering: Don&rsquo;t Lose Information too Quickly Composable and Declarative Transformations Suitability for Search and Machine Learning Extensibility and Future-Proofness Algorithms + Data Structures = Programs The Dialect Need not be Closed Under Transformations Summary of Existing Alternatives a Picture Positioning This document describes the key design principles that led to the existing implementation of Linalg and aims at exposing the tradeoffs involved when building higher-level Intermediate Representations (IR) and Dialects to facilitate code generation.LLVM IR Dialecthttps://mlir.llvm.org/docs/Dialects/LLVM/Thu, 01 Jan 1970 00:00:00 +0000https://mlir.llvm.org/docs/Dialects/LLVM/This dialect wraps the LLVM IR types and instructions into MLIR types and operations. It provides several additional operations that are necessary to cover for the differences in the IR structure (e.g., MLIR does not have phi operations and LLVM IR does not have a constant operation). diff --git a/users/index.html b/users/index.html index 0a0ba92c92ae5..61cfca926158f 100644 --- a/users/index.html +++ b/users/index.html @@ -4,5 +4,5 @@ Lift project : “a high-level functional data parallel language with a system of rewrite rules which encode algorithmic -and hardware-specific optimisation choices”.

IREE

IREE (pronounced “eerie”) is a compiler and minimal runtime system for compiling ML models for execution against a HAL (Hardware Abstraction Layer) that is aligned with Vulkan. It aims to be a viable way to compile and run ML devices on a variety of small and medium sized systems, leveraging either the GPU (via Vulkan/SPIR-V), CPU or some combination. It also aims to interoperate seamlessly with existing users of Vulkan APIs, specifically focused on games and rendering pipelines.