From af1a266670d040d2f4083ff309d732d648afba2a Mon Sep 17 00:00:00 2001 From: Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com> Date: Tue, 10 Oct 2023 14:33:42 +0000 Subject: Add submodule dependency files Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec --- .../tablegen/X86/back/X86SchedPredicates.td | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 capstone/suite/synctools/tablegen/X86/back/X86SchedPredicates.td (limited to 'capstone/suite/synctools/tablegen/X86/back/X86SchedPredicates.td') diff --git a/capstone/suite/synctools/tablegen/X86/back/X86SchedPredicates.td b/capstone/suite/synctools/tablegen/X86/back/X86SchedPredicates.td new file mode 100644 index 000000000..27aaeb193 --- /dev/null +++ b/capstone/suite/synctools/tablegen/X86/back/X86SchedPredicates.td @@ -0,0 +1,49 @@ +//===-- X86SchedPredicates.td - X86 Scheduling Predicates --*- tablegen -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines scheduling predicate definitions that are common to +// all X86 subtargets. +// +//===----------------------------------------------------------------------===// + +// A predicate used to identify dependency-breaking instructions that clear the +// content of the destination register. Note that this predicate only checks if +// input registers are the same. This predicate doesn't make any assumptions on +// the expected instruction opcodes, because different processors may implement +// different zero-idioms. +def ZeroIdiomPredicate : CheckSameRegOperand<1, 2>; + +// A predicate used to check if an instruction is a LEA, and if it uses all +// three source operands: base, index, and offset. +def IsThreeOperandsLEAPredicate: CheckAll<[ + CheckOpcode<[LEA32r, LEA64r, LEA64_32r, LEA16r]>, + + // isRegOperand(Base) + CheckIsRegOperand<1>, + CheckNot<CheckInvalidRegOperand<1>>, + + // isRegOperand(Index) + CheckIsRegOperand<3>, + CheckNot<CheckInvalidRegOperand<3>>, + + // hasLEAOffset(Offset) + CheckAny<[ + CheckAll<[ + CheckIsImmOperand<4>, + CheckNot<CheckZeroOperand<4>> + ]>, + CheckNonPortable<"MI.getOperand(4).isGlobal()"> + ]> +]>; + +// This predicate evaluates to true only if the input machine instruction is a +// 3-operands LEA. Tablegen automatically generates a new method for it in +// X86GenInstrInfo. +def IsThreeOperandsLEAFn : + TIIPredicate<"X86", "isThreeOperandsLEA", IsThreeOperandsLEAPredicate>; -- cgit