summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorNicolai Haehnle <nhaehnle@gmail.com>2018-02-23 10:46:07 +0000
committerNicolai Haehnle <nhaehnle@gmail.com>2018-02-23 10:46:07 +0000
commit0243aaf42c6c766ea64868b67357dc761ea95b99 (patch)
tree9e3d8f974fdbfe91f1b1d28d30fb3423ec7b6aa1 /llvm/test
parent6cf306decae7704640f7d62d617979a88cd46e37 (diff)
downloadbcm5719-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.td34
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"]>;
OpenPOWER on IntegriCloud