[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