From 2eeeff83717498be1d7e52e2ef221e8d2f7df42d Mon Sep 17 00:00:00 2001 From: Anton Korobeynikov Date: Wed, 7 Apr 2010 18:19:18 +0000 Subject: [PATCH] Some bits of A9 scheduling: VFP git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100643 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARM.td | 3 +- lib/Target/ARM/ARMScheduleV7.td | 100 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/lib/Target/ARM/ARM.td b/lib/Target/ARM/ARM.td index 8d9c62253cd..b4dec0cfd12 100644 --- a/lib/Target/ARM/ARM.td +++ b/lib/Target/ARM/ARM.td @@ -124,7 +124,8 @@ def : Processor<"arm1156t2f-s", ARMV6Itineraries, def : Processor<"cortex-a8", CortexA8Itineraries, [ArchV7A, FeatureThumb2, FeatureNEON, FeatureHasSlowVMLx, FeatureNEONForFP]>; -def : ProcNoItin<"cortex-a9", [ArchV7A, FeatureThumb2, FeatureNEON]>; +def : Processor<"cortex-a9", CortexA9Itineraries, + [ArchV7A, FeatureThumb2, FeatureNEON]>; //===----------------------------------------------------------------------===// // Register File Description diff --git a/lib/Target/ARM/ARMScheduleV7.td b/lib/Target/ARM/ARMScheduleV7.td index bbbf4139756..b121045dd5b 100644 --- a/lib/Target/ARM/ARMScheduleV7.td +++ b/lib/Target/ARM/ARMScheduleV7.td @@ -585,3 +585,103 @@ def CortexA8Itineraries : ProcessorItineraries<[ InstrStage<1, [FU_NPipe], 0>, InstrStage<2, [FU_NLSPipe]>], [4, 1, 2, 2, 3, 3, 1]> ]>; + +// +// Ad-hoc scheduling information derived from pretty vague "Cortex-A9 Technical +// Reference Manual". +// +// Dual issue pipeline represented by FU_Pipe0 | FU_Pipe1 +// +def CortexA9Itineraries : ProcessorItineraries<[ + + // VFP + // Issue through integer pipeline, and execute in NEON unit. + // + + // FP Special Register to Integer Register File Move + InstrItinData, + InstrStage<1, [FU_NPipe]>]>, + // + // Single-precision FP Unary + InstrItinData, + InstrStage<1, [FU_NPipe]>], [1, 1]>, + // + // Double-precision FP Unary + InstrItinData, + InstrStage<1, [FU_NPipe]>], [1, 1]>, + + // + // Single-precision FP Compare + InstrItinData, + InstrStage<1, [FU_NPipe]>], [1, 1]>, + // + // Double-precision FP Compare + InstrItinData, + InstrStage<1, [FU_NPipe]>], [1, 1]>, + // + // Single to Double FP Convert + InstrItinData, + InstrStage<1, [FU_NPipe]>], [4, 1]>, + // + // Double to Single FP Convert + InstrItinData, + InstrStage<1, [FU_NPipe]>], [4, 1]>, + // + // Single-Precision FP to Integer Convert + InstrItinData, + InstrStage<1, [FU_NPipe]>], [4, 1]>, + // + // Double-Precision FP to Integer Convert + InstrItinData, + InstrStage<1, [FU_NPipe]>], [4, 1]>, + // + // Integer to Single-Precision FP Convert + InstrItinData, + InstrStage<1, [FU_NPipe]>], [4, 1]>, + // + // Integer to Double-Precision FP Convert + InstrItinData, + InstrStage<1, [FU_NPipe]>], [4, 1]>, + // + // Single-precision FP ALU + InstrItinData, + InstrStage<1, [FU_NPipe]>], [4, 1, 1]>, + // + // Double-precision FP ALU + InstrItinData, + InstrStage<1, [FU_NPipe]>], [4, 1, 1]>, + // + // Single-precision FP Multiply + InstrItinData, + InstrStage<1, [FU_NPipe]>], [5, 1, 1]>, + // + // Double-precision FP Multiply + InstrItinData, + InstrStage<2, [FU_NPipe]>], [6, 1, 1]>, + // + // Single-precision FP MAC + InstrItinData, + InstrStage<1, [FU_NPipe]>], [8, 0, 1, 1]>, + // + // Double-precision FP MAC + InstrItinData, + InstrStage<2, [FU_NPipe]>], [9, 0, 1, 1]>, + // + // Single-precision FP DIV + InstrItinData, + InstrStage<10, [FU_NPipe]>], [15, 1, 1]>, + // + // Double-precision FP DIV + InstrItinData, + InstrStage<20, [FU_NPipe]>], [25, 1, 1]>, + // + // Single-precision FP SQRT + InstrItinData, + InstrStage<13, [FU_NPipe]>], [17, 1]>, + // + // Double-precision FP SQRT + InstrItinData, + InstrStage<28, [FU_NPipe]>], [32, 1]> +]>; + + -- 2.11.0