llvm/test/TableGen/size.td
Nicolai Haehnle c34350228e TableGen: Add !size operation
Summary:
Returns the size of a list. I have found this to be rather useful in some
development for the AMDGPU backend where we could simplify our .td files
by concatenating list<LLVMType> for complex intrinsics. Doing so requires
us to compute the position argument for LLVMMatchType.

Basically, the usage is in a pattern that looks somewhat like this:

    list<LLVMType> argtypes =
        !listconcat(base,
                    [llvm_any_ty, LLVMMatchType<!size(base)>]);

Change-Id: I360a0b000fd488d18bea412228230fd93722bd2c

Reviewers: arsenm, craig.topper, tra, MartinO

Subscribers: wdng, llvm-commits, tpr

Differential Revision: https://reviews.llvm.org/D43553

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@325883 91177308-0d34-0410-b5e6-96231b3b80d8
2018-02-23 10:46:07 +00:00

35 lines
488 B
TableGen

// RUN: llvm-tblgen %s | FileCheck %s
// XFAIL: vg_leak
// CHECK: --- Defs ---
// CHECK: def A1 {
// CHECK: int Val = 0;
// CHECK: }
// CHECK: def A2 {
// CHECK: int Val = 3;
// CHECK: }
// CHECK: def B1 {
// CHECK: int Val = 0;
// CHECK: }
// CHECK: def B2 {
// CHECK: int Val = 2;
// CHECK: }
class A<list<int> L> {
int Val = !size(L);
}
class B<list<string> L> {
int Val = !size(L);
}
def A1 : A<[]>;
def A2 : A<[1, 1, 2]>;
def B1 : B<[]>;
def B2 : B<["a", "b"]>;