1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-tblgen %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker// XFAIL: vg_leak 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerclass XD { bits<4> Prefix = 11; } 5*9880d681SAndroid Build Coastguard Worker// CHECK: Prefix = { 1, 1, 0, 0 }; 6*9880d681SAndroid Build Coastguard Workerclass XS { bits<4> Prefix = 12; } 7*9880d681SAndroid Build Coastguard Workerclass VEX { bit hasVEX_4VPrefix = 1; } 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerdef xd : XD; 10*9880d681SAndroid Build Coastguard Worker 11*9880d681SAndroid Build Coastguard Workerclass BaseI { 12*9880d681SAndroid Build Coastguard Worker bits<4> Prefix = 0; 13*9880d681SAndroid Build Coastguard Worker bit hasVEX_4VPrefix = 0; 14*9880d681SAndroid Build Coastguard Worker} 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerclass I<bits<4> op> : BaseI { 17*9880d681SAndroid Build Coastguard Worker bits<4> opcode = op; 18*9880d681SAndroid Build Coastguard Worker int val = !if(!eq(Prefix, xd.Prefix), 7, 21); 19*9880d681SAndroid Build Coastguard Worker int check = !if(hasVEX_4VPrefix, 0, 10); 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workermulticlass R { 23*9880d681SAndroid Build Coastguard Worker def rr : I<4>; 24*9880d681SAndroid Build Coastguard Worker} 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workermulticlass M { 27*9880d681SAndroid Build Coastguard Worker def rm : I<2>; 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workermulticlass Y { 31*9880d681SAndroid Build Coastguard Worker defm SS : R, M, XD; 32*9880d681SAndroid Build Coastguard Worker// CHECK: Prefix = { 1, 1, 0, 0 }; 33*9880d681SAndroid Build Coastguard Worker// CHECK: Prefix = { 1, 1, 0, 0 }; 34*9880d681SAndroid Build Coastguard Worker defm SD : R, M, XS; 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker// CHECK: int check = 0; 38*9880d681SAndroid Build Coastguard Workerdefm Instr : Y, VEX; 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker// Anonymous defm. 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workermulticlass SomeAnonymous<int x> { 44*9880d681SAndroid Build Coastguard Worker def rm; 45*9880d681SAndroid Build Coastguard Worker def mr; 46*9880d681SAndroid Build Coastguard Worker} 47*9880d681SAndroid Build Coastguard Worker 48*9880d681SAndroid Build Coastguard Worker// These multiclasses shouldn't conflict. 49*9880d681SAndroid Build Coastguard Workerdefm : SomeAnonymous<1>; 50*9880d681SAndroid Build Coastguard Workerdefm : SomeAnonymous<2>;