MLIR

Multi-Level IR Compiler Framework

'x86vector' Dialect

Operations 

source

x86vector.avx.intr.dot (x86vector::DotOp) 

Dot

Syntax:

operation ::= `x86vector.avx.intr.dot` $a `,` $b attr-dict `:` type($res)

Computes the 4-way dot products of the lower and higher parts of the source vectors and broadcasts the two results to the lower and higher elements of the destination vector, respectively. Adding one element of the lower part to one element of the higher part in the destination vector yields the full dot product of the two source vectors.

Example:

%0 = x86vector.avx.intr.dot %a, %b : vector<8xf32>
%1 = vector.extractelement %0[%i0 : i32]: vector<8xf32>
%2 = vector.extractelement %0[%i4 : i32]: vector<8xf32>
%d = arith.addf %1, %2 : f32

Traits: AlwaysSpeculatableImplTrait, SameOperandsAndResultType

Interfaces: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface), OneToOneIntrinsicOp

Effects: MemoryEffects::Effect{}

Operands: 

OperandDescription
avector of 32-bit float values of length 8
bvector of 32-bit float values of length 8

Results: 

ResultDescription
resvector of 32-bit float values of length 8

x86vector.avx.rsqrt (x86vector::RsqrtOp) 

Rsqrt

Syntax:

operation ::= `x86vector.avx.rsqrt` $a attr-dict `:` type($a)

Traits: AlwaysSpeculatableImplTrait, SameOperandsAndResultType

Interfaces: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface), OneToOneIntrinsicOp

Effects: MemoryEffects::Effect{}

Operands: 

OperandDescription
avector of 32-bit float values of length 8

Results: 

ResultDescription
bvector of 32-bit float values of length 8

x86vector.avx512.cvt.packed.f32_to_bf16 (x86vector::CvtPackedF32ToBF16Op) 

Convert packed F32 to packed BF16 Data.

Syntax:

operation ::= `x86vector.avx512.cvt.packed.f32_to_bf16` $a attr-dict `:` type($a) `->` type($dst)

The convert_f32_to_bf16 op is an AVX512-BF16 specific op that can lower to the proper LLVMAVX512BF16 operation llvm.cvtneps2bf16 depending on the width of MLIR vectors it is applied to.

From the Intel Intrinsics Guide: 

Convert packed single-precision (32-bit) floating-point elements in a to packed BF16 (16-bit) floating-point elements, and store the results in dst.

Example:

%dst = x86vector.avx512.cvt.packed.f32_to_bf16 %a : vector<8xf32> -> vector<8xbf16>

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, NoMemoryEffect (MemoryEffectOpInterface), OneToOneIntrinsicOp

Effects: MemoryEffects::Effect{}

Operands: 

OperandDescription
avector of 32-bit float values of length 8/16

Results: 

ResultDescription
dstvector of bfloat16 type values of length 8/16

x86vector.avx512.dot (x86vector::DotBF16Op) 

Dot BF16 op

Syntax:

operation ::= `x86vector.avx512.dot` $src `,` $a `,` $b attr-dict `:` type($a) `->` type($src)

The dot op is an AVX512-BF16 specific op that can lower to the proper LLVMAVX512BF16 operation llvm.dpbf16ps depending on the width of MLIR vectors it is applied to.

From the Intel Intrinsics Guide: 

Compute dot-product of BF16 (16-bit) floating-point pairs in a and b, accumulating the intermediate single-precision (32-bit) floating-point elements with elements in src, and store the results in dst.

Example:

%dst = x86vector.avx512.dot %src, %a, %b : vector<32xbf16> -> vector<16xf32>

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface), OneToOneIntrinsicOp

Effects: MemoryEffects::Effect{}

Operands: 

OperandDescription
srcvector of 32-bit float values of length 4/8/16
avector of bfloat16 type values of length 8/16/32
bvector of bfloat16 type values of length 8/16/32

Results: 

ResultDescription
dstvector of 32-bit float values of length 4/8/16

x86vector.avx512.mask.compress (x86vector::MaskCompressOp) 

Masked compress op

Syntax:

operation ::= `x86vector.avx512.mask.compress` $k `,` $a (`,` $src^)? attr-dict `:` type($dst) (`,` type($src)^)?

The mask.compress op is an AVX512 specific op that can lower to the llvm.mask.compress instruction. Instead of src, a constant vector vector attribute constant_src may be specified. If neither src nor constant_src is specified, the remaining elements in the result vector are set to zero.

From the Intel Intrinsics Guide: 

Contiguously store the active integer/floating-point elements in a (those with their respective bit set in writemask k) to dst, and pass through the remaining elements from src.

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface), OneToOneIntrinsicOp

Effects: MemoryEffects::Effect{}

Attributes: 

AttributeMLIR TypeDescription
constant_src::mlir::ElementsAttrconstant vector/tensor attribute

Operands: 

OperandDescription
kvector of 1-bit signless integer values of length 16/8
avector of 32-bit float or 32-bit signless integer or 64-bit float or 64-bit signless integer values of length 16/8
srcvector of 32-bit float or 32-bit signless integer or 64-bit float or 64-bit signless integer values of length 16/8

Results: 

ResultDescription
dstvector of 32-bit float or 32-bit signless integer or 64-bit float or 64-bit signless integer values of length 16/8

x86vector.avx512.mask.rndscale (x86vector::MaskRndScaleOp) 

Masked roundscale op

Syntax:

operation ::= `x86vector.avx512.mask.rndscale` $src `,` $k `,` $a `,` $imm `,` $rounding attr-dict `:` type($dst)

The mask.rndscale op is an AVX512 specific op that can lower to the proper LLVMAVX512 operation: llvm.mask.rndscale.ps.512 or llvm.mask.rndscale.pd.512 instruction depending on the type of vectors it is applied to.

From the Intel Intrinsics Guide: 

Round packed floating-point elements in a to the number of fraction bits specified by imm, and store the results in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface), OneToOneIntrinsicOp

Effects: MemoryEffects::Effect{}

Operands: 

OperandDescription
srcvector of 32-bit float or 64-bit float values of length 16/8
k32-bit signless integer
avector of 32-bit float or 64-bit float values of length 16/8
imm16-bit signless integer or 8-bit signless integer
rounding32-bit signless integer

Results: 

ResultDescription
dstvector of 32-bit float or 64-bit float values of length 16/8

x86vector.avx512.mask.scalef (x86vector::MaskScaleFOp) 

ScaleF op

Syntax:

operation ::= `x86vector.avx512.mask.scalef` $src `,` $a `,` $b `,` $k `,` $rounding attr-dict `:` type($dst)

The mask.scalef op is an AVX512 specific op that can lower to the proper LLVMAVX512 operation: llvm.mask.scalef.ps.512 or llvm.mask.scalef.pd.512 depending on the type of MLIR vectors it is applied to.

From the Intel Intrinsics Guide: 

Scale the packed floating-point elements in a using values from b, and store the results in dst using writemask k (elements are copied from src when the corresponding mask bit is not set).

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface), OneToOneIntrinsicOp

Effects: MemoryEffects::Effect{}

Operands: 

OperandDescription
srcvector of 32-bit float or 64-bit float values of length 16/8
avector of 32-bit float or 64-bit float values of length 16/8
bvector of 32-bit float or 64-bit float values of length 16/8
k16-bit signless integer or 8-bit signless integer
rounding32-bit signless integer

Results: 

ResultDescription
dstvector of 32-bit float or 64-bit float values of length 16/8

x86vector.avx512.vp2intersect (x86vector::Vp2IntersectOp) 

Vp2Intersect op

Syntax:

operation ::= `x86vector.avx512.vp2intersect` $a `,` $b attr-dict `:` type($a)

The vp2intersect op is an AVX512 specific op that can lower to the proper LLVMAVX512 operation: llvm.vp2intersect.d.512 or llvm.vp2intersect.q.512 depending on the type of MLIR vectors it is applied to.

From the Intel Intrinsics Guide: 

Compute intersection of packed integer vectors a and b, and store indication of match in the corresponding bit of two mask registers specified by k1 and k2. A match in corresponding elements of a and b is indicated by a set bit in the corresponding bit of the mask registers.

Traits: AlwaysSpeculatableImplTrait

Interfaces: ConditionallySpeculatable, InferTypeOpInterface, NoMemoryEffect (MemoryEffectOpInterface), OneToOneIntrinsicOp

Effects: MemoryEffects::Effect{}

Operands: 

OperandDescription
avector of 32-bit signless integer or 64-bit signless integer values of length 16/8
bvector of 32-bit signless integer or 64-bit signless integer values of length 16/8

Results: 

ResultDescription
k1vector of 1-bit signless integer values of length 16/8
k2vector of 1-bit signless integer values of length 16/8