[llvm] [X86][Codegen] add sched for lnlp (PR #139446)
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 15 01:16:34 PDT 2025
================
@@ -0,0 +1,2409 @@
+//=----- X86SchedLunarlakeP.td - X86 LunarlakeP Scheduling *- tablegen -----*=//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the machine model for LunarlakeP to support instruction
+// scheduling and other instruction cost heuristics.
+//
+//===----------------------------------------------------------------------===//
+def LunarlakePModel : SchedMachineModel {
+ // LunarlakeP can allocate 8 uops per cycle.
+ // Max micro-ops that may be scheduled per cycle.
+ // Based on Allocator Width
+ let IssueWidth = 8;
+ // Max micro-ops that can be buffered.
+ // Based on size of ROB
+ let MicroOpBufferSize = 792;
+ // INT LOAD takes 4 cycles
+ let LoadLatency = 4;
+ let MispredictPenalty = 14;
+ // Latency for microcoded instructions or instructions without latency info.
+ int MaxLatency = 100;
+ // Based on the LSD (loop-stream detector) queue size (ST).
+ // LSD is 200 uops per logical processor in single threaded mode
+ // For SMT 100 uops/thread, LionCove removed SMT in HW.
+ let LoopMicroOpBufferSize = 200;
+ // This flag is set to allow the scheduler to assign a default model to
+ // unrecognized opcodes.
+ let CompleteModel = 0;
+}
+
+let SchedModel = LunarlakePModel in {
+
+// LunarlakeP can issue micro-ops to 18 different ports in one cycle.
+// Lion Cove architectural spec uses port naming that is not sequential
+// for better comprehension we opt for sequential naming since this ports
+// serve logical information for schedule only.
+// 6 INT ALU Ports {P0 to P5}
+def LNLPPort00 : ProcResource<1>;
+def LNLPPort01 : ProcResource<1>;
+def LNLPPort02 : ProcResource<1>;
+def LNLPPort03 : ProcResource<1>;
+def LNLPPort04 : ProcResource<1>;
+def LNLPPort05 : ProcResource<1>;
+// 4 VEC ALU Ports {V0 to V3}
+def LNLPVPort00 : ProcResource<1>;
+def LNLPVPort01 : ProcResource<1>;
+def LNLPVPort02 : ProcResource<1>;
+def LNLPVPort03 : ProcResource<1>;
+// 2 Store Data Ports {P10 to P11}
+def LNLPPort10 : ProcResource<1>;
+def LNLPPort11 : ProcResource<1>;
+// 6 MEM Ports 6 AGU shared with 3 LD, 3 ST
+// AGU LD {P20 to P22}
+def LNLPPort20 : ProcResource<1>;
+def LNLPPort21 : ProcResource<1>;
+def LNLPPort22 : ProcResource<1>;
+// AGU ST {P25 to P27}
+def LNLPPort25 : ProcResource<1>;
+def LNLPPort26 : ProcResource<1>;
+def LNLPPort27 : ProcResource<1>;
----------------
mahesh-attarde wrote:
done.
https://github.com/llvm/llvm-project/pull/139446
More information about the llvm-commits
mailing list