| // RUN: llvm-tblgen %s | grep {\\\[(set} | count 2 | 
 | // RUN: llvm-tblgen %s | grep {\\\[\\\]} | count 2 | 
 | // XFAIL: vg_leak | 
 |  | 
 | class ValueType<int size, int value> { | 
 |   int Size = size; | 
 |   int Value = value; | 
 | } | 
 |  | 
 | def f32  : ValueType<32, 1>;   //  2 x i64 vector value | 
 |  | 
 | class Intrinsic<string name> { | 
 |   string Name = name; | 
 | } | 
 |  | 
 | class Inst<bits<8> opcode, dag oopnds, dag iopnds, string asmstr,  | 
 |            list<dag> pattern> { | 
 |   bits<8> Opcode = opcode; | 
 |   dag OutOperands = oopnds; | 
 |   dag InOperands = iopnds; | 
 |   string AssemblyString = asmstr; | 
 |   list<dag> Pattern = pattern; | 
 | } | 
 |  | 
 | def ops; | 
 | def outs; | 
 | def ins; | 
 |  | 
 | def set; | 
 |  | 
 | // Define registers | 
 | class Register<string n> { | 
 |   string Name = n; | 
 | } | 
 |  | 
 | class RegisterClass<list<ValueType> regTypes, list<Register> regList> { | 
 |   list<ValueType> RegTypes = regTypes; | 
 |   list<Register> MemberList = regList; | 
 | } | 
 |  | 
 | def XMM0: Register<"xmm0">; | 
 | def XMM1: Register<"xmm1">; | 
 | def XMM2: Register<"xmm2">; | 
 | def XMM3: Register<"xmm3">; | 
 | def XMM4: Register<"xmm4">; | 
 | def XMM5: Register<"xmm5">; | 
 | def XMM6: Register<"xmm6">; | 
 | def XMM7: Register<"xmm7">; | 
 | def XMM8:  Register<"xmm8">; | 
 | def XMM9:  Register<"xmm9">; | 
 | def XMM10: Register<"xmm10">; | 
 | def XMM11: Register<"xmm11">; | 
 | def XMM12: Register<"xmm12">; | 
 | def XMM13: Register<"xmm13">; | 
 | def XMM14: Register<"xmm14">; | 
 | def XMM15: Register<"xmm15">; | 
 |  | 
 | def FR32 : RegisterClass<[f32], | 
 |                          [XMM0, XMM1, XMM2, XMM3, XMM4, XMM5, XMM6, XMM7, | 
 |                           XMM8, XMM9, XMM10, XMM11, | 
 |                           XMM12, XMM13, XMM14, XMM15]>; | 
 |  | 
 | class SDNode {} | 
 | def not : SDNode; | 
 |  | 
 | multiclass scalar<bits<8> opcode, string asmstr = "", list<list<dag>> patterns = []> { | 
 |   def SSrr : Inst<opcode, (outs FR32:$dst), (ins FR32:$src), | 
 |                   !strconcat(asmstr, "\t$dst, $src"), | 
 |                   !if(!empty(patterns),[]<dag>,patterns[0])>; | 
 |   def SSrm : Inst<opcode, (outs FR32:$dst), (ins FR32:$src), | 
 |                   !strconcat(asmstr, "\t$dst, $src"), | 
 |                   !if(!empty(patterns),[]<dag>,!if(!empty(!tail(patterns)),patterns[0],patterns[1]))>; | 
 | } | 
 |  | 
 | multiclass vscalar<bits<8> opcode, string asmstr = "", list<list<dag>> patterns = []> { | 
 |   def V#NAME#SSrr : Inst<opcode, (outs FR32:$dst), (ins FR32:$src), | 
 |                   !strconcat(asmstr, "\t$dst, $src"), | 
 |                   !if(!empty(patterns),[]<dag>,patterns[0])>; | 
 |   def V#NAME#SSrm : Inst<opcode, (outs FR32:$dst), (ins FR32:$src), | 
 |                   !strconcat(asmstr, "\t$dst, $src"), | 
 |                   !if(!empty(patterns),[]<dag>,!if(!empty(!tail(patterns)),patterns[0],patterns[1]))>; | 
 | } | 
 |  | 
 | multiclass myscalar<bits<8> opcode, string asmstr = "", list<list<dag>> patterns = []> : | 
 |   scalar<opcode, asmstr, patterns>, | 
 |   vscalar<opcode, asmstr, patterns>; | 
 |  | 
 | defm NOT : myscalar<0x10, "not", [[], [(set FR32:$dst, (f32 (not FR32:$src)))]]>; |