2018-09-20 12:35:11 +08:00
|
|
|
// RUN: mlir-opt %s -split-input-file -verify
|
2018-06-25 00:10:36 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// Check different error cases.
|
|
|
|
// -----
|
2018-06-25 02:18:29 +08:00
|
|
|
|
2019-02-06 03:47:02 +08:00
|
|
|
func @illegaltype(i) // expected-error {{expected non-function type}}
|
2018-06-25 02:18:29 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-25 23:10:46 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @illegaltype() {
|
2019-02-06 03:47:02 +08:00
|
|
|
%0 = constant splat<<vector 4 x f32>, 0> : vector<4 x f32> // expected-error {{expected non-function type}}
|
2018-11-10 13:24:37 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @nestedtensor(tensor<tensor<i8>>) -> () // expected-error {{invalid tensor element type}}
|
2018-06-25 02:18:29 +08:00
|
|
|
|
2018-12-12 05:49:43 +08:00
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @indexvector(vector<4 x index>) -> () // expected-error {{vector elements must be int or float type}}
|
2018-12-12 05:49:43 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-04 23:23:28 +08:00
|
|
|
// Everything is valid in a memref.
|
|
|
|
func @indexmemref(memref<? x index>) -> ()
|
2018-12-12 05:49:43 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @indextensor(tensor<4 x index>) -> () // expected-error {{invalid tensor element type}}
|
2018-12-12 05:49:43 +08:00
|
|
|
|
2018-07-17 00:45:22 +08:00
|
|
|
// -----
|
|
|
|
// Test no map in memref type.
|
2019-01-03 02:20:00 +08:00
|
|
|
func @memrefs(memref<2x4xi8, >) // expected-error {{expected list element}}
|
2018-07-17 00:45:22 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
// Test non-existent map in memref type.
|
2019-01-03 02:20:00 +08:00
|
|
|
func @memrefs(memref<2x4xi8, #map7>) // expected-error {{undefined affine map id 'map7'}}
|
2018-07-17 00:45:22 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
// Test non hash identifier in memref type.
|
2019-01-03 02:20:00 +08:00
|
|
|
func @memrefs(memref<2x4xi8, %map7>) // expected-error {{expected '(' at start of dimensional identifiers list}}
|
2018-07-17 00:45:22 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
// Test non-existent map in map composition of memref type.
|
|
|
|
#map0 = (d0, d1) -> (d0, d1)
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @memrefs(memref<2x4xi8, #map0, #map8>) // expected-error {{undefined affine map id 'map8'}}
|
2018-07-17 00:45:22 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
// Test multiple memory space error.
|
|
|
|
#map0 = (d0, d1) -> (d0, d1)
|
2019-01-03 02:20:00 +08:00
|
|
|
func @memrefs(memref<2x4xi8, #map0, 1, 2>) // expected-error {{multiple memory spaces specified in memref type}}
|
2018-07-17 00:45:22 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
// Test affine map after memory space.
|
|
|
|
#map0 = (d0, d1) -> (d0, d1)
|
|
|
|
#map1 = (d0, d1) -> (d0, d1)
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @memrefs(memref<2x4xi8, #map0, 1, #map1>) // expected-error {{affine map after memory space in memref type}}
|
2018-07-17 00:45:22 +08:00
|
|
|
|
2018-10-26 21:15:38 +08:00
|
|
|
// -----
|
|
|
|
// Test dimension mismatch between memref and layout map.
|
|
|
|
// The error must be emitted even for the trivial identity layout maps that are
|
|
|
|
// dropped in type creation.
|
|
|
|
#map0 = (d0, d1) -> (d0, d1)
|
2019-01-03 02:20:00 +08:00
|
|
|
func @memrefs(memref<42xi8, #map0>) // expected-error {{memref affine map dimension mismatch}}
|
2018-11-02 16:48:22 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
#map0 = (d0, d1) -> (d0, d1)
|
|
|
|
#map1 = (d0) -> (d0)
|
2019-01-03 02:20:00 +08:00
|
|
|
func @memrefs(memref<42x42xi8, #map0, #map1>) // expected-error {{memref affine map dimension mismatch}}
|
2018-10-26 21:15:38 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-25 23:10:46 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @illegalattrs() -> () attributes { key } // expected-error {{expected ':' in attribute list}}
|
2018-09-19 07:36:26 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func missingsigil() -> (i1, index, f32) // expected-error {{expected a function identifier like}}
|
2018-06-25 02:18:29 +08:00
|
|
|
|
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-25 02:18:29 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @bad_branch() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb12:
|
|
|
|
br ^missing // expected-error {{reference to an undefined block}}
|
2018-06-25 02:18:29 +08:00
|
|
|
}
|
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-25 02:18:29 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @block_redef() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42:
|
2018-06-25 02:18:29 +08:00
|
|
|
return
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42: // expected-error {{redefinition of block '^bb42'}}
|
2018-06-25 23:10:46 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-25 23:10:46 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @no_terminator() { // expected-error {{block with no terminator}}
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb40:
|
2018-06-25 23:10:46 +08:00
|
|
|
return
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb41:
|
2018-12-30 05:36:59 +08:00
|
|
|
^bb42:
|
2018-06-25 02:18:29 +08:00
|
|
|
return
|
|
|
|
}
|
2018-06-29 08:02:32 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-29 08:02:32 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @block_no_rparen() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42 (%bb42 : i32: // expected-error {{expected ')' to end argument list}}
|
2018-07-23 06:45:24 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @block_arg_no_ssaid() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42 (i32): // expected-error {{expected SSA operand}}
|
2018-07-23 06:45:24 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @block_arg_no_type() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42 (%0): // expected-error {{expected ':' and type for SSA operand}}
|
2018-07-23 06:45:24 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @block_arg_no_close_paren() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42:
|
|
|
|
br ^bb2( // expected-error@+1 {{expected ')' to close argument list}}
|
2018-10-14 22:55:29 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @block_first_has_predecessor() {
|
2018-12-30 01:11:58 +08:00
|
|
|
// expected-error@-1 {{entry block of function may not have predecessors}}
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42:
|
|
|
|
br ^bb43
|
|
|
|
^bb43:
|
|
|
|
br ^bb42
|
2018-10-23 23:12:59 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @illegalattrs() -> ()
|
2018-09-19 07:36:26 +08:00
|
|
|
attributes { key } { // expected-error {{expected ':' in attribute list}}
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42:
|
2018-09-19 07:36:26 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @empty() {
|
2018-12-29 10:41:31 +08:00
|
|
|
} // expected-error {{function must have a body}}
|
2018-06-29 08:02:32 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-29 08:02:32 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @illegalattrs() -> ()
|
2018-09-19 07:36:26 +08:00
|
|
|
attributes { key } { // expected-error {{expected ':' in attribute list}}
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42:
|
2018-09-19 07:36:26 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @no_return() {
|
2019-02-09 01:52:26 +08:00
|
|
|
%x = constant 0 : i32 // expected-error {{block with no terminator}}
|
2018-08-10 03:28:58 +08:00
|
|
|
}
|
2018-06-29 11:45:33 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-29 11:45:33 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
" // expected-error {{expected}}
|
2018-06-29 11:45:33 +08:00
|
|
|
"
|
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-29 11:45:33 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
" // expected-error {{expected}}
|
2018-06-29 11:45:33 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-29 11:45:33 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @bad_op_type() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb40:
|
2018-07-19 06:31:25 +08:00
|
|
|
"foo"() : i32 // expected-error {{expected function type}}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @no_terminator() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb40:
|
2018-07-19 06:31:25 +08:00
|
|
|
"foo"() : ()->()
|
|
|
|
""() : ()->() // expected-error {{empty operation name is invalid}}
|
2018-06-29 11:45:33 +08:00
|
|
|
return
|
|
|
|
}
|
2018-06-30 13:08:05 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-06-30 13:08:05 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @illegaltype(i0) // expected-error {{invalid integer width}}
|
2018-06-30 13:08:05 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-07-04 08:51:28 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @malformed_for_percent() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for i = 1 to 10 { // expected-error {{expected SSA operand}}
|
2018-08-10 03:28:58 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @malformed_for_equal() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i 1 to 10 { // expected-error {{expected '='}}
|
2018-08-10 03:28:58 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @malformed_for_to() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 too 10 { // expected-error {{expected 'to' between bounds}}
|
2018-07-20 00:52:39 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @incomplete_for() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 step 2
|
2019-02-02 08:42:18 +08:00
|
|
|
} // expected-error {{expected '{' to begin block list}}
|
2018-06-30 13:08:05 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-07-04 08:51:28 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @nonconstant_step(%1 : i32) {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %2 = 1 to 5 step %1 { // expected-error {{expected non-function type}}
|
2018-07-20 00:52:39 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @for_negative_stride() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 step -1
|
2019-02-02 08:42:18 +08:00
|
|
|
} // expected-error@-1 {{expected step to be representable as a positive signed integer}}
|
2018-09-28 09:03:27 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @non_instruction() {
|
2018-07-26 02:15:20 +08:00
|
|
|
asd // expected-error {{custom op 'asd' is unknown}}
|
2018-07-04 08:51:28 +08:00
|
|
|
}
|
2018-07-05 11:45:39 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-07-05 11:45:39 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_if_conditional2() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2019-02-08 06:24:18 +08:00
|
|
|
if (i)[N] : (i >= ) // expected-error {{expected '== 0' or '>= 0' at end of affine constraint}}
|
2018-08-08 05:24:38 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_if_conditional3() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2019-02-08 06:24:18 +08:00
|
|
|
if (i)[N] : (i == 1) // expected-error {{expected '0' after '=='}}
|
2018-08-08 05:24:38 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_if_conditional4() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2019-02-08 06:24:18 +08:00
|
|
|
if (i)[N] : (i >= 2) // expected-error {{expected '0' after '>='}}
|
2018-08-08 05:24:38 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_if_conditional5() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2019-02-08 06:24:18 +08:00
|
|
|
if (i)[N] : (i <= 0 ) // expected-error {{expected '== 0' or '>= 0' at end of affine constraint}}
|
2018-08-08 05:24:38 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_if_conditional6() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2019-02-08 06:24:18 +08:00
|
|
|
if (i) : (i) // expected-error {{expected '== 0' or '>= 0' at end of affine constraint}}
|
2018-08-08 05:24:38 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
2019-02-08 06:24:18 +08:00
|
|
|
// TODO (support if (1)?
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_if_conditional7() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2019-02-08 06:24:18 +08:00
|
|
|
if (i) : (1) // expected-error {{expected '== 0' or '>= 0' at end of affine constraint}}
|
2018-08-08 05:24:38 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
#map = (d0) -> (% // expected-error {{invalid SSA name}}
|
2018-07-12 04:26:23 +08:00
|
|
|
|
2018-07-15 14:06:24 +08:00
|
|
|
// -----
|
2018-07-19 23:35:28 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @test() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb40:
|
2018-07-21 00:28:54 +08:00
|
|
|
%1 = "foo"() : (i32)->i64 // expected-error {{expected 0 operand types but had 1}}
|
2018-07-19 23:35:28 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @redef() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42:
|
2018-07-24 23:34:58 +08:00
|
|
|
%x = "xxx"(){index: 0} : ()->i32 // expected-error {{previously defined here}}
|
|
|
|
%x = "xxx"(){index: 0} : ()->i32 // expected-error {{redefinition of SSA value '%x'}}
|
2018-07-19 23:35:28 +08:00
|
|
|
return
|
2018-07-20 00:52:39 +08:00
|
|
|
}
|
|
|
|
|
2018-07-21 09:41:34 +08:00
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @undef() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42:
|
2018-07-21 09:41:34 +08:00
|
|
|
%x = "xxx"(%y) : (i32)->i32 // expected-error {{use of undeclared SSA value}}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @missing_rbrace() {
|
2018-08-10 03:28:58 +08:00
|
|
|
return
|
2019-01-03 02:20:00 +08:00
|
|
|
func @d() {return} // expected-error {{custom op 'func' is unknown}}
|
2018-07-20 00:52:39 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-02-06 03:47:02 +08:00
|
|
|
func @malformed_type(%a : intt) { // expected-error {{expected non-function type}}
|
2018-07-20 00:52:39 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @resulterror() -> i32 {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42:
|
2018-11-16 04:32:21 +08:00
|
|
|
return // expected-error {{'return' op has 0 operands, but enclosing function returns 1}}
|
2018-07-22 05:32:09 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
2018-07-23 06:45:24 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @func_resulterror() -> i32 {
|
2018-10-23 23:46:26 +08:00
|
|
|
return // expected-error {{'return' op has 0 operands, but enclosing function returns 1}}
|
2018-08-10 03:28:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @argError() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb1(%a: i64): // expected-error {{previously defined here}}
|
|
|
|
br ^bb2
|
|
|
|
^bb2(%a: i64): // expected-error{{redefinition of SSA value '%a'}}
|
2018-07-23 06:45:24 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @bbargMismatch(i32, f32) {
|
2018-12-30 05:36:59 +08:00
|
|
|
// expected-error @+1 {{argument and block argument type mismatch}}
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb42(%0: f32):
|
2018-07-23 06:45:24 +08:00
|
|
|
return
|
|
|
|
}
|
2018-07-23 23:42:19 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @br_mismatch() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-07-23 23:42:19 +08:00
|
|
|
%0 = "foo"() : () -> (i1, i17)
|
2018-09-07 11:56:12 +08:00
|
|
|
// expected-error @+1 {{branch has 2 operands, but target block has 1}}
|
2018-12-30 03:32:37 +08:00
|
|
|
br ^bb1(%0#1, %0#0 : i17, i1)
|
2018-07-23 23:42:19 +08:00
|
|
|
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb1(%x: i17):
|
2018-07-23 23:42:19 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2018-07-24 02:48:22 +08:00
|
|
|
// -----
|
|
|
|
|
|
|
|
// Test no nested vector.
|
2019-01-03 02:20:00 +08:00
|
|
|
func @vectors(vector<1 x vector<1xi32>>, vector<2x4xf32>)
|
2018-12-12 05:49:43 +08:00
|
|
|
// expected-error@-1 {{vector elements must be int or float type}}
|
Eliminate "primitive" types from being a thing, splitting them into FloatType
and OtherType. Other type is now the thing that holds AffineInt, Control,
eventually Resource, Variant, String, etc. FloatType holds the floating point
types, and allows convenient query of isa<FloatType>().
This fixes issues where we allowed control to be the element type of tensor,
memref, vector. At the same time, ban AffineInt from being an element of a
vector/memref/tensor as well since we don't need it.
I updated the spec to match this as well.
PiperOrigin-RevId: 206361942
2018-07-28 04:09:58 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @condbr_notbool() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-07-25 06:01:27 +08:00
|
|
|
%a = "foo"() : () -> i32 // expected-error {{prior use here}}
|
2018-12-30 03:32:37 +08:00
|
|
|
cond_br %a, ^bb0, ^bb0 // expected-error {{use of value '%a' expects different type than prior uses}}
|
2018-11-16 04:32:21 +08:00
|
|
|
// expected-error@-1 {{expected condition type was boolean (i1)}}
|
2018-07-25 06:01:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @condbr_badtype() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-07-25 06:01:27 +08:00
|
|
|
%c = "foo"() : () -> i1
|
|
|
|
%a = "foo"() : () -> i32
|
2019-02-06 03:47:02 +08:00
|
|
|
cond_br %c, ^bb0(%a, %a : i32, ^bb0) // expected-error {{expected non-function type}}
|
2018-07-25 06:01:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @condbr_a_bb_is_not_a_type() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-07-25 06:01:27 +08:00
|
|
|
%c = "foo"() : () -> i1
|
|
|
|
%a = "foo"() : () -> i32
|
2018-12-30 03:32:37 +08:00
|
|
|
cond_br %c, ^bb0(%a, %a : i32, i32), i32 // expected-error {{expected block name}}
|
2018-07-25 06:01:27 +08:00
|
|
|
}
|
2018-07-27 09:09:20 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-10 04:28:30 +08:00
|
|
|
func @successors_in_non_terminator(%a : i32, %b : i32) {
|
|
|
|
%c = "addi"(%a, %b)[^bb1] : () -> () // expected-error {{successors in non-terminator}}
|
|
|
|
^bb1:
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @undef() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-10-14 22:55:29 +08:00
|
|
|
%x = "xxx"(%y) : (i32)->i32 // expected-error {{use of undeclared SSA value name}}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @undef() {
|
2019-01-02 23:00:07 +08:00
|
|
|
%x = "xxx"(%y) : (i32)->i32 // expected-error {{use of undeclared SSA value name}}
|
2018-07-27 09:09:20 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2018-07-31 06:18:10 +08:00
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @duplicate_induction_var() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 { // expected-error {{previously defined here}}
|
|
|
|
for %i = 1 to 10 { // expected-error {{redefinition of SSA value '%i'}}
|
2018-07-31 06:18:10 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
2018-08-06 12:12:29 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @dominance_failure() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2018-08-06 12:12:29 +08:00
|
|
|
}
|
2018-10-07 08:21:53 +08:00
|
|
|
"xxx"(%i) : (index)->() // expected-error {{operand #0 does not dominate this use}}
|
2018-08-06 12:12:29 +08:00
|
|
|
return
|
|
|
|
}
|
2018-08-10 03:28:58 +08:00
|
|
|
|
2018-09-22 05:40:36 +08:00
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @dominance_failure() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-09-22 05:40:36 +08:00
|
|
|
"foo"(%x) : (i32) -> () // expected-error {{operand #0 does not dominate this use}}
|
2018-12-30 03:32:37 +08:00
|
|
|
br ^bb1
|
|
|
|
^bb1:
|
2018-09-27 22:43:44 +08:00
|
|
|
%x = "bar"() : () -> i32 // expected-note {{operand defined here}}
|
2018-09-22 05:40:36 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2018-08-10 03:28:58 +08:00
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @return_type_mismatch() -> i32 {
|
2018-08-10 03:28:58 +08:00
|
|
|
%0 = "foo"() : ()->f32
|
2018-09-07 11:56:12 +08:00
|
|
|
return %0 : f32 // expected-error {{type of return operand 0 doesn't match function result type}}
|
2018-08-10 03:28:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-02-09 01:52:26 +08:00
|
|
|
func @return_inside_loop() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 100 {
|
2019-02-09 01:52:26 +08:00
|
|
|
// expected-error@-1 {{op expects body block to not have a terminator}}
|
|
|
|
return
|
2018-08-10 03:28:58 +08:00
|
|
|
}
|
2019-01-26 04:48:25 +08:00
|
|
|
return
|
2018-08-10 03:28:58 +08:00
|
|
|
}
|
2018-08-18 07:49:42 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @redef()
|
|
|
|
func @redef() // expected-error {{redefinition of function named 'redef'}}
|
2018-08-20 12:17:22 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @foo() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-08-20 12:17:22 +08:00
|
|
|
%x = constant @foo : (i32) -> () // expected-error {{reference to function with mismatched type}}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @undefined_function() {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-08-20 12:17:22 +08:00
|
|
|
%x = constant @bar : (i32) -> () // expected-error {{reference to undefined function 'bar'}}
|
|
|
|
return
|
|
|
|
}
|
2018-08-25 14:38:14 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-02-06 03:47:02 +08:00
|
|
|
func @invalid_result_type() -> () -> () // expected-error {{expected a top level entity}}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @func() -> (() -> ())
|
|
|
|
func @referer() {
|
|
|
|
%f = constant @func : () -> () -> () // expected-error {{reference to function with mismatched type}}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2018-08-25 14:38:14 +08:00
|
|
|
#map1 = (i)[j] -> (i+j)
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @bound_symbol_mismatch(%N : index) {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = #map1(%N) to 100 {
|
2019-02-02 08:42:18 +08:00
|
|
|
// expected-error@-1 {{symbol operand count and integer set symbol count must match}}
|
2018-08-25 14:38:14 +08:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
#map1 = (i)[j] -> (i+j)
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @bound_dim_mismatch(%N : index) {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = #map1(%N, %N)[%N] to 100 {
|
2019-02-02 08:42:18 +08:00
|
|
|
// expected-error@-1 {{dim operand count and integer set dim count must match}}
|
2018-08-25 14:38:14 +08:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @large_bound() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 9223372036854775810 {
|
2019-02-02 08:42:18 +08:00
|
|
|
// expected-error@-1 {{integer constant out of range for attribute}}
|
2018-08-25 14:38:14 +08:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @max_in_upper_bound(%N : index) {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to max (i)->(N, 100) { //expected-error {{expected non-function type}}
|
2018-08-25 14:38:14 +08:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @step_typo() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 100 step -- 1 { //expected-error {{expected constant integer}}
|
2018-08-25 14:38:14 +08:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_bound_map(%N : i32) {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to (i)->(j)(%N) { //expected-error {{use of undeclared identifier}}
|
2018-08-25 14:38:14 +08:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
2018-08-29 06:26:20 +08:00
|
|
|
|
2019-01-15 01:45:09 +08:00
|
|
|
// -----
|
|
|
|
|
|
|
|
#set0 = (i)[N, M] : )i >= 0) // expected-error {{expected '(' at start of integer set constraint list}}
|
|
|
|
|
2018-08-29 06:26:20 +08:00
|
|
|
// -----
|
2018-10-26 09:33:42 +08:00
|
|
|
#set0 = (i)[N] : (i >= 0, N - i >= 0)
|
2018-08-29 06:26:20 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_if_operands1(%N : index) {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2019-02-08 06:24:18 +08:00
|
|
|
if #set0(%i) {
|
2018-08-29 06:26:20 +08:00
|
|
|
// expected-error@-1 {{symbol operand count and integer set symbol count must match}}
|
|
|
|
|
|
|
|
// -----
|
2018-10-26 09:33:42 +08:00
|
|
|
#set0 = (i)[N] : (i >= 0, N - i >= 0)
|
2018-08-29 06:26:20 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_if_operands2(%N : index) {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2019-02-08 06:24:18 +08:00
|
|
|
if #set0()[%N] {
|
2018-08-29 06:26:20 +08:00
|
|
|
// expected-error@-1 {{dim operand count and integer set dim count must match}}
|
|
|
|
|
|
|
|
// -----
|
2018-10-26 09:33:42 +08:00
|
|
|
#set0 = (i)[N] : (i >= 0, N - i >= 0)
|
2018-08-29 06:26:20 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @invalid_if_operands3(%N : index) {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i = 1 to 10 {
|
2019-02-08 06:24:18 +08:00
|
|
|
if #set0(%i)[%i] {
|
2019-01-29 13:23:53 +08:00
|
|
|
// expected-error@-1 {{operand cannot be used as a symbol}}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
2018-08-29 06:26:20 +08:00
|
|
|
|
2018-10-10 05:40:41 +08:00
|
|
|
// -----
|
|
|
|
// expected-error@+1 {{expected '"' in string literal}}
|
|
|
|
"J// -----
|
2019-01-03 02:20:00 +08:00
|
|
|
func @calls(%arg0: i32) {
|
2019-02-06 03:47:02 +08:00
|
|
|
// expected-error@+1 {{expected non-function type}}
|
2018-10-10 05:40:41 +08:00
|
|
|
%z = "casdasda"(%x) : (ppop32) -> i32
|
|
|
|
}
|
2018-10-14 22:55:29 +08:00
|
|
|
// -----
|
|
|
|
// expected-error@+2 {{expected SSA operand}}
|
2019-01-03 02:20:00 +08:00
|
|
|
func@n(){^b(
|
2018-10-14 22:55:29 +08:00
|
|
|
// -----
|
2018-10-19 04:54:44 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_non_tensor_type() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-10-19 04:54:44 +08:00
|
|
|
"foo"(){bar: dense<i32, [4]>} : () -> () // expected-error {{expected elements literal has a tensor or vector type}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_non_ranked() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-10-19 04:54:44 +08:00
|
|
|
"foo"(){bar: dense<tensor<?xi32>, [4]>} : () -> () // expected-error {{tensor literals must be ranked and have static shape}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_shape_mismatch() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-10-19 04:54:44 +08:00
|
|
|
"foo"(){bar: dense<tensor<5xi32>, [4]>} : () -> () // expected-error {{inferred shape of elements literal ([1]) does not match type ([5])}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_invalid() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-10-19 04:54:44 +08:00
|
|
|
"foo"(){bar: dense<tensor<2xi32>, [4, [5]]>} : () -> () // expected-error {{tensor literal is invalid; ranks are not consistent between elements}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_badtoken() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-10-19 04:54:44 +08:00
|
|
|
"foo"(){bar: dense<tensor<1xi32>, [tf_opaque]>} : () -> () // expected-error {{expected '[' or scalar constant inside tensor literal}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_floattype1() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-12-17 23:19:53 +08:00
|
|
|
// expected-error@+1 {{floating point value not valid for specified type}}
|
|
|
|
"foo"(){bar: dense<tensor<1xi32>, [4.0]>} : () -> ()
|
2018-10-19 04:54:44 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-05 03:27:58 +08:00
|
|
|
func @elementsattr_floattype1() -> () {
|
|
|
|
^bb0:
|
|
|
|
// expected-error@+1 {{floating point value not valid for specified type}}
|
|
|
|
"foo"(){bar: splat<tensor<i32>, 4.0>} : () -> ()
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_floattype2() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-12-17 23:19:53 +08:00
|
|
|
// expected-error@+1 {{integer value not valid for specified type}}
|
|
|
|
"foo"(){bar: dense<tensor<1xf32>, [4]>} : () -> ()
|
2018-10-19 04:54:44 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_toolarge1() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-12-17 23:19:53 +08:00
|
|
|
"foo"(){bar: dense<tensor<1xi8>, [777]>} : () -> () // expected-error {{integer constant out of range for attribute}}
|
2018-10-19 04:54:44 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_toolarge2() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2018-12-17 23:19:53 +08:00
|
|
|
"foo"(){bar: dense<tensor<1xi8>, [-777]>} : () -> () // expected-error {{integer constant out of range for attribute}}
|
2018-10-19 04:54:44 +08:00
|
|
|
}
|
2018-10-24 04:44:04 +08:00
|
|
|
|
|
|
|
// -----
|
2019-01-15 05:18:34 +08:00
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_malformed_opaque() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2019-02-12 14:51:34 +08:00
|
|
|
"foo"(){bar: opaque<tensor<1xi8>, "0xQZz123">} : () -> () // expected-error {{expected dialect namespace}}
|
2018-10-24 04:44:04 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @elementsattr_malformed_opaque1() -> () {
|
2018-12-30 03:32:37 +08:00
|
|
|
^bb0:
|
2019-02-12 14:51:34 +08:00
|
|
|
"foo"(){bar: opaque<"", tensor<1xi8>, "0xQZz123">} : () -> () // expected-error {{opaque string only contains hex digits}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @elementsattr_malformed_opaque2() -> () {
|
|
|
|
^bb0:
|
|
|
|
"foo"(){bar: opaque<"", tensor<1xi8>, "00abc">} : () -> () // expected-error {{opaque string should start with '0x'}}
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @elementsattr_malformed_opaque3() -> () {
|
|
|
|
^bb0:
|
|
|
|
"foo"(){bar: opaque<"t", tensor<1xi8>, "0xabc">} : () -> () // expected-error {{no registered dialect with namespace 't'}}
|
2018-10-26 09:33:42 +08:00
|
|
|
}
|
2018-12-30 01:01:59 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @redundant_signature(%a : i32) -> () {
|
2018-12-30 05:36:59 +08:00
|
|
|
^bb0(%b : i32): // expected-error {{invalid block name in function with named arguments}}
|
2018-12-30 01:01:59 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @mixed_named_arguments(%a : i32,
|
2018-12-30 01:01:59 +08:00
|
|
|
f32) -> () {
|
|
|
|
// expected-error @-1 {{expected SSA identifier}}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-03 02:20:00 +08:00
|
|
|
func @mixed_named_arguments(f32,
|
2018-12-30 01:01:59 +08:00
|
|
|
%a : i32) -> () { // expected-error {{expected type instead of SSA identifier}}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2019-01-08 00:16:32 +08:00
|
|
|
// -----
|
|
|
|
|
|
|
|
// This used to crash the parser, but should just error out by interpreting
|
|
|
|
// `tensor` as operator rather than as a type.
|
|
|
|
func @f(f32) {
|
|
|
|
^bb0(%a : f32):
|
|
|
|
%18 = cmpi "slt", %idx, %idx : index
|
|
|
|
tensor<42 x index // expected-error {{custom op 'tensor' is unknown}}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
2019-01-08 00:16:49 +08:00
|
|
|
// -----
|
|
|
|
|
|
|
|
func @f(%m : memref<?x?xf32>) {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i0 = 0 to 42 {
|
2019-01-08 00:16:49 +08:00
|
|
|
// expected-error@+1 {{operand #2 does not dominate this use}}
|
|
|
|
%x = load %m[%i0, %i1] : memref<?x?xf32>
|
|
|
|
}
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i1 = 0 to 42 {
|
2019-01-08 00:16:49 +08:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
2019-01-08 01:58:34 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-08 10:42:04 +08:00
|
|
|
func @dialect_type_empty_namespace(!<"">) -> () { // expected-error {{invalid type identifier}}
|
2019-01-08 01:58:34 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @dialect_type_no_string_type_data(!foo<>) -> () { // expected-error {{expected string literal type data in dialect type}}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-08 10:42:04 +08:00
|
|
|
func @dialect_type_missing_greater(!foo<"") -> () { // expected-error {{expected '>' in dialect type}}
|
2019-01-08 01:58:34 +08:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-01-08 10:42:04 +08:00
|
|
|
func @type_alias_unknown(!unknown_alias) -> () { // expected-error {{undefined type alias id 'unknown_alias'}}
|
2019-01-08 01:58:34 +08:00
|
|
|
return
|
|
|
|
}
|
2019-01-08 10:42:04 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
!missing_eq_alias type i32 // expected-error {{expected '=' in type alias definition}}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
!missing_kw_type_alias = i32 // expected-error {{expected 'type' in type alias definition}}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-02-06 03:47:02 +08:00
|
|
|
!missing_type_alias = type // expected-error@+2 {{expected non-function type}}
|
2019-01-08 10:42:04 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
!redef_alias = type i32
|
|
|
|
!redef_alias = type i32 // expected-error {{redefinition of type alias id 'redef_alias'}}
|
2019-01-12 01:03:34 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// Check ill-formed opaque tensor.
|
|
|
|
func @complex_loops() {
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i1 = 1 to 100 {
|
2019-01-12 01:03:34 +08:00
|
|
|
// expected-error @+1 {{expected '"' in string literal}}
|
2019-02-12 14:51:34 +08:00
|
|
|
"opaqueIntTensor"(){bar: opaque<"", tensor<2x1x4xi32>, "0x686]>} : () -> ()
|
2019-01-12 02:30:40 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @mi() {
|
|
|
|
// expected-error @+1 {{expected '[' or scalar constant inside tensor literal}}
|
|
|
|
"fooi64"(){bar: sparse<vector<1xi64>,[,[,1]
|
2019-01-12 03:23:15 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @invalid_tensor_literal() {
|
|
|
|
// expected-error @+1 {{expected '[' in tensor literal list}}
|
|
|
|
"foof16"(){bar: sparse<vector<1x1x1xf16>, [[0, 0, 0]], -2.0]>} : () -> ()
|
2019-01-15 04:23:38 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @invalid_tensor_literal() {
|
|
|
|
// expected-error @+1 {{expected '[' or scalar constant inside tensor literal}}
|
|
|
|
"fooi16"(){bar: sparse<tensor<2x2x2xi16>, [[1, 1, 0], [0, 1, 0], [0,, [[0, 0, 0]], [-2.0]>} : () -> ()
|
2019-01-15 05:56:59 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
2019-02-02 16:07:30 +08:00
|
|
|
func @invalid_affine_structure() {
|
|
|
|
%c0 = constant 0 : index
|
2019-02-07 03:08:18 +08:00
|
|
|
%idx = affine.apply (d0, d1) (%c0, %c0) // expected-error {{expected '->' or ':'}}
|
2019-02-02 16:07:30 +08:00
|
|
|
return
|
|
|
|
}
|
2019-02-06 12:41:52 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @missing_for_max(%arg0: index, %arg1: index, %arg2: memref<100xf32>) {
|
|
|
|
// expected-error @+1 {{lower loop bound affine map with multiple results requires 'max' prefix}}
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i0 = ()[s]->(0,s-1)()[%arg0] to %arg1 {
|
2019-02-06 12:41:52 +08:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @missing_for_min(%arg0: index, %arg1: index, %arg2: memref<100xf32>) {
|
|
|
|
// expected-error @+1 {{upper loop bound affine map with multiple results requires 'min' prefix}}
|
2019-02-07 13:54:18 +08:00
|
|
|
for %i0 = %arg0 to ()[s]->(100,s+1)()[%arg1] {
|
2019-02-06 12:41:52 +08:00
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
2019-02-08 02:13:50 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{vector types must have positive constant sizes}}
|
|
|
|
func @zero_vector_type() -> vector<0xi32>
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{vector types must have positive constant sizes}}
|
|
|
|
func @zero_in_vector_type() -> vector<1x0xi32>
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{invalid memref size}}
|
|
|
|
func @zero_memref_type() -> memref<0xi32>
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{invalid memref size}}
|
|
|
|
func @zero_in_memref_type() -> memref<1x0xi32>
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{expected dimension size in vector type}}
|
|
|
|
func @negative_vector_size() -> vector<-1xi32>
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{expected non-function type}}
|
|
|
|
func @negative_in_vector_size() -> vector<1x-1xi32>
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{expected non-function type}}
|
|
|
|
func @negative_memref_size() -> memref<-1xi32>
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{expected non-function type}}
|
|
|
|
func @negative_in_memref_size() -> memref<1x-1xi32>
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{expected non-function type}}
|
|
|
|
func @negative_tensor_size() -> tensor<-1xi32>
|
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{expected non-function type}}
|
|
|
|
func @negative_in_tensor_size() -> tensor<1x-1xi32>
|
2019-02-27 02:07:27 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
func @invalid_nested_dominance() {
|
|
|
|
"foo.region"() : () -> () {
|
|
|
|
// expected-error @+1 {{operand #0 does not dominate this use}}
|
|
|
|
"foo.use" (%1) : (i32) -> ()
|
|
|
|
br ^bb2
|
|
|
|
|
|
|
|
^bb2:
|
|
|
|
// expected-note @+1 {{operand defined here}}
|
|
|
|
%1 = constant 0 : i32
|
|
|
|
"foo.yield" () : () -> ()
|
|
|
|
}
|
|
|
|
return
|
|
|
|
}
|
2019-02-27 08:43:12 +08:00
|
|
|
|
|
|
|
// -----
|
|
|
|
|
|
|
|
// expected-error @+1 {{invalid dialect namespace 'invalid.dialect'}}
|
|
|
|
func @invalid_unknown_type_dialect_name() -> !invalid.dialect<"">
|