diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2014-11-24 09:08:18 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2014-11-24 09:08:18 +0000 |
| commit | 5ca98fd98791947eba83a1ed3f2c8191ef7afa6c (patch) | |
| tree | f5944309621cee4fe0976be6f9ac619b7ebfc4c2 /test/TableGen | |
| parent | 68bcb7db193e4bc81430063148253d30a791023e (diff) | |
Notes
Diffstat (limited to 'test/TableGen')
| -rw-r--r-- | test/TableGen/ForeachLoop.td | 26 | ||||
| -rw-r--r-- | test/TableGen/GeneralList.td | 1 | ||||
| -rw-r--r-- | test/TableGen/MultiClassDefName.td | 25 | ||||
| -rw-r--r-- | test/TableGen/ValidIdentifiers.td | 16 | ||||
| -rw-r--r-- | test/TableGen/if-empty-list-arg.td | 7 | ||||
| -rw-r--r-- | test/TableGen/intrinsic-long-name.td | 32 | ||||
| -rw-r--r-- | test/TableGen/lisp.td | 1 | ||||
| -rw-r--r-- | test/TableGen/listconcat.td | 18 | ||||
| -rw-r--r-- | test/TableGen/math.td | 10 | ||||
| -rw-r--r-- | test/TableGen/strconcat.td | 14 |
10 files changed, 146 insertions, 4 deletions
diff --git a/test/TableGen/ForeachLoop.td b/test/TableGen/ForeachLoop.td index 4aacc74d8aa2..25208fae227e 100644 --- a/test/TableGen/ForeachLoop.td +++ b/test/TableGen/ForeachLoop.td @@ -51,8 +51,10 @@ foreach i = [0, 1, 2, 3, 4, 5, 6, 7] in // CHECK: string Name = "R7"; // CHECK: int Index = 7; -foreach i = {0-3,9-7} in +foreach i = {0-3,9-7} in { def S#i : Register<"Q"#i, i>; + def : Register<"T"#i, i>; +} // CHECK: def S0 // CHECK: def S1 @@ -61,3 +63,25 @@ foreach i = {0-3,9-7} in // CHECK: def S7 // CHECK: def S8 // CHECK: def S9 + +// CHECK: def +// CHECK: string Name = "T0"; + +// CHECK: def +// CHECK: string Name = "T1"; + +// CHECK: def +// CHECK: string Name = "T2"; + +// CHECK: def +// CHECK: string Name = "T3"; + +// CHECK: def +// CHECK: string Name = "T9"; + +// CHECK: def +// CHECK: string Name = "T8"; + +// CHECK: def +// CHECK: string Name = "T7"; + diff --git a/test/TableGen/GeneralList.td b/test/TableGen/GeneralList.td index 9e0c7df552b3..17cc9a5cb035 100644 --- a/test/TableGen/GeneralList.td +++ b/test/TableGen/GeneralList.td @@ -1,5 +1,4 @@ // RUN: llvm-tblgen %s -// XFAIL: vg_leak // // Test to make sure that lists work with any data-type diff --git a/test/TableGen/MultiClassDefName.td b/test/TableGen/MultiClassDefName.td index d3c6de7e8421..811d92667eb2 100644 --- a/test/TableGen/MultiClassDefName.td +++ b/test/TableGen/MultiClassDefName.td @@ -14,3 +14,28 @@ multiclass Names<string n, string m> { } defm Hello : Names<"hello", "world">; + +// Ensure that the same anonymous name is used as the prefix for all defs in an +// anonymous multiclass. + +class Outer<C i> { + C Inner = i; +} + +multiclass MC<string name> { + def hi : C<name>; + def there : Outer<!cast<C>(!strconcat(NAME, "hi"))>; +} + +defm : MC<"foo">; + +multiclass MC2<string name> { + def there : Outer<C<name> >; +} + +// Ensure that we've correctly captured the reference to name from the implicit +// anonymous C def in the template parameter list of Outer. +// CHECK-NOT: MC2::name + +defm : MC2<"bar">; + diff --git a/test/TableGen/ValidIdentifiers.td b/test/TableGen/ValidIdentifiers.td new file mode 100644 index 000000000000..333ede0c62bc --- /dev/null +++ b/test/TableGen/ValidIdentifiers.td @@ -0,0 +1,16 @@ +// RUN: llvm-tblgen -gen-ctags %s | FileCheck %s +// XFAIL: vg_leak + +// Ensure that generated names for anonymous records are valid identifiers via the ctags index. + +class foo<int X> { int THEVAL = X; } +// CHECK: {{^X }} + +def : foo<2>; +// CHECK: {{^anonymous_0 }} + +def X { + foo Y = foo<1>; +} +// CHECK: {{^anonymous_1 }} +// CHECK: {{^foo }} diff --git a/test/TableGen/if-empty-list-arg.td b/test/TableGen/if-empty-list-arg.td new file mode 100644 index 000000000000..39edf58ff29a --- /dev/null +++ b/test/TableGen/if-empty-list-arg.td @@ -0,0 +1,7 @@ +// RUN: llvm-tblgen %s +// XFAIL: vg_leak + +class C<bit cond> { + list<int> X = !if(cond, [1, 2, 3], []); + list<int> Y = !if(cond, [], [4, 5, 6]); +} diff --git a/test/TableGen/intrinsic-long-name.td b/test/TableGen/intrinsic-long-name.td new file mode 100644 index 000000000000..6b9ba018e383 --- /dev/null +++ b/test/TableGen/intrinsic-long-name.td @@ -0,0 +1,32 @@ +// RUN: llvm-tblgen -gen-intrinsic %s | FileCheck %s +// XFAIL: vg_leak + +class IntrinsicProperty; + +class ValueType<int size, int value> { + string Namespace = "MVT"; + int Size = size; + int Value = value; +} + +class LLVMType<ValueType vt> { + ValueType VT = vt; +} + +class Intrinsic<string name, list<LLVMType> param_types = []> { + string LLVMName = name; + bit isTarget = 0; + string TargetPrefix = ""; + list<LLVMType> RetTypes = []; + list<LLVMType> ParamTypes = param_types; + list<IntrinsicProperty> Properties = []; +} + +def iAny : ValueType<0, 254>; +def llvm_anyint_ty : LLVMType<iAny>; + +// Make sure we generate the long name without crashing +// CHECK: this_is_a_really_long_intrinsic_name_but_we_should_still_not_crash // llvm.this.is.a.really.long.intrinsic.name.but.we.should.still.not.crash +def int_foo : Intrinsic<"llvm.foo", [llvm_anyint_ty]>; +def int_this_is_a_really_long_intrinsic_name_but_we_should_still_not_crash : Intrinsic<"llvm.this.is.a.really.long.intrinsic.name.but.we.should.still.not.crash", [llvm_anyint_ty]>; + diff --git a/test/TableGen/lisp.td b/test/TableGen/lisp.td index 9e586055ff9d..d753fbd299ce 100644 --- a/test/TableGen/lisp.td +++ b/test/TableGen/lisp.td @@ -1,5 +1,4 @@ // RUN: llvm-tblgen %s -// XFAIL: vg_leak // CHECK: def One { // CHECK-NEXT: list<string> names = ["Jeffrey Sinclair"]; diff --git a/test/TableGen/listconcat.td b/test/TableGen/listconcat.td new file mode 100644 index 000000000000..870e649d41dc --- /dev/null +++ b/test/TableGen/listconcat.td @@ -0,0 +1,18 @@ +// RUN: llvm-tblgen %s | FileCheck %s + +// 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 Z { +// CHECK: list<string> T1 = ["fu", "foo"]; +// CHECK: list<string> T2 = ["fu", "foo", "fu", "bar", "baz"]; +// CHECK: } + +class Y<list<string> S> { + list<string> T1 = !listconcat(S, ["foo"]); + list<string> T2 = !listconcat(S, ["foo"], S, ["bar", "baz"]); +} + +def Z : Y<["fu"]>; diff --git a/test/TableGen/math.td b/test/TableGen/math.td index 59d16ae908e2..71c60579de21 100644 --- a/test/TableGen/math.td +++ b/test/TableGen/math.td @@ -1,6 +1,16 @@ // RUN: llvm-tblgen %s | FileCheck %s // XFAIL: vg_leak +def shifts { + bits<2> b = 0b10; + int i = 2; + int shifted_b = !shl(b, 2); + int shifted_i = !shl(i, 2); +} +// CHECK: def shifts +// CHECK: shifted_b = 8 +// CHECK: shifted_i = 8 + class Int<int value> { int Value = value; } diff --git a/test/TableGen/strconcat.td b/test/TableGen/strconcat.td index dfb1a94d82c8..f5d7512fd695 100644 --- a/test/TableGen/strconcat.td +++ b/test/TableGen/strconcat.td @@ -1,9 +1,21 @@ // RUN: llvm-tblgen %s | FileCheck %s -// CHECK: fufoo +// CHECK: class Y<string Y:S = ?> { +// CHECK: string T = !strconcat(Y:S, "foo"); +// CHECK: string T2 = !strconcat(Y:S, !strconcat("foo", !strconcat(Y:S, "bar"))); +// CHECK: string S = "foobar"; +// CHECK: } + +// CHECK: def Z { +// CHECK: string T = "fufoo"; +// CHECK: string T2 = "fufoofubar"; +// CHECK: string S = "foobar"; +// CHECK: } class Y<string S> { string T = !strconcat(S, "foo"); + // More than two arguments is equivalent to nested calls + string T2 = !strconcat(S, "foo", S, "bar"); // String values concatenate lexically, as in C. string S = "foo" "bar"; |
