diff options
| author | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-02-23 10:46:07 +0000 |
|---|---|---|
| committer | Nicolai Haehnle <nhaehnle@gmail.com> | 2018-02-23 10:46:07 +0000 |
| commit | 0243aaf42c6c766ea64868b67357dc761ea95b99 (patch) | |
| tree | 9e3d8f974fdbfe91f1b1d28d30fb3423ec7b6aa1 /llvm/test | |
| parent | 6cf306decae7704640f7d62d617979a88cd46e37 (diff) | |
| download | bcm5719-llvm-0243aaf42c6c766ea64868b67357dc761ea95b99.tar.gz bcm5719-llvm-0243aaf42c6c766ea64868b67357dc761ea95b99.zip | |
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
llvm-svn: 325883
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/TableGen/size.td | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/test/TableGen/size.td b/llvm/test/TableGen/size.td new file mode 100644 index 00000000000..f7061e11079 --- /dev/null +++ b/llvm/test/TableGen/size.td @@ -0,0 +1,34 @@ +// 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"]>; |

