forked from OSchip/llvm-project
TableGen: Generalize type deduction for !listconcat
Summary: This way, it should work even with complex operands. Change-Id: Iaccf5bbb50bd5882a0ba5d59689e4381315fb361 Reviewers: arsenm, craig.topper, tra, MartinO Subscribers: wdng, llvm-commits Differential Revision: https://reviews.llvm.org/D43554 llvm-svn: 325796
This commit is contained in:
parent
f19083d1ed
commit
e4a2cf5761
|
@ -944,9 +944,7 @@ Init *TGParser::ParseOperation(Record *CurRec, RecTy *ItemType) {
|
|||
|
||||
// If we are doing !listconcat, we should know the type by now
|
||||
if (OpTok == tgtok::XListConcat) {
|
||||
if (VarInit *Arg0 = dyn_cast<VarInit>(InitList[0]))
|
||||
Type = Arg0->getType();
|
||||
else if (ListInit *Arg0 = dyn_cast<ListInit>(InitList[0]))
|
||||
if (TypedInit *Arg0 = dyn_cast<TypedInit>(InitList[0]))
|
||||
Type = Arg0->getType();
|
||||
else {
|
||||
InitList[0]->print(errs());
|
||||
|
|
|
@ -1,18 +1,32 @@
|
|||
// 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 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 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"]>;
|
||||
|
|
Loading…
Reference in New Issue