[llvm] b8bbd5f - [X86] X86InstrFoldTables.cpp - add Op4 Broadcast Fold/Unfold table entries
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Thu Nov 30 07:22:16 PST 2023
Author: Simon Pilgrim
Date: 2023-11-30T15:20:42Z
New Revision: b8bbd5fe6f6371f549e0aedf726fa47e7dd3bbf6
URL: https://github.com/llvm/llvm-project/commit/b8bbd5fe6f6371f549e0aedf726fa47e7dd3bbf6
DIFF: https://github.com/llvm/llvm-project/commit/b8bbd5fe6f6371f549e0aedf726fa47e7dd3bbf6.diff
LOG: [X86] X86InstrFoldTables.cpp - add Op4 Broadcast Fold/Unfold table entries
Prep work for #73509 (missed in #73654)
Added:
Modified:
llvm/lib/Target/X86/X86InstrFoldTables.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/X86/X86InstrFoldTables.cpp b/llvm/lib/Target/X86/X86InstrFoldTables.cpp
index c44d77460f27df3..c9d0f66c6e46b3a 100644
--- a/llvm/lib/Target/X86/X86InstrFoldTables.cpp
+++ b/llvm/lib/Target/X86/X86InstrFoldTables.cpp
@@ -23,6 +23,7 @@ using namespace llvm;
// are currently emitted in X86GenInstrInfo.inc in alphabetical order. Which
// makes sorting these tables a simple matter of alphabetizing the table.
#include "X86GenFoldTables.inc"
+
// Table to map instructions safe to broadcast using a
diff erent width from the
// element width.
static const X86FoldTableEntry BroadcastSizeTable2[] = {
@@ -186,6 +187,10 @@ struct X86MemUnfoldTable {
// Index 3, folded broadcast
addTableEntry(Entry, TB_INDEX_3 | TB_FOLDED_LOAD | TB_FOLDED_BCAST);
+ for (const X86FoldTableEntry &Entry : BroadcastTable4)
+ // Index 4, folded broadcast
+ addTableEntry(Entry, TB_INDEX_4 | TB_FOLDED_LOAD | TB_FOLDED_BCAST);
+
// Sort the memory->reg unfold table.
array_pod_sort(Table.begin(), Table.end());
@@ -266,6 +271,17 @@ struct X86BroadcastFoldTable {
}
}
+ for (const X86FoldTableEntry &Reg2Bcst : BroadcastTable4) {
+ unsigned RegOp = Reg2Bcst.KeyOp;
+ unsigned BcstOp = Reg2Bcst.DstOp;
+ if (const X86FoldTableEntry *Reg2Mem = lookupFoldTable(RegOp, 4)) {
+ unsigned MemOp = Reg2Mem->DstOp;
+ uint16_t Flags = Reg2Mem->Flags | Reg2Bcst.Flags | TB_INDEX_4 |
+ TB_FOLDED_LOAD | TB_FOLDED_BCAST;
+ Table.push_back({MemOp, BcstOp, Flags});
+ }
+ }
+
// Sort the memory->broadcast fold table.
array_pod_sort(Table.begin(), Table.end());
}
More information about the llvm-commits
mailing list