1// RUN: llvm-tblgen %s | FileCheck %s 2// RUN: not llvm-tblgen -DERROR1 %s 2>&1 | FileCheck --check-prefix=ERROR1 %s 3 4defvar EmptyList = []<string>; 5defvar OneList = ["foo"]; 6defvar WordList = ["foo", "bar", "zoo", "foo", "snork", "snork", "quux"]; 7 8class Predicate; 9def pred1 : Predicate; 10def pred2 : Predicate; 11def pred3 : Predicate; 12def pred4 : Predicate; 13def pred5 : Predicate; 14 15class DeduplicatePredList<list<Predicate> predlist, Predicate pred> { 16 list<Predicate> ret = 17 !listconcat([pred], !filter(item, predlist, 18 !ne(!cast<string>(item), !cast<string>(pred)))); 19} 20 21// CHECK: def rec1 22// CHECK: list1 = []; 23// CHECK: list2 = []; 24// CHECK: list3 = ["foo"]; 25// CHECK: list4 = []; 26// CHECK: list5 = ["foo", "bar", "zoo", "foo", "snork", "snork", "quux"]; 27// CHECK: list6 = []; 28 29def rec1 { 30 list<string> list1 = !filter(item, EmptyList, true); 31 list<string> list2 = !filter(item, EmptyList, false); 32 list<string> list3 = !filter(item, OneList, true); 33 list<string> list4 = !filter(item, OneList, false); 34 list<string> list5 = !filter(item, WordList, true); 35 list<string> list6 = !filter(item, WordList, false); 36} 37 38// CHECK: def rec2 39// CHECK: list1 = ["foo", "foo"]; 40// CHECK: list2 = ["bar", "zoo", "snork", "snork", "quux"]; 41// CHECK: list3 = ["snork", "snork", "quux"]; 42 43def rec2 { 44 list<string> list1 = !filter(item, WordList, !eq(item, "foo")); 45 list<string> list2 = !filter(item, WordList, !ne(item, "foo")); 46 list<string> list3 = !filter(item, WordList, !ge(!size(item), 4)); 47} 48 49// CHECK: def rec3 50// CHECK: list1 = [4, 5, 6, 7, 8, 9, 10]; 51// CHECK: list2 = [4, 5, 6, 7, 8]; 52 53def rec3 { 54 list<int> list1 = !filter(num, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], !gt(num, 3)); 55 list<int> list2 = !filter(num, list1, !lt(num, 9)); 56} 57 58// CHECK: def rec4 59// CHECK: duplist = [pred1, pred2, pred1, pred3, pred4, pred1, pred5]; 60// CHECK: deduplist = [pred1, pred2, pred3, pred4, pred5]; 61 62def rec4 { 63 list<Predicate> duplist = [pred1, pred2, pred1, pred3, pred4, pred1, pred5]; 64 list<Predicate> deduplist = DeduplicatePredList<duplist, pred1>.ret; 65} 66 67#ifdef ERROR1 68 69// ERROR1: could not be fully resolved 70 71def rec9 { 72 list<string> list1 = !filter(item, WordList, !if(true, "oops!", "wrong!")); 73} 74 75#endif 76