blob: 223236d20034ea3537961ce9e4b3f8e7545dbce8 [file] [log] [blame]
Reid Kleckneraf7c4452018-06-23 02:02:38 +00001// RUN: llvm-tblgen -gen-intrinsic-impl %s | FileCheck %s
NAKAMURA Takumia22657f2013-11-10 14:26:08 +00002// XFAIL: vg_leak
Andrew Trick2e50b8a2013-10-31 17:18:11 +00003
4class IntrinsicProperty;
Matt Arsenault082879a2017-12-20 19:36:28 +00005class SDNodeProperty;
Andrew Trick2e50b8a2013-10-31 17:18:11 +00006
7class ValueType<int size, int value> {
8 string Namespace = "MVT";
9 int Size = size;
10 int Value = value;
11}
12
13class LLVMType<ValueType vt> {
14 ValueType VT = vt;
15}
16
17class Intrinsic<string name, list<LLVMType> param_types = []> {
18 string LLVMName = name;
19 bit isTarget = 0;
20 string TargetPrefix = "";
21 list<LLVMType> RetTypes = [];
22 list<LLVMType> ParamTypes = param_types;
Matt Arsenaultb9f1dbe2016-02-10 18:40:04 +000023 list<IntrinsicProperty> IntrProperties = [];
Matt Arsenault082879a2017-12-20 19:36:28 +000024 list<SDNodeProperty> Properties = [];
Andrew Trick2e50b8a2013-10-31 17:18:11 +000025}
26
27// isVoid needs to match the definition in ValueTypes.td
Krzysztof Parzyszeka3a55362017-12-14 19:05:21 +000028def isVoid : ValueType<0, 111>; // Produces no value
Andrew Trick2e50b8a2013-10-31 17:18:11 +000029def llvm_vararg_ty : LLVMType<isVoid>; // this means vararg here
30
Joseph Tremoulet16c64792015-09-02 13:36:25 +000031// CHECK: /* 0 */ 0, 29, 0,
Andrew Trick2e50b8a2013-10-31 17:18:11 +000032def int_foo : Intrinsic<"llvm.foo", [llvm_vararg_ty]>;