[PATCH] D136157: [X86][2/2] Support PREFETCHI instructions

Phoebe Wang via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 18 04:04:45 PDT 2022


pengfei created this revision.
pengfei added reviewers: craig.topper, RKSimon, LuoYuanke, FreddyYe.
Herald added subscribers: StephenFan, hiraditya.
Herald added a project: All.
pengfei requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Optimize prefetchit0/1 to prefetcht0/1 for non-rip address

For more details about these instructions, please refer to the latest ISE document: https://www.intel.com/content/www/us/en/develop/download/intel-architecture-instruction-set-extensions-programming-reference.html


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D136157

Files:
  llvm/lib/Target/X86/X86ISelLowering.cpp
  llvm/lib/Target/X86/X86InstrInfo.td
  llvm/test/CodeGen/X86/prefetch.ll


Index: llvm/test/CodeGen/X86/prefetch.ll
===================================================================
--- llvm/test/CodeGen/X86/prefetch.ll
+++ llvm/test/CodeGen/X86/prefetch.ll
@@ -102,8 +102,8 @@
 ; PREFETCHI-NEXT:    prefetcht1 (%rdi)
 ; PREFETCHI-NEXT:    prefetcht0 (%rdi)
 ; PREFETCHI-NEXT:    prefetchnta (%rdi)
-; PREFETCHI-NEXT:    prefetchit1 (%rdi)
-; PREFETCHI-NEXT:    prefetchit0 (%rdi)
+; PREFETCHI-NEXT:    prefetcht1 (%rdi)
+; PREFETCHI-NEXT:    prefetcht0 (%rdi)
 ; PREFETCHI-NEXT:    prefetchit1 t(%rip)
 ; PREFETCHI-NEXT:    prefetchit0 ext(%rip)
 ; PREFETCHI-NEXT:    retq
Index: llvm/lib/Target/X86/X86InstrInfo.td
===================================================================
--- llvm/lib/Target/X86/X86InstrInfo.td
+++ llvm/lib/Target/X86/X86InstrInfo.td
@@ -3002,7 +3002,8 @@
 //===----------------------------------------------------------------------===//
 // PREFETCHIT0 and PREFETCHIT1 Instructions
 // prefetch ADDR, RW, Locality, Data
-let Predicates = [HasPREFETCHI, In64BitMode], SchedRW = [WriteLoad] in {
+let Predicates = [HasPREFETCHI, In64BitMode], SchedRW = [WriteLoad],
+    usesCustomInserter = 1 in {
   def PREFETCHIT0 : I<0x18, MRM7m, (outs), (ins i8mem:$src),
     "prefetchit0\t$src", [(prefetch addr:$src, (i32 0), (i32 3), (i32 0))]>, TB;
   def PREFETCHIT1 : I<0x18, MRM6m, (outs), (ins i8mem:$src),
Index: llvm/lib/Target/X86/X86ISelLowering.cpp
===================================================================
--- llvm/lib/Target/X86/X86ISelLowering.cpp
+++ llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -36832,6 +36832,18 @@
     MI.eraseFromParent(); // The pseudo is gone now.
     return BB;
   }
+  case X86::PREFETCHIT0:
+  case X86::PREFETCHIT1: {
+    unsigned Opc =
+        MI.getOpcode() == X86::PREFETCHIT0 ? X86::PREFETCHT0 : X86::PREFETCHT1;
+    if (MI.getOperand(0).getReg() != X86::RIP) {
+      MachineInstrBuilder MIB = BuildMI(*BB, MI, DL, TII->get(Opc));
+      for (unsigned Idx = 0; Idx < X86::AddrNumOperands; ++Idx)
+        MIB.add(MI.getOperand(Idx));
+      MI.eraseFromParent();
+    }
+    return BB;
+  }
   }
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D136157.468474.patch
Type: text/x-patch
Size: 2110 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221018/3c6ee824/attachment.bin>


More information about the llvm-commits mailing list