diff options
Diffstat (limited to 'lib/Target/X86/X86SchedPredicates.td')
-rw-r--r-- | lib/Target/X86/X86SchedPredicates.td | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/Target/X86/X86SchedPredicates.td b/lib/Target/X86/X86SchedPredicates.td new file mode 100644 index 000000000000..27aaeb193583 --- /dev/null +++ b/lib/Target/X86/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>; |