diff options
| author | David Goodwin <david_goodwin@apple.com> | 2009-08-10 15:56:13 +0000 |
|---|---|---|
| committer | David Goodwin <david_goodwin@apple.com> | 2009-08-10 15:56:13 +0000 |
| commit | 62e053b7901a0a38701c9d87078119fdaa56058f (patch) | |
| tree | 5edc847bf46cef41c0031bb19116f2ad329529ad /llvm/lib | |
| parent | 6021b4dccc6b134a4ee91ba5481a18c063625f1b (diff) | |
| download | bcm5719-llvm-62e053b7901a0a38701c9d87078119fdaa56058f.tar.gz bcm5719-llvm-62e053b7901a0a38701c9d87078119fdaa56058f.zip | |
Checkpoint scheduling itinerary changes.
llvm-svn: 78564
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMSchedule.td | 20 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMScheduleV6.td | 20 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMScheduleV7.td | 41 |
3 files changed, 53 insertions, 28 deletions
diff --git a/llvm/lib/Target/ARM/ARMSchedule.td b/llvm/lib/Target/ARM/ARMSchedule.td index 6e3b00e484c..a5ca773ef1d 100644 --- a/llvm/lib/Target/ARM/ARMSchedule.td +++ b/llvm/lib/Target/ARM/ARMSchedule.td @@ -10,11 +10,10 @@ //===----------------------------------------------------------------------===// // Functional units across ARM processors // -def FU_iALU : FuncUnit; // Integer alu unit -def FU_iLdSt : FuncUnit; // Integer load / store unit -def FU_FpALU : FuncUnit; // FP alu unit -def FU_FpLdSt : FuncUnit; // FP load / store unit -def FU_Br : FuncUnit; // Branch unit +def FU_Pipe0 : FuncUnit; // pipeline 0 issue +def FU_Pipe1 : FuncUnit; // pipeline 1 issue +def FU_LdSt0 : FuncUnit; // pipeline 0 load/store +def FU_LdSt1 : FuncUnit; // pipeline 1 load/store //===----------------------------------------------------------------------===// // Instruction Itinerary classes used for ARM @@ -30,7 +29,16 @@ def IIC_Br : InstrItinClass; //===----------------------------------------------------------------------===// // Processor instruction itineraries. -def GenericItineraries : ProcessorItineraries<[]>; +def GenericItineraries : ProcessorItineraries<[ + InstrItinData<IIC_iALU , [InstrStage<1, [FU_Pipe0]>]>, + InstrItinData<IIC_iLoad , [InstrStage<1, [FU_Pipe0]>, InstrStage<1, [FU_LdSt0]>]>, + InstrItinData<IIC_fpLoad , [InstrStage<1, [FU_Pipe0]>, InstrStage<1, [FU_LdSt0]>]>, + InstrItinData<IIC_iStore , [InstrStage<1, [FU_Pipe0]>]>, + InstrItinData<IIC_fpStore , [InstrStage<1, [FU_Pipe0]>]>, + InstrItinData<IIC_fpALU , [InstrStage<1, [FU_Pipe0]>]>, + InstrItinData<IIC_Br , [InstrStage<1, [FU_Pipe0]>]> +]>; + include "ARMScheduleV6.td" include "ARMScheduleV7.td" diff --git a/llvm/lib/Target/ARM/ARMScheduleV6.td b/llvm/lib/Target/ARM/ARMScheduleV6.td index 0cc5c36e5e6..f0b8116a038 100644 --- a/llvm/lib/Target/ARM/ARMScheduleV6.td +++ b/llvm/lib/Target/ARM/ARMScheduleV6.td @@ -11,12 +11,18 @@ // //===----------------------------------------------------------------------===// +// Single issue pipeline so every itinerary starts with FU_pipe0 def V6Itineraries : ProcessorItineraries<[ - InstrItinData<IIC_iALU , [InstrStage<1, [FU_iALU]>]>, - InstrItinData<IIC_iLoad , [InstrStage<2, [FU_iLdSt]>]>, - InstrItinData<IIC_iStore , [InstrStage<1, [FU_iLdSt]>]>, - InstrItinData<IIC_fpALU , [InstrStage<6, [FU_FpALU]>]>, - InstrItinData<IIC_fpLoad , [InstrStage<2, [FU_FpLdSt]>]>, - InstrItinData<IIC_fpStore , [InstrStage<1, [FU_FpLdSt]>]>, - InstrItinData<IIC_Br , [InstrStage<3, [FU_Br]>]> + // single-cycle integer ALU + InstrItinData<IIC_iALU , [InstrStage<1, [FU_Pipe0]>]>, + // loads have an extra cycle of latency, but are fully pipelined + InstrItinData<IIC_iLoad , [InstrStage<1, [FU_Pipe0]>, InstrStage<1, [FU_LdSt0]>]>, + InstrItinData<IIC_fpLoad , [InstrStage<1, [FU_Pipe0]>, InstrStage<1, [FU_LdSt0]>]>, + // fully-pipelined stores + InstrItinData<IIC_iStore , [InstrStage<1, [FU_Pipe0]>]>, + InstrItinData<IIC_fpStore , [InstrStage<1, [FU_Pipe0]>]>, + // fp ALU is not pipelined + InstrItinData<IIC_fpALU , [InstrStage<6, [FU_Pipe0]>]>, + // no delay slots, so the latency of a branch is unimportant + InstrItinData<IIC_Br , [InstrStage<1, [FU_Pipe0]>]> ]>; diff --git a/llvm/lib/Target/ARM/ARMScheduleV7.td b/llvm/lib/Target/ARM/ARMScheduleV7.td index 328bb98fde5..30360bc9c41 100644 --- a/llvm/lib/Target/ARM/ARMScheduleV7.td +++ b/llvm/lib/Target/ARM/ARMScheduleV7.td @@ -11,23 +11,34 @@ // //===----------------------------------------------------------------------===// +// Single issue pipeline so every itinerary starts with FU_Pipe0 def V7Itineraries : ProcessorItineraries<[ - InstrItinData<IIC_iALU , [InstrStage<1, [FU_iALU]>]>, - InstrItinData<IIC_iLoad , [InstrStage<2, [FU_iLdSt]>]>, - InstrItinData<IIC_iStore , [InstrStage<1, [FU_iLdSt]>]>, - InstrItinData<IIC_fpALU , [InstrStage<6, [FU_FpALU]>]>, - InstrItinData<IIC_fpLoad , [InstrStage<2, [FU_FpLdSt]>]>, - InstrItinData<IIC_fpStore , [InstrStage<1, [FU_FpLdSt]>]>, - InstrItinData<IIC_Br , [InstrStage<3, [FU_Br]>]> + // single-cycle integer ALU + InstrItinData<IIC_iALU , [InstrStage<1, [FU_Pipe0]>]>, + // loads have an extra cycle of latency, but are fully pipelined + InstrItinData<IIC_iLoad , [InstrStage<1, [FU_Pipe0]>, InstrStage<1, [FU_LdSt0]>]>, + InstrItinData<IIC_fpLoad , [InstrStage<1, [FU_Pipe0]>, InstrStage<1, [FU_LdSt0]>]>, + // fully-pipelined stores + InstrItinData<IIC_iStore , [InstrStage<1, [FU_Pipe0]>]>, + InstrItinData<IIC_fpStore , [InstrStage<1, [FU_Pipe0]>]>, + // fp ALU is not pipelined + InstrItinData<IIC_fpALU , [InstrStage<6, [FU_Pipe0]>]>, + // no delay slots, so the latency of a branch is unimportant + InstrItinData<IIC_Br , [InstrStage<1, [FU_Pipe0]>]> ]>; - +// Dual issue pipeline so every itinerary starts with FU_Pipe0 | FU_Pipe1 def CortexA8Itineraries : ProcessorItineraries<[ - InstrItinData<IIC_iALU , [InstrStage<1, [FU_iALU]>]>, - InstrItinData<IIC_iLoad , [InstrStage<2, [FU_iLdSt]>]>, - InstrItinData<IIC_iStore , [InstrStage<1, [FU_iLdSt]>]>, - InstrItinData<IIC_fpALU , [InstrStage<6, [FU_FpALU]>]>, - InstrItinData<IIC_fpLoad , [InstrStage<2, [FU_FpLdSt]>]>, - InstrItinData<IIC_fpStore , [InstrStage<1, [FU_FpLdSt]>]>, - InstrItinData<IIC_Br , [InstrStage<3, [FU_Br]>]> + // single-cycle integer ALU + InstrItinData<IIC_iALU , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>]>, + // loads have an extra cycle of latency, but are fully pipelined + InstrItinData<IIC_iLoad , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>, InstrStage<1, [FU_LdSt0]>]>, + InstrItinData<IIC_fpLoad , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>, InstrStage<1, [FU_LdSt0]>]>, + // fully-pipelined stores + InstrItinData<IIC_iStore , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>]>, + InstrItinData<IIC_fpStore , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>]>, + // fp ALU is not pipelined + InstrItinData<IIC_fpALU , [InstrStage<6, [FU_Pipe0, FU_Pipe1]>]>, + // no delay slots, so the latency of a branch is unimportant + InstrItinData<IIC_Br , [InstrStage<1, [FU_Pipe0, FU_Pipe1]>]> ]>; |

