mirror of https://github.com/llvm/circt.git
179 lines
5.5 KiB
MLIR
179 lines
5.5 KiB
MLIR
// RUN: circt-opt %s --split-input-file --verify-diagnostics
|
|
|
|
|
|
func.func @seq0() {
|
|
return
|
|
}
|
|
|
|
// expected-error @below {{'seq0' does not reference a valid 'rtg.sequence' operation}}
|
|
rtg.get_sequence @seq0 : !rtg.sequence
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq0(%arg0: index) { }
|
|
|
|
// expected-error @below {{referenced 'rtg.sequence' op's type does not match}}
|
|
"rtg.get_sequence"() <{sequence="seq0"}> : () -> !rtg.sequence
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq0(%arg0: index) { }
|
|
|
|
%0 = rtg.get_sequence @seq0 : !rtg.sequence<index>
|
|
// expected-error @below {{must at least have one replacement value}}
|
|
rtg.substitute_sequence %0() : !rtg.sequence<index>
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq0(%arg0: index) { }
|
|
|
|
%c = index.constant 0
|
|
%0 = rtg.get_sequence @seq0 : !rtg.sequence<index>
|
|
// expected-error @below {{number of operands and types do not match: got 2 operands and 1 types}}
|
|
rtg.substitute_sequence %0(%c, %c) : !rtg.sequence<index>
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq0(%arg0: index) { }
|
|
|
|
// expected-note @below {{prior use here}}
|
|
%c = index.bool.constant true
|
|
%0 = rtg.get_sequence @seq0 : !rtg.sequence<index>
|
|
// expected-error @below {{use of value '%c' expects different type than prior uses: 'index' vs 'i1'}}
|
|
rtg.substitute_sequence %0(%c) : !rtg.sequence<index>
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq0(%arg0: index) { }
|
|
|
|
%c = index.constant 0
|
|
%0 = rtg.get_sequence @seq0 : !rtg.sequence<index>
|
|
// expected-error @below {{must not have more replacement values than sequence arguments}}
|
|
"rtg.substitute_sequence"(%0, %c, %c) : (!rtg.sequence<index>, index, index) -> !rtg.sequence
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq0(%arg0: index) { }
|
|
|
|
%c = index.bool.constant true
|
|
%0 = rtg.get_sequence @seq0 : !rtg.sequence<index>
|
|
// expected-error @below {{replacement types must match the same number of sequence argument types from the front}}
|
|
"rtg.substitute_sequence"(%0, %c) : (!rtg.sequence<index>, i1) -> !rtg.sequence
|
|
|
|
// -----
|
|
|
|
// expected-error @below {{sequence type does not match block argument types}}
|
|
"rtg.sequence"()<{sym_name="seq0", sequenceType=!rtg.sequence<i32>}>({^bb0:}) : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-note @below {{prior use here}}
|
|
rtg.sequence @seq0(%arg0: !rtg.sequence) {
|
|
// expected-error @below {{use of value '%arg0' expects different type than prior uses: '!rtg.randomized_sequence' vs '!rtg.sequence'}}
|
|
rtg.embed_sequence %arg0
|
|
}
|
|
|
|
// -----
|
|
|
|
// expected-error @below {{terminator operand types must match dict entry types}}
|
|
rtg.target @target : !rtg.dict<a: i32> {
|
|
rtg.yield
|
|
}
|
|
|
|
// -----
|
|
|
|
// expected-error @below {{argument types must match dict entry types}}
|
|
"rtg.test"() <{sym_name="test", target=!rtg.dict<a: i32>}> ({^bb0(%b: i8):}) : () -> ()
|
|
|
|
// -----
|
|
|
|
// expected-error @below {{dictionary must be sorted by names and contain no duplicates, first violation at entry 'a'}}
|
|
rtg.test @test(a = %a: i32, a = %a: i32) {
|
|
}
|
|
|
|
// -----
|
|
|
|
// expected-error @below {{dictionary must be sorted by names and contain no duplicates, first violation at entry 'a'}}
|
|
rtg.test @test(b = %b: i32, a = %a: i32) {
|
|
}
|
|
|
|
// -----
|
|
|
|
// expected-error @below {{empty strings not allowed as entry names}}
|
|
rtg.test @test(dict = %dict: !rtg.dict<"": i32>) { }
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq(%arg0: i32, %arg1: i64, %arg2: index) {
|
|
// expected-error @below {{types of all elements must match}}
|
|
"rtg.bag_create"(%arg0, %arg1, %arg2, %arg2){} : (i32, i64, index, index) -> !rtg.bag<i32>
|
|
}
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq(%arg0: i64, %arg1: i64, %arg2: index) {
|
|
// expected-error @below {{operand types must match bag element type}}
|
|
"rtg.bag_create"(%arg0, %arg1, %arg2, %arg2){} : (i64, i64, index, index) -> !rtg.bag<i32>
|
|
}
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq() {
|
|
// expected-error @below {{expected 1 or more operands, but found 0}}
|
|
rtg.set_union : !rtg.set<i32>
|
|
}
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq() {
|
|
// expected-error @below {{expected 1 or more operands, but found 0}}
|
|
rtg.bag_union : !rtg.bag<i32>
|
|
}
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq() {}
|
|
|
|
rtg.target @target : !rtg.dict<> {
|
|
%0 = rtg.get_sequence @seq : !rtg.sequence
|
|
// expected-error @below {{sequence type must have exactly 3 element types}}
|
|
rtg.context_switch #rtgtest.cpu<0> -> #rtgtest.cpu<1>, %0 : !rtg.sequence
|
|
}
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq(%arg0: !rtg.sequence, %arg1: !rtg.sequence, %arg2: !rtg.sequence) {}
|
|
|
|
rtg.target @target : !rtg.dict<> {
|
|
%0 = rtg.get_sequence @seq : !rtg.sequence<!rtg.sequence, !rtg.sequence, !rtg.sequence>
|
|
// expected-error @below {{first sequence element type must match 'from' attribute type}}
|
|
rtg.context_switch #rtgtest.cpu<0> -> #rtgtest.cpu<1>, %0 : !rtg.sequence<!rtg.sequence, !rtg.sequence, !rtg.sequence>
|
|
}
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq(%arg0: !rtgtest.cpu, %arg1: !rtg.sequence, %arg2: !rtg.sequence) {}
|
|
|
|
rtg.target @target : !rtg.dict<> {
|
|
%0 = rtg.get_sequence @seq : !rtg.sequence<!rtgtest.cpu, !rtg.sequence, !rtg.sequence>
|
|
// expected-error @below {{second sequence element type must match 'to' attribute type}}
|
|
rtg.context_switch #rtgtest.cpu<0> -> #rtgtest.cpu<1>, %0 : !rtg.sequence<!rtgtest.cpu, !rtg.sequence, !rtg.sequence>
|
|
}
|
|
|
|
// -----
|
|
|
|
rtg.sequence @seq(%arg0: !rtgtest.cpu, %arg1: !rtgtest.cpu, %arg2: !rtgtest.cpu) {}
|
|
|
|
rtg.target @target : !rtg.dict<> {
|
|
%0 = rtg.get_sequence @seq : !rtg.sequence<!rtgtest.cpu, !rtgtest.cpu, !rtgtest.cpu>
|
|
// expected-error @below {{third sequence element type must be a fully substituted sequence}}
|
|
rtg.context_switch #rtgtest.cpu<0> -> #rtgtest.cpu<1>, %0 : !rtg.sequence<!rtgtest.cpu, !rtgtest.cpu, !rtgtest.cpu>
|
|
}
|
|
|
|
// -----
|
|
|
|
rtg.test @test() {
|
|
// expected-error @below {{must have at least one sequence in the list}}
|
|
%0 = rtg.interleave_sequences
|
|
}
|