//==- AArch64SchedFalkor.td - Falkor Scheduling Definitions -*- 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 the machine model for Qualcomm Falkor to support // instruction scheduling and other instruction cost heuristics. // //===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===// // Define the SchedMachineModel and provide basic properties for coarse grained // instruction cost model. def FalkorModel : SchedMachineModel { let IssueWidth = 8; // 8 uops are dispatched per cycle. let MicroOpBufferSize = 128; // Out-of-order with temporary unified issue buffer. let LoopMicroOpBufferSize = 16; let LoadLatency = 3; // Optimistic load latency. let MispredictPenalty = 11; // Minimum branch misprediction penalty. let CompleteModel = 1; } //===----------------------------------------------------------------------===// // Define each kind of processor resource and number available on Falkor. let SchedModel = FalkorModel in { def FalkorUnitB : ProcResource<1>; // Branch def FalkorUnitLD : ProcResource<1>; // Load pipe def FalkorUnitSD : ProcResource<1>; // Store data def FalkorUnitST : ProcResource<1>; // Store pipe def FalkorUnitX : ProcResource<1>; // Complex arithmetic def FalkorUnitY : ProcResource<1>; // Simple arithmetic def FalkorUnitZ : ProcResource<1>; // Simple arithmetic def FalkorUnitVSD : ProcResource<1>; // Vector store data def FalkorUnitVX : ProcResource<1>; // Vector X-pipe def FalkorUnitVY : ProcResource<1>; // Vector Y-pipe def FalkorUnitGTOV : ProcResource<1>; // Scalar to Vector def FalkorUnitVTOG : ProcResource<1>; // Vector to Scalar // Define the resource groups. def FalkorUnitXY : ProcResGroup<[FalkorUnitX, FalkorUnitY]>; def FalkorUnitXYZ : ProcResGroup<[FalkorUnitX, FalkorUnitY, FalkorUnitZ]>; def FalkorUnitXYZB : ProcResGroup<[FalkorUnitX, FalkorUnitY, FalkorUnitZ, FalkorUnitB]>; def FalkorUnitZB : ProcResGroup<[FalkorUnitZ, FalkorUnitB]>; def FalkorUnitVXVY : ProcResGroup<[FalkorUnitVX, FalkorUnitVY]>; } //===----------------------------------------------------------------------===// // Map the target-defined scheduler read/write resources and latency for // Falkor. let SchedModel = FalkorModel in { def : WriteRes { let Latency = 1; } def : WriteRes { let Latency = 1; } def : WriteRes { let Latency = 1; let NumMicroOps = 2; } def : WriteRes { let Latency = 2; let NumMicroOps = 2; } def : WriteRes { let Latency = 2; let NumMicroOps = 2; } def : WriteRes { let Latency = 1; } def : WriteRes { let Latency = 8; let NumMicroOps = 2; } def : WriteRes { let Latency = 16; let NumMicroOps = 2; } def : WriteRes { let Latency = 4; } def : WriteRes { let Latency = 5; } def : WriteRes { let Latency = 1; } def : WriteRes { let Latency = 1; } def : WriteRes { let Latency = 3; } def : WriteRes { let Latency = 3; let NumMicroOps = 3; } def : WriteRes { let Latency = 0; let NumMicroOps = 2; } def : WriteRes { let Latency = 5; } def : WriteRes { let Latency = 5; } def : WriteRes { let Latency = 4; let NumMicroOps = 3; } def : WriteRes { let Latency = 3; let NumMicroOps = 2; } def : WriteRes { let Latency = 2; } def : WriteRes { let Latency = 4; } def : WriteRes { let Latency = 4; } def : WriteRes { let Latency = 4; } def : WriteRes { let Latency = 6; let NumMicroOps = 2; } def : WriteRes { let Latency = 12; let NumMicroOps = 2; } // Fragent -1 / NoRSV +1 def : WriteRes { let Latency = 6; } def : WriteRes { let Latency = 3; } def : WriteRes { let Latency = 0; let NumMicroOps = 2; } def : WriteRes { let Latency = 1; } def : WriteRes { let Latency = 1; } def : WriteRes { let Latency = 1; } def : WriteRes { let Latency = 3; } def : WriteRes { let Unsupported = 1; } // No forwarding logic is modelled yet. def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; // Detailed Refinements // ----------------------------------------------------------------------------- include "AArch64SchedFalkorDetails.td" }