xref: /aosp_15_r20/external/llvm/test/TableGen/AsmPredicateCondsEmission.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker// RUN: llvm-tblgen -gen-disassembler -I %p/../../include %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker// Check that we don't generate invalid code of the form "( && Cond2)" when
4*9880d681SAndroid Build Coastguard Worker// emitting AssemblerPredicate conditions. In the example below, the invalid
5*9880d681SAndroid Build Coastguard Worker// code would be: "return ( && (Bits & arch::AssemblerCondition2));".
6*9880d681SAndroid Build Coastguard Worker
7*9880d681SAndroid Build Coastguard Workerinclude "llvm/Target/Target.td"
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Workerdef archInstrInfo : InstrInfo { }
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Workerdef arch : Target {
12*9880d681SAndroid Build Coastguard Worker  let InstructionSet = archInstrInfo;
13*9880d681SAndroid Build Coastguard Worker}
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerdef Pred1 : Predicate<"Condition1">;
16*9880d681SAndroid Build Coastguard Workerdef Pred2 : Predicate<"Condition2">,
17*9880d681SAndroid Build Coastguard Worker            AssemblerPredicate<"AssemblerCondition2">;
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerdef foo : Instruction {
20*9880d681SAndroid Build Coastguard Worker  let Size = 2;
21*9880d681SAndroid Build Coastguard Worker  let OutOperandList = (outs);
22*9880d681SAndroid Build Coastguard Worker  let InOperandList = (ins);
23*9880d681SAndroid Build Coastguard Worker  field bits<16> Inst;
24*9880d681SAndroid Build Coastguard Worker  let Inst = 0xAAAA;
25*9880d681SAndroid Build Coastguard Worker  let AsmString = "foo";
26*9880d681SAndroid Build Coastguard Worker  field bits<16> SoftFail = 0;
27*9880d681SAndroid Build Coastguard Worker  // This is the important bit:
28*9880d681SAndroid Build Coastguard Worker  let Predicates = [Pred1, Pred2];
29*9880d681SAndroid Build Coastguard Worker}
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker// CHECK: return (Bits[arch::AssemblerCondition2]);
32