
Use the predicate condition instead of checkFeatures in *GenDAGISel.inc. This makes the code similar to isel pattern predicates. checkFeatures is still used by code created by SubtargetEmitter so we can't remove the string. Backends need to be careful to keep the string and predicates in sync, but I don't think that's a big issue. I haven't measured it, but this should be a compile time improvement for isel since we don't have to do any of the string processing that's inside checkFeatures. Reviewed By: kparzysz Differential Revision: https://reviews.llvm.org/D146012
31 lines
1.1 KiB
TableGen
31 lines
1.1 KiB
TableGen
// RUN: not --crash llvm-tblgen -gen-dag-isel -I %p/../../include %s 2>&1 | FileCheck %s
|
|
|
|
// The HwModeSelect class is intended to serve as a base class for other
|
|
// classes that are then used to select a value based on the HW mode.
|
|
// It contains a list of HW modes, and a derived class should provide a
|
|
// list of corresponding values.
|
|
// These two lists must have the same size. Make sure that a violation of
|
|
// this requirement is diagnosed.
|
|
|
|
include "llvm/Target/Target.td"
|
|
|
|
def TestTargetInstrInfo : InstrInfo;
|
|
|
|
def TestTarget : Target {
|
|
let InstructionSet = TestTargetInstrInfo;
|
|
}
|
|
|
|
def TestReg : Register<"testreg">;
|
|
def TestClass : RegisterClass<"TestTarget", [i32], 32, (add TestReg)>;
|
|
|
|
def HasFeat1 : Predicate<"Subtarget->hasFeat1()">;
|
|
def HasFeat2 : Predicate<"Subtarget->hasFeat2()">;
|
|
|
|
def TestMode1 : HwMode<"+feat1", [HasFeat1]>;
|
|
def TestMode2 : HwMode<"+feat2", [HasFeat2]>;
|
|
|
|
def BadDef : ValueTypeByHwMode<[TestMode1, TestMode2, DefaultMode],
|
|
[i8, i16, i32, i64]>;
|
|
|
|
// CHECK: error: in record BadDef derived from HwModeSelect: the lists Modes and Objects should have the same size
|