llvm-mirror/test/TableGen/listconcat.td
Nicolai Haehnle 5962b8bbf7 TableGen: Type-check BinOps
Additionally, allow more than two operands to !con, !add, !and, !or
in the same way as is already allowed for !listconcat and !strconcat.

Change-Id: I9659411f554201b90cd8ed7c7e004d381a66fa93

Differential revision: https://reviews.llvm.org/D44112

llvm-svn: 327494
2018-03-14 11:00:43 +00:00

49 lines
1.2 KiB
TableGen

// RUN: llvm-tblgen %s | FileCheck %s
// CHECK: class X<list<int> X:a = ?, list<int> X:b = ?, list<int> X:c = ?> {
// CHECK: list<int> x = !listconcat(!listconcat(X:a, X:b), !listconcat(X:b, X:c));
// CHECK: }
// CHECK: class Y<list<string> Y:S = ?> {
// CHECK: list<string> T1 = !listconcat(Y:S, ["foo"]);
// CHECK: list<string> T2 = !listconcat(Y:S, !listconcat(["foo"], !listconcat(Y:S, ["bar", "baz"])));
// CHECK: }
// CHECK: def A0 {
// CHECK: list<int> lst = [4];
// CHECK: }
// CHECK: def A1 {
// CHECK: list<int> lst = [];
// CHECK: }
// CHECK: def DX {
// CHECK: list<int> x = [0, 1, 1, 2]
// CHECK: }
// CHECK: def Z {
// CHECK: list<string> T1 = ["fu", "foo"];
// CHECK: list<string> T2 = ["fu", "foo", "fu", "bar", "baz"];
// CHECK: }
class A<bit x> {
// The empty lists type-check without issues.
list<int> lst = !listconcat([], !if(x, [], [4]));
}
def A0 : A<0>;
def A1 : A<1>;
class X<list<int> a, list<int> b, list<int> c> {
list<int> x = !listconcat(!listconcat(a, b), !listconcat(b, c));
}
class Y<list<string> S> {
list<string> T1 = !listconcat(S, ["foo"]);
list<string> T2 = !listconcat(S, ["foo"], S, ["bar", "baz"]);
}
def DX : X<[0], [1], [2]>;
def Z : Y<["fu"]>;