mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-27 03:48:33 +00:00
[mlir] Remove the type
keyword from type alias definitions
This was carry over from LLVM IR where the alias definition can be ambiguous, but MLIR type aliases have no such problems. Having the `type` keyword is superfluous and doesn't add anything. This commit drops it, which also nicely aligns with the syntax for attribute aliases (which doesn't have a keyword). Differential Revision: https://reviews.llvm.org/D125501
This commit is contained in:
parent
c8457eb532
commit
a6cef03f66
@ -2576,7 +2576,7 @@ def fir_GenTypeDescOp : fir_OneResultOp<"gentypedesc", [NoSideEffect]> {
|
||||
is `!fir.tdesc<T>`.
|
||||
|
||||
```mlir
|
||||
!T = type !fir.type<T{...}>
|
||||
!T = !fir.type<T{...}>
|
||||
%t = fir.gentypedesc !T // returns value of !fir.tdesc<!T>
|
||||
```
|
||||
}];
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
// RUN: fir-opt --split-input-file --promote-to-affine --affine-loop-invariant-code-motion --cse %s | FileCheck %s
|
||||
|
||||
!arr_d1 = type !fir.ref<!fir.array<?xf32>>
|
||||
!arr_d1 = !fir.ref<!fir.array<?xf32>>
|
||||
#arr_len = affine_map<()[j1,k1] -> (k1 - j1 + 1)>
|
||||
|
||||
func.func @loop_with_load_and_store(%a1: !arr_d1, %a2: !arr_d1, %a3: !arr_d1) {
|
||||
@ -75,7 +75,7 @@ func.func @loop_with_load_and_store(%a1: !arr_d1, %a2: !arr_d1, %a3: !arr_d1) {
|
||||
|
||||
// -----
|
||||
|
||||
!arr_d1 = type !fir.ref<!fir.array<?xf32>>
|
||||
!arr_d1 = !fir.ref<!fir.array<?xf32>>
|
||||
#arr_len = affine_map<()[j1,k1] -> (k1 - j1 + 1)>
|
||||
|
||||
func.func @loop_with_if(%a: !arr_d1, %v: f32) {
|
||||
|
@ -6,7 +6,7 @@
|
||||
// RUN: fir-opt --array-value-copy %s | FileCheck %s
|
||||
|
||||
|
||||
!t_with_alloc_comp = type !fir.type<t{i:!fir.box<!fir.heap<!fir.array<?xi32>>>}>
|
||||
!t_with_alloc_comp = !fir.type<t{i:!fir.box<!fir.heap<!fir.array<?xi32>>>}>
|
||||
func.func private @custom_assign(!fir.ref<!t_with_alloc_comp>, !fir.ref<!t_with_alloc_comp>)
|
||||
func.func @test_overlap_with_alloc_components(%arg0: !fir.ref<!fir.array<10x!t_with_alloc_comp>>) {
|
||||
%0 = fir.alloca !fir.box<!t_with_alloc_comp>
|
||||
|
@ -4,7 +4,7 @@
|
||||
// Missing derived type descriptor pointers are replaced by null pointers.
|
||||
// RUN: tco --ignore-missing-type-desc -o - %s | FileCheck %s
|
||||
|
||||
!some_freestyle_type = type !fir.type<some_not_mangled_type{j:i32}>
|
||||
!some_freestyle_type = !fir.type<some_not_mangled_type{j:i32}>
|
||||
|
||||
func.func private @bar(!fir.box<!some_freestyle_type>)
|
||||
|
||||
|
@ -5,10 +5,10 @@
|
||||
// RUN: fir-opt --fir-to-llvm-ir="target=i386-unknown-linux-gnu" %s | FileCheck %s
|
||||
// RUN: fir-opt --fir-to-llvm-ir="target=powerpc64le-unknown-linux-gn" %s | FileCheck %s
|
||||
|
||||
!t1 = type !fir.type<t1 {a1:!fir.ptr<!fir.type<t1>>}>
|
||||
!t2 = type !fir.type<t2 {b1:f32,b2:!fir.ptr<!fir.type<t2>>,b3:i32,b4:!fir.ptr<!fir.type<t2>>}>
|
||||
!t3 = type !fir.type<t3 {c1:!fir.ptr<!fir.type<t4>>}>
|
||||
!t4 = type !fir.type<t4 {d1:!fir.ptr<!fir.type<t3>>}>
|
||||
!t1 = !fir.type<t1 {a1:!fir.ptr<!fir.type<t1>>}>
|
||||
!t2 = !fir.type<t2 {b1:f32,b2:!fir.ptr<!fir.type<t2>>,b3:i32,b4:!fir.ptr<!fir.type<t2>>}>
|
||||
!t3 = !fir.type<t3 {c1:!fir.ptr<!fir.type<t4>>}>
|
||||
!t4 = !fir.type<t4 {d1:!fir.ptr<!fir.type<t3>>}>
|
||||
|
||||
// CHECK-LABEL: llvm.func @recursiveTypes
|
||||
// CHECK-SAME: %{{.*}}: !llvm.struct<"[[T1:.*]]", (ptr<struct<"[[T1]]">>)>
|
||||
|
@ -657,7 +657,7 @@ function-type ::= (type | type-list-parens) `->` (type | type-list-parens)
|
||||
### Type Aliases
|
||||
|
||||
```
|
||||
type-alias-def ::= '!' alias-name '=' 'type' type
|
||||
type-alias-def ::= '!' alias-name '=' type
|
||||
type-alias ::= '!' alias-name
|
||||
```
|
||||
|
||||
@ -669,7 +669,7 @@ names are reserved for [dialect types](#dialect-types).
|
||||
Example:
|
||||
|
||||
```mlir
|
||||
!avx_m128 = type vector<4 x f32>
|
||||
!avx_m128 = vector<4 x f32>
|
||||
|
||||
// Using the original type.
|
||||
"foo"(%x) : vector<4 x f32> -> ()
|
||||
|
@ -367,8 +367,7 @@ func.func @foo(%arg0: memref<?xf32>) -> () {
|
||||
|
||||
// Gets converted to the following
|
||||
// (using type alias for brevity):
|
||||
!llvm.memref_1d = type !llvm.struct<(ptr<f32>, ptr<f32>, i64,
|
||||
array<1xi64>, array<1xi64>)>
|
||||
!llvm.memref_1d = !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<1xi64>, array<1xi64>)>
|
||||
|
||||
llvm.func @foo(%arg0: !llvm.ptr<f32>, // Allocated pointer.
|
||||
%arg1: !llvm.ptr<f32>, // Aligned pointer.
|
||||
@ -398,8 +397,7 @@ func.func @bar() {
|
||||
|
||||
// Gets converted to the following
|
||||
// (using type alias for brevity):
|
||||
!llvm.memref_1d = type !llvm.struct<(ptr<f32>, ptr<f32>, i64,
|
||||
array<1xi64>, array<1xi64>)>
|
||||
!llvm.memref_1d = !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<1xi64>, array<1xi64>)>
|
||||
|
||||
llvm.func @bar() {
|
||||
%0 = "get"() : () -> !llvm.memref_1d
|
||||
@ -619,8 +617,7 @@ func.func @qux(%arg0: memref<?x?xf32>)
|
||||
|
||||
// Gets converted into the following
|
||||
// (using type alias for brevity):
|
||||
!llvm.memref_2d = type !llvm.struct<(ptr<f32>, ptr<f32>, i64,
|
||||
array<2xi64>, array<2xi64>)>
|
||||
!llvm.memref_2d = !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<2xi64>, array<2xi64>)>
|
||||
|
||||
// Function with unpacked arguments.
|
||||
llvm.func @qux(%arg0: !llvm.ptr<f32>, %arg1: !llvm.ptr<f32>,
|
||||
@ -665,10 +662,8 @@ func.func @foo(%arg0: memref<?x?xf32>) {
|
||||
|
||||
// Gets converted into the following
|
||||
// (using type alias for brevity):
|
||||
!llvm.memref_2d = type !llvm.struct<(ptr<f32>, ptr<f32>, i64,
|
||||
array<2xi64>, array<2xi64>)>
|
||||
!llvm.memref_2d_ptr = type !llvm.ptr<struct<(ptr<f32>, ptr<f32>, i64,
|
||||
array<2xi64>, array<2xi64>)>>
|
||||
!llvm.memref_2d = !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<2xi64>, array<2xi64>)>
|
||||
!llvm.memref_2d_ptr = !llvm.ptr<struct<(ptr<f32>, ptr<f32>, i64, array<2xi64>, array<2xi64>)>>
|
||||
|
||||
// Function with unpacked arguments.
|
||||
llvm.func @foo(%arg0: !llvm.ptr<f32>, %arg1: !llvm.ptr<f32>,
|
||||
@ -704,10 +699,8 @@ func.func @foo(%arg0: memref<?x?xf32>) -> memref<?x?xf32> {
|
||||
|
||||
// Gets converted into the following
|
||||
// (using type alias for brevity):
|
||||
!llvm.memref_2d = type !llvm.struct<(ptr<f32>, ptr<f32>, i64,
|
||||
array<2xi64>, array<2xi64>)>
|
||||
!llvm.memref_2d_ptr = type !llvm.ptr<struct<(ptr<f32>, ptr<f32>, i64,
|
||||
array<2xi64>, array<2xi64>)>>
|
||||
!llvm.memref_2d = !llvm.struct<(ptr<f32>, ptr<f32>, i64, array<2xi64>, array<2xi64>)>
|
||||
!llvm.memref_2d_ptr = !llvm.ptr<struct<(ptr<f32>, ptr<f32>, i64, array<2xi64>, array<2xi64>)>>
|
||||
|
||||
// Function with unpacked arguments.
|
||||
llvm.func @foo(%arg0: !llvm.ptr<f32>, %arg1: !llvm.ptr<f32>, %arg2: i64,
|
||||
|
@ -822,7 +822,7 @@ void AliasState::printAliases(raw_ostream &os, NewLineCounter &newLine,
|
||||
}
|
||||
for (const auto &it : llvm::make_filter_range(typeToAlias, filterFn)) {
|
||||
it.second.print(os << '!');
|
||||
os << " = type " << it.first << newLine;
|
||||
os << " = " << it.first << newLine;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2105,7 +2105,7 @@ ParseResult TopLevelOperationParser::parseAttributeAliasDef() {
|
||||
|
||||
/// Parse a type alias declaration.
|
||||
///
|
||||
/// type-alias-def ::= '!' alias-name `=` 'type' type
|
||||
/// type-alias-def ::= '!' alias-name `=` type
|
||||
///
|
||||
ParseResult TopLevelOperationParser::parseTypeAliasDef() {
|
||||
assert(getToken().is(Token::exclamation_identifier));
|
||||
@ -2119,12 +2119,10 @@ ParseResult TopLevelOperationParser::parseTypeAliasDef() {
|
||||
if (aliasName.contains('.'))
|
||||
return emitError("type names with a '.' are reserved for "
|
||||
"dialect-defined names");
|
||||
|
||||
consumeToken(Token::exclamation_identifier);
|
||||
|
||||
// Parse the '=' and 'type'.
|
||||
if (parseToken(Token::equal, "expected '=' in type alias definition") ||
|
||||
parseToken(Token::kw_type, "expected 'type' in type alias definition"))
|
||||
// Parse the '='.
|
||||
if (parseToken(Token::equal, "expected '=' in type alias definition"))
|
||||
return failure();
|
||||
|
||||
// Parse the type.
|
||||
|
@ -101,7 +101,7 @@ func.func @check_scalar_func_call(%in : f32) {
|
||||
|
||||
// -----
|
||||
|
||||
!base_type = type memref<64xi32, 201>
|
||||
!base_type = memref<64xi32, 201>
|
||||
|
||||
// CHECK-LABEL: func @loop_carried
|
||||
// BAREPTR-LABEL: func @loop_carried
|
||||
|
@ -197,10 +197,10 @@ func.func @ptr_elem_interface(%arg0: !llvm.ptr<!test.smpla>) {
|
||||
// DialectAsmPrinter to have a mechanism for querying the presence and
|
||||
// usability of an alias outside of its `printType` method.
|
||||
|
||||
!baz = type i64
|
||||
!qux = type !llvm.struct<(!baz)>
|
||||
!baz = i64
|
||||
!qux = !llvm.struct<(!baz)>
|
||||
|
||||
!rec = type !llvm.struct<"a", (ptr<struct<"a">>)>
|
||||
!rec = !llvm.struct<"a", (ptr<struct<"a">>)>
|
||||
|
||||
// CHECK: aliases
|
||||
llvm.func @aliases() {
|
||||
|
@ -37,13 +37,13 @@ func.func @dot(%arg0: memref<?xf32, offset: ?, strides: [1]>,
|
||||
library_call = "external_outerproduct_matmul"
|
||||
}
|
||||
|
||||
!vector_type_A = type vector<4xf32>
|
||||
!vector_type_B = type vector<4xf32>
|
||||
!vector_type_C = type vector<4x4xf32>
|
||||
!vector_type_A = vector<4xf32>
|
||||
!vector_type_B = vector<4xf32>
|
||||
!vector_type_C = vector<4x4xf32>
|
||||
|
||||
!matrix_type_A = type memref<?x?x!vector_type_A>
|
||||
!matrix_type_B = type memref<?x?x!vector_type_B>
|
||||
!matrix_type_C = type memref<?x?x!vector_type_C>
|
||||
!matrix_type_A = memref<?x?x!vector_type_A>
|
||||
!matrix_type_B = memref<?x?x!vector_type_B>
|
||||
!matrix_type_C = memref<?x?x!vector_type_C>
|
||||
|
||||
func.func @matmul_vec_impl(%A: !matrix_type_A, %B: !matrix_type_B, %C: !matrix_type_C) {
|
||||
linalg.generic #matmul_trait
|
||||
|
@ -3,59 +3,59 @@
|
||||
// -----
|
||||
// Unrecognized token: missing storage type maximum
|
||||
// expected-error@+1 {{expected ':'}}
|
||||
!qalias = type !quant.any<i8<16>:f32>
|
||||
!qalias = !quant.any<i8<16>:f32>
|
||||
|
||||
// -----
|
||||
// Unrecognized token: missing closing angle bracket
|
||||
// expected-error@+1 {{expected '>'}}
|
||||
!qalias = type !quant<"any<i8<-4:3:f32>">
|
||||
!qalias = !quant<"any<i8<-4:3:f32>">
|
||||
|
||||
// -----
|
||||
// Unrecognized token: missing type colon
|
||||
// expected-error@+1 {{expected '>'}}
|
||||
!qalias = type !quant.any<i8<-4:3>f32>
|
||||
!qalias = !quant.any<i8<-4:3>f32>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: illegal prefix
|
||||
// expected-error@+1 {{illegal storage type prefix}}
|
||||
!qalias = type !quant.any<int8<-4:3>:f32>
|
||||
!qalias = !quant.any<int8<-4:3>:f32>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: no width
|
||||
// expected-error@+1 {{illegal storage type prefix}}
|
||||
!qalias = type !quant.any<i<-4:3>:f32>
|
||||
!qalias = !quant.any<i<-4:3>:f32>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: storage size > 32
|
||||
// expected-error@+1 {{illegal storage type size: 33}}
|
||||
!qalias = type !quant.any<i33:f32>
|
||||
!qalias = !quant.any<i33:f32>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: storage size < 0
|
||||
// expected-error@+1 {{illegal storage type size: 1024}}
|
||||
!qalias = type !quant.any<i1024<-4:3>:f32>
|
||||
!qalias = !quant.any<i1024<-4:3>:f32>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: storage size
|
||||
// expected-error@+1 {{invalid integer width}}
|
||||
!qalias = type !quant.any<i0123123123123123<-4:3>:f32>
|
||||
!qalias = !quant.any<i0123123123123123<-4:3>:f32>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: max - min < 0
|
||||
// expected-error@+1 {{illegal storage min and storage max: (2:1)}}
|
||||
!qalias = type !quant.any<i8<2:1>:f32>
|
||||
!qalias = !quant.any<i8<2:1>:f32>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: max - min == 0
|
||||
// expected-error@+1 {{illegal storage min and storage max: (1:1)}}
|
||||
!qalias = type !quant.any<i8<1:1>:f32>
|
||||
!qalias = !quant.any<i8<1:1>:f32>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: max > defaultMax
|
||||
// expected-error@+1 {{illegal storage type maximum: 9}}
|
||||
!qalias = type !quant.any<i4<-1:9>:f32>
|
||||
!qalias = !quant.any<i4<-1:9>:f32>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: min < defaultMin
|
||||
// expected-error@+1 {{illegal storage type minimum: -9}}
|
||||
!qalias = type !quant.any<i4<-9:1>:f32>
|
||||
!qalias = !quant.any<i4<-9:1>:f32>
|
||||
|
@ -3,7 +3,7 @@
|
||||
// -----
|
||||
// CHECK-LABEL: parseFullySpecified
|
||||
// CHECK: !quant.any<i8<-8:7>:f32>
|
||||
!qalias = type !quant.any<i8<-8:7>:f32>
|
||||
!qalias = !quant.any<i8<-8:7>:f32>
|
||||
func.func @parseFullySpecified() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -12,7 +12,7 @@ func.func @parseFullySpecified() -> !qalias {
|
||||
// -----
|
||||
// CHECK-LABEL: parseNoExpressedType
|
||||
// CHECK: !quant.any<i8<-8:7>>
|
||||
!qalias = type !quant.any<i8<-8:7>>
|
||||
!qalias = !quant.any<i8<-8:7>>
|
||||
func.func @parseNoExpressedType() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -21,7 +21,7 @@ func.func @parseNoExpressedType() -> !qalias {
|
||||
// -----
|
||||
// CHECK-LABEL: parseOnlyStorageType
|
||||
// CHECK: !quant.any<i8>
|
||||
!qalias = type !quant.any<i8>
|
||||
!qalias = !quant.any<i8>
|
||||
func.func @parseOnlyStorageType() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
|
@ -4,25 +4,25 @@
|
||||
// Unrecognized token: missing calibrated type maximum
|
||||
// expected-error@+2 {{calibrated values must be present}}
|
||||
// expected-error@+1 {{expected ':'}}
|
||||
!qalias = type !quant.calibrated<f32<-0.998>>
|
||||
!qalias = !quant.calibrated<f32<-0.998>>
|
||||
|
||||
// -----
|
||||
// Unrecognized token: missing closing angle bracket
|
||||
// expected-error@+1 {{expected '>'}}
|
||||
!qalias = type !quant<"calibrated<f32<-0.998:1.232>">
|
||||
!qalias = !quant<"calibrated<f32<-0.998:1.232>">
|
||||
|
||||
// -----
|
||||
// Unrecognized expressed type: integer type
|
||||
// expected-error@+2 {{invalid kind of type specified}}
|
||||
// expected-error@+1 {{expecting float expressed type}}
|
||||
!qalias = type !quant.calibrated<i8<-4:3>>
|
||||
!qalias = !quant.calibrated<i8<-4:3>>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: max - min < 0
|
||||
// expected-error@+1 {{illegal min and max: (1.000000e+00:-1.000000e+00)}}
|
||||
!qalias = type !quant.calibrated<f32<1.0:-1.0>>
|
||||
!qalias = !quant.calibrated<f32<1.0:-1.0>>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: max - min == 0
|
||||
// expected-error@+1 {{illegal min and max: (1.000000e+00:1.000000e+00)}}
|
||||
!qalias = type !quant.calibrated<f32<1.0:1.0>>
|
||||
!qalias = !quant.calibrated<f32<1.0:1.0>>
|
||||
|
@ -3,7 +3,7 @@
|
||||
// -----
|
||||
// CHECK-LABEL: parseCalibrated
|
||||
// CHECK: !quant.calibrated<f32<-0.998:1.232100e+00>
|
||||
!qalias = type !quant.calibrated<f32<-0.998:1.2321>>
|
||||
!qalias = !quant.calibrated<f32<-0.998:1.2321>>
|
||||
func.func @parseCalibrated() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
|
@ -3,120 +3,120 @@
|
||||
// -----
|
||||
// Invalid type.
|
||||
// expected-error@+1 {{unknown quantized type foobar}}
|
||||
!qalias = type !quant.foobar
|
||||
!qalias = !quant.foobar
|
||||
|
||||
// -----
|
||||
// Unrecognized token: illegal token
|
||||
// expected-error@+1 {{unknown quantized type __}}
|
||||
!qalias = type !quant.__
|
||||
!qalias = !quant.__
|
||||
|
||||
// -----
|
||||
// Unrecognized token: trailing
|
||||
// expected-error@+1 {{expected '>'}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f32, 0.99872:127 23>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f32, 0.99872:127 23>
|
||||
|
||||
// -----
|
||||
// Unrecognized token: missing storage type maximum
|
||||
// expected-error@+1 {{expected ':'}}
|
||||
!qalias = type !quant.uniform<i8<16>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i8<16>:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Unrecognized token: missing closing angle bracket
|
||||
// expected-error@+1 {{expected '>'}}
|
||||
!qalias = type !quant<"uniform<i8<-4:3:f32, 0.99872:127>">
|
||||
!qalias = !quant<"uniform<i8<-4:3:f32, 0.99872:127>">
|
||||
|
||||
// -----
|
||||
// Unrecognized token: missing type colon
|
||||
// expected-error@+1 {{expected ':'}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i8<-4:3>f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Unrecognized token: missing comma
|
||||
// expected-error@+1 {{expected ','}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f32 0.99872:127>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f32 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: illegal prefix
|
||||
// expected-error@+1 {{illegal storage type prefix}}
|
||||
!qalias = type !quant.uniform<int8<-4:3>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<int8<-4:3>:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: no width
|
||||
// expected-error@+1 {{illegal storage type prefix}}
|
||||
!qalias = type !quant.uniform<i<-4:3>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i<-4:3>:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: storage size > 32
|
||||
// expected-error@+1 {{illegal storage type size: 33}}
|
||||
!qalias = type !quant.uniform<i33:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i33:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: storage size < 0
|
||||
// expected-error@+1 {{illegal storage type prefix}}
|
||||
!qalias = type !quant.uniform<i-1<-4:3>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i-1<-4:3>:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Unrecognized storage type: storage size
|
||||
// expected-error@+1 {{invalid integer width}}
|
||||
!qalias = type !quant.uniform<i123123123120<-4:3>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i123123123120<-4:3>:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: max - min < 0
|
||||
// expected-error@+1 {{illegal storage min and storage max: (2:1)}}
|
||||
!qalias = type !quant.uniform<i8<2:1>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i8<2:1>:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: max - min == 0
|
||||
// expected-error@+1 {{illegal storage min and storage max: (1:1)}}
|
||||
!qalias = type !quant.uniform<i8<1:1>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i8<1:1>:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: max > defaultMax
|
||||
// expected-error@+1 {{illegal storage type maximum: 9}}
|
||||
!qalias = type !quant.uniform<i4<-1:9>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i4<-1:9>:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Illegal storage min/max: min < defaultMin
|
||||
// expected-error@+1 {{illegal storage type minimum: -9}}
|
||||
!qalias = type !quant.uniform<i4<-9:1>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i4<-9:1>:f32, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Illegal uniform params: invalid scale
|
||||
// expected-error@+1 {{expected floating point literal}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f32, abc:127>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f32, abc:127>
|
||||
|
||||
// -----
|
||||
// Illegal uniform params: invalid zero point separator
|
||||
// expected-error@+1 {{expected '>'}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f32, 0.1abc>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f32, 0.1abc>
|
||||
|
||||
// -----
|
||||
// Illegal uniform params: missing zero point
|
||||
// expected-error@+1 {{expected integer value}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f32, 0.1:>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f32, 0.1:>
|
||||
|
||||
// -----
|
||||
// Illegal uniform params: invalid zero point
|
||||
// expected-error@+1 {{expected integer value}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f32, 0.1:abc>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f32, 0.1:abc>
|
||||
|
||||
// -----
|
||||
// Illegal expressed type: f33
|
||||
// expected-error@+1 {{expected non-function type}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f33, 0.99872:127>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f33, 0.99872:127>
|
||||
|
||||
// -----
|
||||
// Illegal scale: negative
|
||||
// expected-error@+1 {{illegal scale: -1.000000}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f32, -1.0:127>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f32, -1.0:127>
|
||||
|
||||
// -----
|
||||
// Illegal uniform params: missing quantized dimension
|
||||
// expected-error@+1 {{expected integer value}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f32:, {2.000000e+02:-19.987200e-01:1}>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f32:, {2.000000e+02:-19.987200e-01:1}>
|
||||
|
||||
// -----
|
||||
// Illegal uniform params: unspecified quantized dimension, when multiple scales
|
||||
// provided.
|
||||
// expected-error@+1 {{expected floating point literal}}
|
||||
!qalias = type !quant.uniform<i8<-4:3>:f32, {2.000000e+02,-19.987200e-01:1}>
|
||||
!qalias = !quant.uniform<i8<-4:3>:f32, {2.000000e+02,-19.987200e-01:1}>
|
||||
|
@ -4,7 +4,7 @@
|
||||
// All per-layer params specified:
|
||||
// [signed] storageType, storageTypeMin, storageTypeMax, expressedType, scale, zeroPoint
|
||||
// CHECK: !quant.uniform<i8<-8:7>:f32, 9.987200e-01:127>
|
||||
!qalias = type !quant.uniform<i8<-8:7>:f32, 0.99872:127>
|
||||
!qalias = !quant.uniform<i8<-8:7>:f32, 0.99872:127>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -13,7 +13,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Trailing whitespace.
|
||||
// CHECK: !quant.uniform<i8<-8:7>:f32, 9.987200e-01:127>
|
||||
!qalias = type !quant.uniform<i8<-8:7>:f32, 0.99872:127 >
|
||||
!qalias = !quant.uniform<i8<-8:7>:f32, 0.99872:127 >
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -23,7 +23,7 @@ func.func @parse() -> !qalias {
|
||||
// Required per-layer params specified:
|
||||
// [unsigned] storageType, expressedType, scale
|
||||
// CHECK: !quant.uniform<u8:f32, 9.987200e-01>
|
||||
!qalias = type !quant.uniform<u8:f32, 0.99872>
|
||||
!qalias = !quant.uniform<u8:f32, 0.99872>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -32,7 +32,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Exponential scale (-)
|
||||
// CHECK: !quant.uniform<u8:f32, 2.000000e-02>
|
||||
!qalias = type !quant.uniform<u8:f32, 2.0e-2>
|
||||
!qalias = !quant.uniform<u8:f32, 2.0e-2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -41,7 +41,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Exponential scale (+)
|
||||
// CHECK: !quant.uniform<u8:f32, 2.000000e+02>
|
||||
!qalias = type !quant.uniform<u8:f32, 2.0e+2>
|
||||
!qalias = !quant.uniform<u8:f32, 2.0e+2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -50,7 +50,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Storage type: i16
|
||||
// CHECK: !quant.uniform<i16:f32, 2.000000e+02>
|
||||
!qalias = type !quant.uniform<i16:f32, 2.0e+2>
|
||||
!qalias = !quant.uniform<i16:f32, 2.0e+2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -59,7 +59,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Storage type: u16
|
||||
// CHECK: !quant.uniform<u16:f32, 2.000000e+02>
|
||||
!qalias = type !quant.uniform<u16:f32, 2.0e+2>
|
||||
!qalias = !quant.uniform<u16:f32, 2.0e+2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -68,7 +68,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Storage type: i32
|
||||
// CHECK: !quant.uniform<i32:f32, 2.000000e+02>
|
||||
!qalias = type !quant.uniform<i32:f32, 2.0e+2>
|
||||
!qalias = !quant.uniform<i32:f32, 2.0e+2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -77,7 +77,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Storage type: u32
|
||||
// CHECK: !quant.uniform<u32:f32, 2.000000e+02>
|
||||
!qalias = type !quant.uniform<u32:f32, 2.0e+2>
|
||||
!qalias = !quant.uniform<u32:f32, 2.0e+2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -86,7 +86,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Expressed type: f32
|
||||
// CHECK: !quant.uniform<u8:f32, 2.000000e+02>
|
||||
!qalias = type !quant.uniform<u8:f32, 2.0e+2>
|
||||
!qalias = !quant.uniform<u8:f32, 2.0e+2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -95,7 +95,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Expressed type: f32
|
||||
// CHECK: !quant.uniform<u8:f32, 0x41646ABBA0000000:128>
|
||||
!qalias = type !quant.uniform<u8:f32, 0x41646ABBA0000000:128>
|
||||
!qalias = !quant.uniform<u8:f32, 0x41646ABBA0000000:128>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -104,7 +104,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Expressed type: f16
|
||||
// CHECK: !quant.uniform<u8:f16, 2.000000e+02>
|
||||
!qalias = type !quant.uniform<u8:f16, 2.0e+2>
|
||||
!qalias = !quant.uniform<u8:f16, 2.0e+2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -113,7 +113,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Expressed type: f64
|
||||
// CHECK: !quant.uniform<u8:f64, 2.000000e+02>
|
||||
!qalias = type !quant.uniform<u8:f64, 2.0e+2>
|
||||
!qalias = !quant.uniform<u8:f64, 2.0e+2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -122,7 +122,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Expressed type: bf16
|
||||
// CHECK: !quant.uniform<u8:bf16, 2.000000e+02>
|
||||
!qalias = type !quant.uniform<u8:bf16, 2.0e+2>
|
||||
!qalias = !quant.uniform<u8:bf16, 2.0e+2>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -131,7 +131,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Per-axis scales and zero points (affine)
|
||||
// CHECK: !quant.uniform<u8:f32:1, {2.000000e+02:-120,9.987200e-01:127}>
|
||||
!qalias = type !quant.uniform<u8:f32:1, {2.0e+2:-120,0.99872:127}>
|
||||
!qalias = !quant.uniform<u8:f32:1, {2.0e+2:-120,0.99872:127}>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -140,7 +140,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Per-axis scales and no zero points (fixedpoint)
|
||||
// CHECK: !quant.uniform<i8:f32:1, {2.000000e+02,9.987200e-01}>
|
||||
!qalias = type !quant.uniform<i8:f32:1, {2.0e+2,0.99872}>
|
||||
!qalias = !quant.uniform<i8:f32:1, {2.0e+2,0.99872}>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
@ -149,7 +149,7 @@ func.func @parse() -> !qalias {
|
||||
// -----
|
||||
// Per-axis scales and zero points (mixed affine and fixedpoint)
|
||||
// CHECK: !quant.uniform<i8:f32:1, {2.000000e+02,9.987200e-01:120}>
|
||||
!qalias = type !quant.uniform<i8:f32:1, {2.0e+2,0.99872:120}>
|
||||
!qalias = !quant.uniform<i8:f32:1, {2.0e+2,0.99872:120}>
|
||||
func.func @parse() -> !qalias {
|
||||
%0 = "foo"() : () -> !qalias
|
||||
return %0 : !qalias
|
||||
|
@ -11,4 +11,4 @@
|
||||
// -----
|
||||
|
||||
// expected-error @below {{type created with unregistered dialect}}
|
||||
!type = type !unregistered_dialect.type
|
||||
!type = !unregistered_dialect.type
|
||||
|
@ -881,20 +881,16 @@ func.func @type_alias_unknown(!unknown_alias) -> () { // expected-error {{undefi
|
||||
|
||||
// -----
|
||||
|
||||
!missing_eq_alias type i32 // expected-error {{expected '=' in type alias definition}}
|
||||
!missing_eq_alias i32 // expected-error {{expected '=' in type alias definition}}
|
||||
|
||||
// -----
|
||||
|
||||
!missing_kw_type_alias = i32 // expected-error {{expected 'type' in type alias definition}}
|
||||
!missing_type_alias = // expected-error {{expected non-function type}}
|
||||
|
||||
// -----
|
||||
|
||||
!missing_type_alias = type // expected-error {{expected non-function type}}
|
||||
|
||||
// -----
|
||||
|
||||
!redef_alias = type i32
|
||||
!redef_alias = type i32 // expected-error {{redefinition of type alias id 'redef_alias'}}
|
||||
!redef_alias = i32
|
||||
!redef_alias = i32 // expected-error {{redefinition of type alias id 'redef_alias'}}
|
||||
|
||||
// -----
|
||||
|
||||
|
@ -832,7 +832,7 @@ func.func @unknown_dialect_type() -> !bar<""> {
|
||||
}
|
||||
|
||||
// CHECK-LABEL: func @type_alias() -> i32 {
|
||||
!i32_type_alias = type i32
|
||||
!i32_type_alias = i32
|
||||
func.func @type_alias() -> !i32_type_alias {
|
||||
|
||||
// Return a non-aliased i32 type.
|
||||
|
@ -15,16 +15,16 @@
|
||||
// CHECK-DAG: #test_alias_conflict0_1 = "alias_test:sanitize_conflict_b"
|
||||
"test.op"() {alias_test = ["alias_test:sanitize_conflict_a", "alias_test:sanitize_conflict_b"]} : () -> ()
|
||||
|
||||
// CHECK-DAG: !tuple = type tuple<i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32>
|
||||
// CHECK-DAG: !tuple = tuple<i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32>
|
||||
"test.op"() {alias_test = "alias_test:large_tuple"} : () -> (tuple<i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32>)
|
||||
|
||||
// CHECK-DAG: !test_tuple = type tuple<!test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla>
|
||||
// CHECK-DAG: !test_tuple = tuple<!test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla>
|
||||
"test.op"() {alias_test = "alias_test:large_tuple"} : () -> (tuple<!test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla, !test.smpla>)
|
||||
|
||||
// CHECK-DAG: #test_encoding = "alias_test:tensor_encoding"
|
||||
// CHECK-DAG: tensor<32xf32, #test_encoding>
|
||||
"test.op"() : () -> tensor<32xf32, "alias_test:tensor_encoding">
|
||||
|
||||
// CHECK-DAG: !test_ui8_ = type !test.int<unsigned, 8>
|
||||
// CHECK-DAG: !test_ui8_ = !test.int<unsigned, 8>
|
||||
// CHECK-DAG: tensor<32x!test_ui8_>
|
||||
"test.op"() : () -> tensor<32x!test.int<unsigned, 8>>
|
||||
|
@ -15,12 +15,12 @@
|
||||
// RUN: tee -a /dev/stderr | FileCheck %s
|
||||
|
||||
|
||||
!elem_type_a = type f32
|
||||
!elem_type_b = type f32
|
||||
!elem_type_c = type f32
|
||||
!row_major_A = type memref<${M}x${K}x!elem_type_a>
|
||||
!row_major_B = type memref<${K}x${N}x!elem_type_b>
|
||||
!row_major_C = type memref<${M}x${N}x!elem_type_c>
|
||||
!elem_type_a = f32
|
||||
!elem_type_b = f32
|
||||
!elem_type_c = f32
|
||||
!row_major_A = memref<${M}x${K}x!elem_type_a>
|
||||
!row_major_B = memref<${K}x${N}x!elem_type_b>
|
||||
!row_major_C = memref<${M}x${N}x!elem_type_c>
|
||||
|
||||
func.func @matmul(%a: !row_major_A, %b: !row_major_B, %c: !row_major_C)
|
||||
// TODO: activate manually for now.
|
||||
|
@ -5,7 +5,7 @@
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
!Filename = type !llvm.ptr<i8>
|
||||
!Filename = !llvm.ptr<i8>
|
||||
|
||||
#DenseMatrix = #sparse_tensor.encoding<{
|
||||
dimLevelType = [ "dense", "dense" ],
|
||||
|
@ -14,7 +14,7 @@
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
!Filename = type !llvm.ptr<i8>
|
||||
!Filename = !llvm.ptr<i8>
|
||||
|
||||
#SparseTensor = #sparse_tensor.encoding<{
|
||||
dimLevelType = [ "compressed", "compressed", "compressed", "compressed",
|
||||
|
@ -15,7 +15,7 @@
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
!Filename = type !llvm.ptr<i8>
|
||||
!Filename = !llvm.ptr<i8>
|
||||
|
||||
#SparseMatrix = #sparse_tensor.encoding<{
|
||||
dimLevelType = [ "dense", "compressed" ],
|
||||
|
@ -14,7 +14,7 @@
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
!Filename = type !llvm.ptr<i8>
|
||||
!Filename = !llvm.ptr<i8>
|
||||
|
||||
#SparseTensor = #sparse_tensor.encoding<{
|
||||
dimLevelType = [ "compressed", "compressed", "compressed" ]
|
||||
|
@ -14,7 +14,7 @@
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
!Filename = type !llvm.ptr<i8>
|
||||
!Filename = !llvm.ptr<i8>
|
||||
|
||||
#DCSR = #sparse_tensor.encoding<{
|
||||
dimLevelType = [ "compressed", "compressed" ],
|
||||
|
@ -16,7 +16,7 @@
|
||||
// RUN: FileCheck %s
|
||||
//
|
||||
|
||||
!Filename = type !llvm.ptr<i8>
|
||||
!Filename = !llvm.ptr<i8>
|
||||
|
||||
#SparseMatrix = #sparse_tensor.encoding<{
|
||||
dimLevelType = [ "compressed", "compressed" ],
|
||||
|
@ -14,7 +14,7 @@
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
!Filename = type !llvm.ptr<i8>
|
||||
!Filename = !llvm.ptr<i8>
|
||||
|
||||
#SparseMatrix = #sparse_tensor.encoding<{
|
||||
dimLevelType = [ "dense", "compressed" ]
|
||||
|
@ -14,7 +14,7 @@
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
!Filename = type !llvm.ptr<i8>
|
||||
!Filename = !llvm.ptr<i8>
|
||||
|
||||
#SparseMatrix = #sparse_tensor.encoding<{
|
||||
dimLevelType = [ "compressed", "compressed" ]
|
||||
|
@ -247,7 +247,7 @@ def _get_create_sparse_tensor_kernel(
|
||||
|
||||
# Return the MLIR text kernel.
|
||||
return f"""
|
||||
!Ptr = type !llvm.ptr<i8>
|
||||
!Ptr = !llvm.ptr<i8>
|
||||
#enc = #sparse_tensor.encoding<{{
|
||||
dimLevelType = [ {sparsity} ]
|
||||
}}>
|
||||
@ -323,7 +323,7 @@ def _get_output_sparse_tensor_kernel(
|
||||
|
||||
# Return the MLIR text kernel.
|
||||
return f"""
|
||||
!Ptr = type !llvm.ptr<i8>
|
||||
!Ptr = !llvm.ptr<i8>
|
||||
#enc = #sparse_tensor.encoding<{{
|
||||
dimLevelType = [ {sparsity} ]
|
||||
}}>
|
||||
|
@ -3,15 +3,15 @@
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
!vector_type_A = type vector<8xf32>
|
||||
!vector_type_B = type vector<8xf32>
|
||||
!vector_type_C = type vector<8x8xf32>
|
||||
!vector_type_A = vector<8xf32>
|
||||
!vector_type_B = vector<8xf32>
|
||||
!vector_type_C = vector<8x8xf32>
|
||||
|
||||
!vector_type_X = type vector<2xf32>
|
||||
!vector_type_Y = type vector<3xf32>
|
||||
!vector_type_Z = type vector<2x3xf32>
|
||||
!vector_type_X = vector<2xf32>
|
||||
!vector_type_Y = vector<3xf32>
|
||||
!vector_type_Z = vector<2x3xf32>
|
||||
|
||||
!vector_type_R = type vector<7xf32>
|
||||
!vector_type_R = vector<7xf32>
|
||||
|
||||
func.func @vector_outerproduct_splat_8x8(%fa: f32, %fb: f32, %fc: f32) -> !vector_type_C {
|
||||
%a = vector.splat %fa: !vector_type_A
|
||||
|
@ -3,15 +3,15 @@
|
||||
// RUN: -shared-libs=%mlir_integration_test_dir/libmlir_c_runner_utils%shlibext | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
!vector_type_A = type vector<8xi64>
|
||||
!vector_type_B = type vector<8xi64>
|
||||
!vector_type_C = type vector<8x8xi64>
|
||||
!vector_type_A = vector<8xi64>
|
||||
!vector_type_B = vector<8xi64>
|
||||
!vector_type_C = vector<8x8xi64>
|
||||
|
||||
!vector_type_X = type vector<2xi64>
|
||||
!vector_type_Y = type vector<3xi64>
|
||||
!vector_type_Z = type vector<2x3xi64>
|
||||
!vector_type_X = vector<2xi64>
|
||||
!vector_type_Y = vector<3xi64>
|
||||
!vector_type_Z = vector<2x3xi64>
|
||||
|
||||
!vector_type_R = type vector<7xi64>
|
||||
!vector_type_R = vector<7xi64>
|
||||
|
||||
func.func @vector_outerproduct_splat_8x8(%ia: i64, %ib: i64, %ic: i64) -> !vector_type_C {
|
||||
%a = vector.splat %ia: !vector_type_A
|
||||
|
@ -51,8 +51,8 @@ func.func @print_3d() {
|
||||
|
||||
func.func private @printMemrefF32(memref<*xf32>) attributes { llvm.emit_c_interface }
|
||||
|
||||
!vector_type_C = type vector<4x4xf32>
|
||||
!matrix_type_CC = type memref<1x1x!vector_type_C>
|
||||
!vector_type_C = vector<4x4xf32>
|
||||
!matrix_type_CC = memref<1x1x!vector_type_C>
|
||||
func.func @vector_splat_2d() {
|
||||
%c0 = arith.constant 0 : index
|
||||
%f10 = arith.constant 10.0 : f32
|
||||
|
@ -161,9 +161,9 @@ module.exports = grammar({
|
||||
choice($.type, $.type_list_parens)),
|
||||
|
||||
// Type aliases
|
||||
// type-alias-def ::= '!' alias-name '=' 'type' type
|
||||
// type-alias-def ::= '!' alias-name '=' type
|
||||
// type-alias ::= '!' alias-name
|
||||
type_alias_def : $ => seq('!', $.alias_name, '=', 'type', $.type),
|
||||
type_alias_def : $ => seq('!', $.alias_name, '=', $.type),
|
||||
type_alias : $ => seq('!', $.alias_name),
|
||||
|
||||
// Dialect Types
|
||||
|
Loading…
x
Reference in New Issue
Block a user