Index: lib/TableGen/TGLexer.cpp =================================================================== --- lib/TableGen/TGLexer.cpp +++ lib/TableGen/TGLexer.cpp @@ -309,7 +309,7 @@ PrintError(getLoc(), "Could not find include file '" + Filename + "'"); return true; } - +/* DependenciesMapTy::const_iterator Found = Dependencies.find(IncludedFile); if (Found != Dependencies.end()) { PrintError(getLoc(), @@ -318,6 +318,7 @@ "previously included here"); return true; } +*/ Dependencies.insert(std::make_pair(IncludedFile, getLoc())); // Save the line number and lex buffer of the includer. CurBuf = SrcMgr.getMemoryBuffer(CurBuffer)->getBuffer(); Index: lib/Target/X86/Unsupported.td =================================================================== --- lib/Target/X86/Unsupported.td +++ lib/Target/X86/Unsupported.td @@ -0,0 +1,32 @@ +//=- X86ScheduleBtVer2.td - X86 BtVer2 (Jaguar) Scheduling ---*- 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 instructions which are not supported on some CPUs but should be +// described inside the machine model +// +//===----------------------------------------------------------------------===// + +//////////////////////////////////////////////////////////////////////////////// +// AVX2 - unsupported on Jaguar and others... +//////////////////////////////////////////////////////////////////////////////// + +defm : UnsupportedWriteResPair; +defm : UnsupportedWriteResPair; +defm : UnsupportedWriteResPair; +defm : UnsupportedWriteResPair< WriteVarShuffle256>; +defm : UnsupportedWriteResPair; +defm : UnsupportedWriteResPair; + +//////////////////////////////////////////////////////////////////////////////// +// FMA - unsupported on Jaguar and others... +//////////////////////////////////////////////////////////////////////////////// + +defm : UnsupportedWriteResPair; +defm : UnsupportedWriteResPair; +defm : UnsupportedWriteResPair; Index: lib/Target/X86/X86.td =================================================================== --- lib/Target/X86/X86.td +++ lib/Target/X86/X86.td @@ -409,6 +409,8 @@ // X86 processors supported. //===----------------------------------------------------------------------===// +//include "Unsupported.td" + include "X86ScheduleAtom.td" include "X86SchedSandyBridge.td" include "X86SchedHaswell.td" Index: lib/Target/X86/X86Schedule.td =================================================================== --- lib/Target/X86/X86Schedule.td +++ lib/Target/X86/X86Schedule.td @@ -49,6 +49,17 @@ } } +multiclass UnsupportedWriteResPair { + def : WriteRes { + let Unsupported = 1; + let SchedModel = NoSchedModel; + } + def : WriteRes { + let Unsupported = 1; + let SchedModel = NoSchedModel; + } +} + // Multiclass that wraps X86FoldableSchedWrite for each vector width. class X86SchedWriteWidths; // ALU: ALU0, shift/rotate, load/store // SIMD/FP: SIMD ALU, Shuffle,SIMD/FP multiply, divide @@ -260,9 +262,6 @@ defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. -defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. -defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. -defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. @@ -270,8 +269,8 @@ defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. -defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. -defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. +//defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. +//defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. //////////////////////////////////////////////////////////////////////////////// // Conversions. @@ -366,10 +365,10 @@ defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. -defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. -defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. -defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. -defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. +//defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. +//defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. +//defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. +//defm : AtomWriteResPair; // NOTE: Doesn't exist on Atom. //////////////////////////////////////////////////////////////////////////////// // Vector insert/extract operations. Index: lib/Target/X86/X86ScheduleBtVer2.td =================================================================== --- lib/Target/X86/X86ScheduleBtVer2.td +++ lib/Target/X86/X86ScheduleBtVer2.td @@ -30,6 +30,8 @@ let SchedModel = BtVer2Model in { +include "Unsupported.td" + // Jaguar can issue up to 6 micro-ops in one cycle def JALU0 : ProcResource<1>; // Integer Pipe0: integer ALU0 (also handle FP->INT jam) def JALU1 : ProcResource<1>; // Integer Pipe1: integer ALU1/MUL/DIV @@ -314,9 +316,6 @@ defm : JWriteResFpuPair; defm : JWriteResFpuPair; defm : JWriteResYMMPair; -defm : JWriteResFpuPair; // NOTE: Doesn't exist on Jaguar. -defm : JWriteResFpuPair; // NOTE: Doesn't exist on Jaguar. -defm : JWriteResFpuPair; // NOTE: Doesn't exist on Jaguar. defm : JWriteResFpuPair; defm : JWriteResFpuPair; defm : JWriteResYMMPair; @@ -358,8 +357,6 @@ defm : JWriteResYMMPair; defm : JWriteResFpuPair; defm : JWriteResYMMPair; -defm : JWriteResFpuPair; -defm : JWriteResFpuPair; // NOTE: Doesn't exist on Jaguar. //////////////////////////////////////////////////////////////////////////////// // Conversions. @@ -457,10 +454,6 @@ defm : JWriteResFpuPair; // NOTE: Doesn't exist on Jaguar. defm : JWriteResFpuPair; defm : JWriteResYMMPair; -defm : JWriteResFpuPair; -defm : JWriteResFpuPair; // NOTE: Doesn't exist on Jaguar. -defm : JWriteResFpuPair; // NOTE: Doesn't exist on Jaguar. -defm : JWriteResFpuPair; // NOTE: Doesn't exist on Jaguar. //////////////////////////////////////////////////////////////////////////////// // Vector insert/extract operations. Index: utils/TableGen/CodeGenSchedule.cpp =================================================================== --- utils/TableGen/CodeGenSchedule.cpp +++ utils/TableGen/CodeGenSchedule.cpp @@ -1843,6 +1843,8 @@ // Add resources for a SchedWrite to this processor if they don't exist. void CodeGenSchedModels::addWriteRes(Record *ProcWriteResDef, unsigned PIdx) { + if (ProcWriteResDef->getValueAsBit("Unsupported") && !PIdx) + return; assert(PIdx && "don't add resources to an invalid Processor model"); RecVec &WRDefs = ProcModels[PIdx].WriteResDefs;