// RUN: llvm-tblgen %s | FileCheck %s | |
// XFAIL: vg_leak | |
class XD { bits<4> Prefix = 11; } | |
// CHECK: Prefix = { 1, 1, 0, 0 }; | |
class XS { bits<4> Prefix = 12; } | |
class VEX { bit hasVEX_4VPrefix = 1; } | |
def xd : XD; | |
class BaseI { | |
bits<4> Prefix = 0; | |
bit hasVEX_4VPrefix = 0; | |
} | |
class I<bits<4> op> : BaseI { | |
bits<4> opcode = op; | |
int val = !if(!eq(Prefix, xd.Prefix), 7, 21); | |
int check = !if(hasVEX_4VPrefix, 0, 10); | |
} | |
multiclass R { | |
def rr : I<4>; | |
} | |
multiclass M { | |
def rm : I<2>; | |
} | |
multiclass Y { | |
defm SS : R, M, XD; | |
// CHECK: Prefix = { 1, 1, 0, 0 }; | |
// CHECK: Prefix = { 1, 1, 0, 0 }; | |
defm SD : R, M, XS; | |
} | |
// CHECK: int check = 0; | |
defm Instr : Y, VEX; | |
// Anonymous defm. | |
multiclass SomeAnonymous<int x> { | |
def rm; | |
def mr; | |
} | |
// These multiclasses shouldn't conflict. | |
defm : SomeAnonymous<1>; | |
defm : SomeAnonymous<2>; |