<html>
<head>
<base href="https://bugs.llvm.org/">
</head>
<body><table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Bug ID</th>
<td><a class="bz_bug_link
bz_status_NEW "
title="NEW - [MCA] Multiple Int schedulers"
href="https://bugs.llvm.org/show_bug.cgi?id=50350">50350</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>[MCA] Multiple Int schedulers
</td>
</tr>
<tr>
<th>Product</th>
<td>tools
</td>
</tr>
<tr>
<th>Version</th>
<td>trunk
</td>
</tr>
<tr>
<th>Hardware</th>
<td>PC
</td>
</tr>
<tr>
<th>OS</th>
<td>Linux
</td>
</tr>
<tr>
<th>Status</th>
<td>NEW
</td>
</tr>
<tr>
<th>Severity</th>
<td>enhancement
</td>
</tr>
<tr>
<th>Priority</th>
<td>P
</td>
</tr>
<tr>
<th>Component</th>
<td>llvm-mca
</td>
</tr>
<tr>
<th>Assignee</th>
<td>unassignedbugs@nondot.org
</td>
</tr>
<tr>
<th>Reporter</th>
<td>lebedev.ri@gmail.com
</td>
</tr>
<tr>
<th>CC</th>
<td>andrea.dibiagio@gmail.com, llvm-bugs@lists.llvm.org, matthew.davis@sony.com
</td>
</tr></table>
<p>
<div>
<pre>Currently, Znver3 models as-if the Int unit has a single scheduler
encompassing all the 9 pipes. This isn't quite right.
I would like to model it as:
```
diff --git a/llvm/lib/Target/X86/X86ScheduleZnver3.td
b/llvm/lib/Target/X86/X86ScheduleZnver3.td
index 84aee73bad63..a7d369f55b74 100644
--- a/llvm/lib/Target/X86/X86ScheduleZnver3.td
+++ b/llvm/lib/Target/X86/X86ScheduleZnver3.td
@@ -163,15 +163,23 @@ def Zn3IntegerPRF : RegisterFile<192, [GR64, CCR], [1,
1], [1, 0],
// The schedulers can receive up to six macro ops per cycle, with a limit of
// two per scheduler. Each scheduler can issue one micro op per cycle into
// each of its associated pipelines
-// FIXME: these are 4 separate schedulers, not a single big one.
-def Zn3Int : ProcResGroup<[Zn3ALU0, Zn3AGU0, Zn3BRU0, // scheduler 0
- Zn3ALU1, Zn3AGU1, // scheduler 1
- Zn3ALU2, Zn3AGU2, // scheduler 2
- Zn3ALU3, Zn3BRU1 // scheduler 3
- ]> {
- let BufferSize = !mul(4, 24);
+def Zn3IntSch0 : ProcResGroup<[Zn3ALU0, Zn3AGU0, Zn3BRU0]> { // scheduler 0
+ let BufferSize = 24;
+}
+def Zn3IntSch1 : ProcResGroup<[Zn3ALU1, Zn3AGU1 ]> { // scheduler 1
+ let BufferSize = 24;
+}
+def Zn3IntSch2 : ProcResGroup<[Zn3ALU2, Zn3AGU2 ]> { // scheduler 2
+ let BufferSize = 24;
+}
+def Zn3IntSch3 : ProcResGroup<[Zn3ALU3, Zn3BRU1]> { // scheduler 3
+ let BufferSize = 24;
}
+def Zn3Int : ProcResGroup<[Zn3ALU0, Zn3AGU0, Zn3BRU0, // scheduler 0
+ Zn3ALU1, Zn3AGU1, // scheduler 1
+ Zn3ALU2, Zn3AGU2, // scheduler 2
+ Zn3ALU3, Zn3BRU1]>; // scheduler 3
//===----------------------------------------------------------------------===//
// Floating-Point Unit
```
The last `Zn3Int` is needed to silence the
```
FAILED: lib/Target/X86/X86GenSubtargetInfo.inc
cd /builddirs/llvm-project/build-Clang12 &&
/builddirs/llvm-project/build-Clang12/bin/llvm-tblgen -gen-subtarget -I
/repositories/llvm-project/llvm/lib/Target/X86
-I/builddirs/llvm-project/build-Clang12/include
-I/repositories/llvm-project/llvm/include -I
/repositories/llvm-project/llvm/lib/Target
/repositories/llvm-project/llvm/lib/Target/X86/X86.td --write-if-changed -o
lib/Target/X86/X86GenSubtargetInfo.inc -d
lib/Target/X86/X86GenSubtargetInfo.inc.d
Included from /repositories/llvm-project/llvm/lib/Target/X86/X86.td:562:
/repositories/llvm-project/llvm/lib/Target/X86/X86ScheduleZnver3.td:136:1:
error: proc resource group overlaps with Zn3IntSch0 but no supergroup contains
both.
def Zn3AGU012 : ProcResGroup<[Zn3AGU0, Zn3AGU1, Zn3AGU2]>;
^
```
But as a result, the Zn3IntSch0/Zn3IntSch1/Zn3IntSch2/Zn3IntSch3 appear to not
be used at all.
How would i approach this? The same problem exists for FP unit.</pre>
</div>
</p>
<hr>
<span>You are receiving this mail because:</span>
<ul>
<li>You are on the CC list for the bug.</li>
</ul>
</body>
</html>