mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
9b9d97f26a
Previously, subtarget features were a bitfield with the underlying type being uint64_t. Since several targets (X86 and ARM, in particular) have hit or were very close to hitting this bound, switching the features to use a bitset. No functional change. The first several times this was committed (e.g. r229831, r233055), it caused several buildbot failures. Apparently the reason for most failures was both clang and gcc's inability to deal with large numbers (> 10K) of bitset constructor calls in tablegen-generated initializers of instruction info tables. This should now be fixed. llvm-svn: 238192
32 lines
882 B
TableGen
32 lines
882 B
TableGen
// RUN: llvm-tblgen -gen-disassembler -I %p/../../include %s | FileCheck %s
|
|
|
|
// Check that we don't generate invalid code of the form "( && Cond2)" when
|
|
// emitting AssemblerPredicate conditions. In the example below, the invalid
|
|
// code would be: "return ( && (Bits & arch::AssemblerCondition2));".
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
def archInstrInfo : InstrInfo { }
|
|
|
|
def arch : Target {
|
|
let InstructionSet = archInstrInfo;
|
|
}
|
|
|
|
def Pred1 : Predicate<"Condition1">;
|
|
def Pred2 : Predicate<"Condition2">,
|
|
AssemblerPredicate<"AssemblerCondition2">;
|
|
|
|
def foo : Instruction {
|
|
let Size = 2;
|
|
let OutOperandList = (outs);
|
|
let InOperandList = (ins);
|
|
field bits<16> Inst;
|
|
let Inst = 0xAAAA;
|
|
let AsmString = "foo";
|
|
field bits<16> SoftFail = 0;
|
|
// This is the important bit:
|
|
let Predicates = [Pred1, Pred2];
|
|
}
|
|
|
|
// CHECK: return (Bits[arch::AssemblerCondition2]);
|