aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2024-11-27 11:21:00 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2024-11-27 11:21:07 +0000
commit37aebcf4e60e5c913e3d99675548b3e2c631398b (patch)
tree95f04e312f80a72ce7861b47885bfe629feae133 /llvm/lib
parent124b1f8d85af71e512e6dc6250c8bfa370a33d48 (diff)
downloadllvm-37aebcf4e60e5c913e3d99675548b3e2c631398b.zip
llvm-37aebcf4e60e5c913e3d99675548b3e2c631398b.tar.gz
llvm-37aebcf4e60e5c913e3d99675548b3e2c631398b.tar.bz2
[X86] Cleanup SFENCE/MFENCE schedules
Remove unnecessary overrides. UOp + Port usage confirmed by augner/uops.info
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Target/X86/X86SchedBroadwell.td10
-rw-r--r--llvm/lib/Target/X86/X86SchedHaswell.td10
-rw-r--r--llvm/lib/Target/X86/X86SchedIceLake.td16
-rw-r--r--llvm/lib/Target/X86/X86SchedSandyBridge.td2
-rw-r--r--llvm/lib/Target/X86/X86SchedSkylakeClient.td16
-rw-r--r--llvm/lib/Target/X86/X86SchedSkylakeServer.td16
6 files changed, 6 insertions, 64 deletions
diff --git a/llvm/lib/Target/X86/X86SchedBroadwell.td b/llvm/lib/Target/X86/X86SchedBroadwell.td
index 595dfbf..42be811 100644
--- a/llvm/lib/Target/X86/X86SchedBroadwell.td
+++ b/llvm/lib/Target/X86/X86SchedBroadwell.td
@@ -615,7 +615,7 @@ def : WriteRes<WriteSystem, [BWPort0156]> { let Latency = 100; }
def : WriteRes<WriteMicrocoded, [BWPort0156]> { let Latency = 100; }
// Fence instructions.
-def : WriteRes<WriteFence, [BWPort23, BWPort4]>;
+def : WriteRes<WriteFence, [BWPort23, BWPort4]> { let NumMicroOps = 2; let ReleaseAtCycles = [1,1]; }
// Nop, not very useful expect it provides a model for nops!
def : WriteRes<WriteNop, []>;
@@ -722,7 +722,6 @@ def BWWriteResGroup14 : SchedWriteRes<[BWPort0156]> {
let ReleaseAtCycles = [2];
}
def: InstRW<[BWWriteResGroup14], (instrs LFENCE,
- MFENCE,
WAIT,
XGETBV)>;
@@ -740,13 +739,6 @@ def BWWriteResGroup17 : SchedWriteRes<[BWPort01,BWPort015]> {
}
def: InstRW<[BWWriteResGroup17], (instrs MMX_MOVDQ2Qrr)>;
-def BWWriteResGroup18 : SchedWriteRes<[BWPort237,BWPort0156]> {
- let Latency = 2;
- let NumMicroOps = 2;
- let ReleaseAtCycles = [1,1];
-}
-def: InstRW<[BWWriteResGroup18], (instrs SFENCE)>;
-
def BWWriteResGroup20 : SchedWriteRes<[BWPort06,BWPort0156]> {
let Latency = 2;
let NumMicroOps = 2;
diff --git a/llvm/lib/Target/X86/X86SchedHaswell.td b/llvm/lib/Target/X86/X86SchedHaswell.td
index e4faa83..8aa9104 100644
--- a/llvm/lib/Target/X86/X86SchedHaswell.td
+++ b/llvm/lib/Target/X86/X86SchedHaswell.td
@@ -627,7 +627,7 @@ def : WriteRes<WriteSystem, [HWPort0156]> { let Latency = 100; }
def : WriteRes<WriteMicrocoded, [HWPort0156]> { let Latency = 100; }
// Fence instructions.
-def : WriteRes<WriteFence, [HWPort23, HWPort4]>;
+def : WriteRes<WriteFence, [HWPort23, HWPort4]> { let NumMicroOps = 2; let ReleaseAtCycles = [1,1]; }
// Nop, not very useful expect it provides a model for nops!
def : WriteRes<WriteNop, []>;
@@ -1054,13 +1054,6 @@ def HWWriteResGroup18 : SchedWriteRes<[HWPort23,HWPort0156]> {
def: InstRW<[HWWriteResGroup18], (instrs POP16r, POP32r, POP64r)>;
def: InstRW<[HWWriteResGroup18], (instregex "POP(16|32|64)rmr")>;
-def HWWriteResGroup19 : SchedWriteRes<[HWPort237,HWPort0156]> {
- let Latency = 2;
- let NumMicroOps = 2;
- let ReleaseAtCycles = [1,1];
-}
-def: InstRW<[HWWriteResGroup19], (instrs SFENCE)>;
-
def HWWriteResGroup21 : SchedWriteRes<[HWPort4,HWPort6,HWPort237]> {
let Latency = 2;
let NumMicroOps = 3;
@@ -1121,7 +1114,6 @@ def HWWriteResGroup30 : SchedWriteRes<[HWPort0156]> {
let ReleaseAtCycles = [2];
}
def: InstRW<[HWWriteResGroup30], (instrs LFENCE,
- MFENCE,
WAIT,
XGETBV)>;
diff --git a/llvm/lib/Target/X86/X86SchedIceLake.td b/llvm/lib/Target/X86/X86SchedIceLake.td
index 9d6368f..60e14ae 100644
--- a/llvm/lib/Target/X86/X86SchedIceLake.td
+++ b/llvm/lib/Target/X86/X86SchedIceLake.td
@@ -607,7 +607,7 @@ defm : ICXWriteResPair<WriteVarShuffle256, [ICXPort5], 3, [1], 1, 7>; // 256-bi
def : WriteRes<WriteMicrocoded, [ICXPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
// Fence instructions.
-def : WriteRes<WriteFence, [ICXPort78, ICXPort49]>;
+def : WriteRes<WriteFence, [ICXPort78, ICXPort49]> { let NumMicroOps = 2; let ReleaseAtCycles = [1,1]; }
// Load/store MXCSR.
def : WriteRes<WriteLDMXCSR, [ICXPort0,ICXPort23,ICXPort0156]> { let Latency = 7; let NumMicroOps = 3; let ReleaseAtCycles = [1,1,1]; }
@@ -771,13 +771,6 @@ def ICXWriteResGroup20 : SchedWriteRes<[ICXPort6,ICXPort0156]> {
}
def: InstRW<[ICXWriteResGroup20], (instregex "CLFLUSH")>;
-def ICXWriteResGroup21 : SchedWriteRes<[ICXPort49,ICXPort78]> {
- let Latency = 2;
- let NumMicroOps = 2;
- let ReleaseAtCycles = [1,1];
-}
-def: InstRW<[ICXWriteResGroup21], (instrs SFENCE)>;
-
def ICXWriteResGroup23 : SchedWriteRes<[ICXPort06,ICXPort0156]> {
let Latency = 2;
let NumMicroOps = 2;
@@ -916,13 +909,6 @@ def ICXWriteResGroup42 : SchedWriteRes<[ICXPort6,ICXPort0156]> {
}
def: InstRW<[ICXWriteResGroup42], (instregex "CLD")>;
-def ICXWriteResGroup43 : SchedWriteRes<[ICXPort49,ICXPort78]> {
- let Latency = 3;
- let NumMicroOps = 3;
- let ReleaseAtCycles = [1,2];
-}
-def: InstRW<[ICXWriteResGroup43], (instrs MFENCE)>;
-
def ICXWriteResGroup44 : SchedWriteRes<[ICXPort06,ICXPort0156]> {
let Latency = 2;
let NumMicroOps = 3;
diff --git a/llvm/lib/Target/X86/X86SchedSandyBridge.td b/llvm/lib/Target/X86/X86SchedSandyBridge.td
index 775ad6b..560a2b1 100644
--- a/llvm/lib/Target/X86/X86SchedSandyBridge.td
+++ b/llvm/lib/Target/X86/X86SchedSandyBridge.td
@@ -588,7 +588,7 @@ def : WriteRes<WriteSTMXCSR, [SBPort0,SBPort4,SBPort5,SBPort23]> { let Latency =
def : WriteRes<WriteSystem, [SBPort015]> { let Latency = 100; }
def : WriteRes<WriteMicrocoded, [SBPort015]> { let Latency = 100; }
-def : WriteRes<WriteFence, [SBPort23, SBPort4]>;
+def : WriteRes<WriteFence, [SBPort23, SBPort4]> { let NumMicroOps = 2; let ReleaseAtCycles = [1,1]; }
def : WriteRes<WriteNop, []>;
// AVX2/FMA is not supported on that architecture, but we should define the basic
diff --git a/llvm/lib/Target/X86/X86SchedSkylakeClient.td b/llvm/lib/Target/X86/X86SchedSkylakeClient.td
index e4e833c..8cd52e2 100644
--- a/llvm/lib/Target/X86/X86SchedSkylakeClient.td
+++ b/llvm/lib/Target/X86/X86SchedSkylakeClient.td
@@ -608,7 +608,7 @@ defm : SKLWriteResPair<WriteVarShuffle256, [SKLPort5], 3, [1], 1, 7>; // 256-bi
def : WriteRes<WriteMicrocoded, [SKLPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
// Fence instructions.
-def : WriteRes<WriteFence, [SKLPort23, SKLPort4]>;
+def : WriteRes<WriteFence, [SKLPort23, SKLPort4]> { let NumMicroOps = 2; let ReleaseAtCycles = [1,1]; }
// Load/store MXCSR.
def : WriteRes<WriteLDMXCSR, [SKLPort0,SKLPort23,SKLPort0156]> { let Latency = 7; let NumMicroOps = 3; let ReleaseAtCycles = [1,1,1]; }
@@ -738,13 +738,6 @@ def SKLWriteResGroup20 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
}
def: InstRW<[SKLWriteResGroup20], (instregex "CLFLUSH")>;
-def SKLWriteResGroup21 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
- let Latency = 2;
- let NumMicroOps = 2;
- let ReleaseAtCycles = [1,1];
-}
-def: InstRW<[SKLWriteResGroup21], (instrs SFENCE)>;
-
def SKLWriteResGroup23 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
let Latency = 2;
let NumMicroOps = 2;
@@ -834,13 +827,6 @@ def SKLWriteResGroup40 : SchedWriteRes<[SKLPort6,SKLPort0156]> {
}
def: InstRW<[SKLWriteResGroup40], (instregex "CLD")>;
-def SKLWriteResGroup41 : SchedWriteRes<[SKLPort237,SKLPort0156]> {
- let Latency = 3;
- let NumMicroOps = 3;
- let ReleaseAtCycles = [1,2];
-}
-def: InstRW<[SKLWriteResGroup41], (instrs MFENCE)>;
-
def SKLWriteResGroup42 : SchedWriteRes<[SKLPort06,SKLPort0156]> {
let Latency = 2;
let NumMicroOps = 3;
diff --git a/llvm/lib/Target/X86/X86SchedSkylakeServer.td b/llvm/lib/Target/X86/X86SchedSkylakeServer.td
index 62cc4a9..14a51d1e 100644
--- a/llvm/lib/Target/X86/X86SchedSkylakeServer.td
+++ b/llvm/lib/Target/X86/X86SchedSkylakeServer.td
@@ -602,7 +602,7 @@ defm : SKXWriteResPair<WriteVarShuffle256, [SKXPort5], 3, [1], 1, 7>; // 256-bi
def : WriteRes<WriteMicrocoded, [SKXPort0156]> { let Latency = 100; } // def WriteMicrocoded : SchedWrite;
// Fence instructions.
-def : WriteRes<WriteFence, [SKXPort23, SKXPort4]>;
+def : WriteRes<WriteFence, [SKXPort23, SKXPort4]> { let NumMicroOps = 2; let ReleaseAtCycles = [1,1]; }
// Load/store MXCSR.
def : WriteRes<WriteLDMXCSR, [SKXPort0,SKXPort23,SKXPort0156]> { let Latency = 7; let NumMicroOps = 3; let ReleaseAtCycles = [1,1,1]; }
@@ -757,13 +757,6 @@ def SKXWriteResGroup20 : SchedWriteRes<[SKXPort6,SKXPort0156]> {
}
def: InstRW<[SKXWriteResGroup20], (instregex "CLFLUSH")>;
-def SKXWriteResGroup21 : SchedWriteRes<[SKXPort237,SKXPort0156]> {
- let Latency = 2;
- let NumMicroOps = 2;
- let ReleaseAtCycles = [1,1];
-}
-def: InstRW<[SKXWriteResGroup21], (instrs SFENCE)>;
-
def SKXWriteResGroup23 : SchedWriteRes<[SKXPort06,SKXPort0156]> {
let Latency = 2;
let NumMicroOps = 2;
@@ -894,13 +887,6 @@ def SKXWriteResGroup42 : SchedWriteRes<[SKXPort6,SKXPort0156]> {
}
def: InstRW<[SKXWriteResGroup42], (instregex "CLD")>;
-def SKXWriteResGroup43 : SchedWriteRes<[SKXPort237,SKXPort0156]> {
- let Latency = 3;
- let NumMicroOps = 3;
- let ReleaseAtCycles = [1,2];
-}
-def: InstRW<[SKXWriteResGroup43], (instrs MFENCE)>;
-
def SKXWriteResGroup44 : SchedWriteRes<[SKXPort06,SKXPort0156]> {
let Latency = 2;
let NumMicroOps = 3;