This patch extends TableGen language with !cond operator.
Instead of embedding !if inside !if which can get cumbersome,
one can now use !cond.
Below is an example to convert an integer 'x' into a string:
!cond(!lt(x,0) : "Negative",
!eq(x,0) : "Zero",
!eq(x,1) : "One,
1 : "MoreThanOne")
Reviewed By: hfinkel, simon_tatham, greened
Differential Revision: https://reviews.llvm.org/D55758
llvm-svn: 352185
39 lines
1.0 KiB
TableGen
39 lines
1.0 KiB
TableGen
// RUN: llvm-tblgen %s | FileCheck %s
|
|
// XFAIL: vg_leak
|
|
|
|
|
|
class A<list<list<int>> vals> {
|
|
list<int> first = vals[0];
|
|
list<int> rest = !cond(!empty(!tail(vals)): vals[0],
|
|
1 : vals[1]);
|
|
}
|
|
|
|
def A_OneEl : A<[[1,2,3]]>;
|
|
// CHECK: def A_OneEl { // A
|
|
// CHECK-NEXT: list<int> first = [1, 2, 3];
|
|
// CHECK-NEXT: list<int> rest = [1, 2, 3];
|
|
// CHECK-NEXT: }
|
|
|
|
def A_TwoEl : A<[[1,2,3], [4,5,6]]>;
|
|
// CHECK: def A_TwoEl { // A
|
|
// CHECK-NEXT: list<int> first = [1, 2, 3];
|
|
// CHECK-NEXT: list<int> rest = [4, 5, 6];
|
|
// CHECK-NEXT: }
|
|
|
|
|
|
class B<list<int> v> {
|
|
list<int> vals = v;
|
|
}
|
|
class BB<list<list<int>> vals> : B<!cond(!empty(!tail(vals)): vals[0], 1 : vals[1])>;
|
|
class BBB<list<list<int>> vals> : BB<vals>;
|
|
|
|
def B_OneEl : BBB<[[1,2,3]]>;
|
|
// CHECK: def B_OneEl { // B BB BBB
|
|
// CHECK-NEXT: list<int> vals = [1, 2, 3];
|
|
// CHECK-NEXT: }
|
|
|
|
def B_TwoEl : BBB<[[1,2,3],[4,5,6]]>;
|
|
// CHECK: def B_TwoEl { // B BB BBB
|
|
// CHECK-NEXT: list<int> vals = [4, 5, 6];
|
|
// CHECK-NEXT: }
|