Push processor descriptions to the top of target and add command line info.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23820 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Laskey 2005-10-19 13:34:52 +00:00
parent 2f041d49a9
commit 0de8796e68
7 changed files with 80 additions and 23 deletions

View File

@ -7,20 +7,11 @@
//
//===----------------------------------------------------------------------===//
#include "../TargetSchedule.td"
//===----------------------------------------------------------------------===//
// PowerPC chips sets supported by scheduling (Apple naming)
//
def G3 : Processor;
def G4 : Processor;
def G4Plus : Processor;
def G5 : Processor;
#include "../Target.td"
//===----------------------------------------------------------------------===//
// Functional units across PowerPC chips sets
//
def NoUnit : FuncUnit; // Instruction not supported on chip set
def BPU : FuncUnit; // Branch unit
def SLU : FuncUnit; // Store/load unit
def SRU : FuncUnit; // special register unit
@ -518,3 +509,38 @@ def VecVSR : InstrItinClass;
// xoris IntGeneral
//
//===----------------------------------------------------------------------===//
// PowerPC Subtarget features.
//
def F64Bit : SubtargetFeature<"64bit",
"Should 64 bit instructions be used">;
def F64BitRegs : SubtargetFeature<"64bitregs",
"Should 64 bit registers be used">;
def FAltivec : SubtargetFeature<"altivec",
"Should Altivec instructions be used">;
def FGPUL : SubtargetFeature<"gpul",
"Should GPUL instructions be used">;
def FFSQRT : SubtargetFeature<"fsqrt",
"Should the fsqrt instruction be used">;
//===----------------------------------------------------------------------===//
// PowerPC chips sets supported
//
def : Processor<"601", G3Itineraries, []>;
def : Processor<"602", G3Itineraries, []>;
def : Processor<"603", G3Itineraries, []>;
def : Processor<"604", G3Itineraries, []>;
def : Processor<"750", G3Itineraries, []>;
def : Processor<"7400", G4Itineraries, [FAltivec]>;
def : Processor<"g4", G4Itineraries, [FAltivec]>;
def : Processor<"7450", G4PlusItineraries, [FAltivec]>;
def : Processor<"g4+", G4PlusItineraries, [FAltivec]>;
def : Processor<"970", G5Itineraries,
[FAltivec, FGPUL, FFSQRT, F64Bit, F64BitRegs]>;
def : Processor<"g5", G5Itineraries,
[FAltivec, FGPUL, FFSQRT, F64Bit, F64BitRegs]>;

View File

@ -12,7 +12,7 @@
//===----------------------------------------------------------------------===//
def G3Itineraries : ProcessorItineraries<G3, [
def G3Itineraries : ProcessorItineraries<[
InstrItinData<IntGeneral , [InstrStage<1, [IU1, IU2]>]>,
InstrItinData<IntCompare , [InstrStage<1, [IU1, IU2]>]>,
InstrItinData<IntDivW , [InstrStage<19, [IU1]>]>,

View File

@ -11,7 +11,7 @@
//
//===----------------------------------------------------------------------===//
def G4Itineraries : ProcessorItineraries<G4, [
def G4Itineraries : ProcessorItineraries<[
InstrItinData<IntGeneral , [InstrStage<1, [IU1, IU2]>]>,
InstrItinData<IntCompare , [InstrStage<1, [IU1, IU2]>]>,
InstrItinData<IntDivW , [InstrStage<19, [IU1]>]>,

View File

@ -11,7 +11,7 @@
//
//===----------------------------------------------------------------------===//
def G4PlusItineraries : ProcessorItineraries<G4Plus, [
def G4PlusItineraries : ProcessorItineraries<[
InstrItinData<IntGeneral , [InstrStage<1, [IU1, IU2, IU3, IU4]>]>,
InstrItinData<IntCompare , [InstrStage<1, [IU1, IU2, IU3, IU4]>]>,
InstrItinData<IntDivW , [InstrStage<23, [IU2]>]>,

View File

@ -11,7 +11,7 @@
//
//===----------------------------------------------------------------------===//
def G5Itineraries : ProcessorItineraries<G5, [
def G5Itineraries : ProcessorItineraries<[
InstrItinData<IntGeneral , [InstrStage<2, [IU1, IU2]>]>,
InstrItinData<IntCompare , [InstrStage<3, [IU1, IU2]>]>,
InstrItinData<IntDivD , [InstrStage<68, [IU1]>]>,

View File

@ -241,6 +241,45 @@ class Target {
list<AsmWriter> AssemblyWriters = [DefaultAsmWriter];
}
//===----------------------------------------------------------------------===//
// Pull in the common support for scheduling
//
include "../TargetSchedule.td"
//===----------------------------------------------------------------------===//
// SubtargetFeature - A characteristic of the chip set.
//
class SubtargetFeature<string n, string d> {
// Name - Feature name. Used by command line (-mattr=) to determine the
// appropriate target chip.
//
string Name = n;
// Desc - Feature description. Used by command line (-mattr=) to display help
// information.
//
string Desc = d;
}
//===----------------------------------------------------------------------===//
// Processor chip sets - These values represent each of the chip sets supported
// by the scheduler. Each Processor definition requires corresponding
// instruction itineraries.
//
class Processor<string n, ProcessorItineraries pi, list<SubtargetFeature> f> {
// Name - Chip set name. Used by command line (-mcpu=) to determine the
// appropriate target chip.
//
string Name = n;
// ProcItin - The scheduling information for the target processor.
//
ProcessorItineraries ProcItin = pi;
// Features - list of
list<SubtargetFeature> Features;
}
//===----------------------------------------------------------------------===//
// Pull in the common support for DAG isel generation
//

View File

@ -12,13 +12,6 @@
//
//===----------------------------------------------------------------------===//
//===----------------------------------------------------------------------===//
// Processor chip sets - These values represent each of the chip sets supported
// by the scheduler. Each Processor definition requires corresponding
// instruction itineraries.
//
class Processor;
//===----------------------------------------------------------------------===//
// Processor functional unit - These values represent the function units
// available across all chip sets for the target. Eg., IntUnit, FPUnit, ...
@ -68,7 +61,6 @@ class InstrItinData<InstrItinClass Class, list<InstrStage> stages> {
// Processor itineraries - These values represent the set of all itinerary
// classes for a given chip set.
//
class ProcessorItineraries<Processor proc, list<InstrItinData> iid> {
Processor Proc = proc;
class ProcessorItineraries<list<InstrItinData> iid> {
list<InstrItinData> IID = iid;
}