[PATCH] D142797: [X86] Make `prefetchit{0/1}` emit an assembler warning if the operand is not rip-rel

Noah Goldstein via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Jan 29 13:28:03 PST 2023


goldstein.w.n updated this revision to Diff 493138.
goldstein.w.n added a comment.

Use `X86::AddrBaseReg` instead of looping


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D142797/new/

https://reviews.llvm.org/D142797

Files:
  llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
  llvm/test/MC/X86/prefetchit-non-rip-op.s


Index: llvm/test/MC/X86/prefetchit-non-rip-op.s
===================================================================
--- /dev/null
+++ llvm/test/MC/X86/prefetchit-non-rip-op.s
@@ -0,0 +1,67 @@
+// RUN: llvm-mc -triple x86_64-unknown-unknown %s > %t 2> %t.err
+// RUN: FileCheck --check-prefix=CHECK-STDERR < %t.err %s
+// RUN: FileCheck < %t %s
+
+// CHECK: prefetchit0 (%rdi)
+// CHECK-STDERR: warning: 'prefetchit0' only supports RIP-relative address
+          prefetchit0 (%rdi)
+
+// CHECK: prefetchit1 (%rcx)
+// CHECK-STDERR: warning: 'prefetchit1' only supports RIP-relative address
+          prefetchit1 (%rcx)
+
+// CHECK: prefetchit0 1(%rdx)
+// CHECK-STDERR: warning: 'prefetchit0' only supports RIP-relative address
+          prefetchit0 1(%rdx)
+
+// CHECK: prefetchit1 12(%rsi)
+// CHECK-STDERR: warning: 'prefetchit1' only supports RIP-relative address
+          prefetchit1 12(%rsi)
+
+// CHECK: prefetchit0 123(%r8,%rax)
+// CHECK-STDERR: warning: 'prefetchit0' only supports RIP-relative address
+          prefetchit0 123(%r8,%rax)
+
+// CHECK: prefetchit1 1234(%r9,%r10)
+// CHECK-STDERR: warning: 'prefetchit1' only supports RIP-relative address
+          prefetchit1 1234(%r9,%r10)
+
+// CHECK: prefetchit0 (%r11,%r12)
+// CHECK-STDERR: warning: 'prefetchit0' only supports RIP-relative address
+          prefetchit0 (%r11,%r12)
+
+// CHECK: prefetchit1 (%r13,%r14)
+// CHECK-STDERR: warning: 'prefetchit1' only supports RIP-relative address
+          prefetchit1 (%r13,%r14)
+
+// CHECK: prefetchit0 987(%rsp,%r15,4)
+// CHECK-STDERR: warning: 'prefetchit0' only supports RIP-relative address
+          prefetchit0 987(%rsp,%r15,4)
+
+// CHECK: prefetchit1 -1(%rbp,%rdi,8)
+// CHECK-STDERR: warning: 'prefetchit1' only supports RIP-relative address
+          prefetchit1 -1(%rbp,%rdi,8)
+
+// CHECK: prefetchit0 (%rsp,%rsi,2)
+// CHECK-STDERR: warning: 'prefetchit0' only supports RIP-relative address
+          prefetchit0 (%rsp,%rsi,2)
+
+// CHECK: prefetchit1 (%rdi,%r15,4)
+// CHECK-STDERR: warning: 'prefetchit1' only supports RIP-relative address
+          prefetchit1 (%rdi,%r15,4)
+
+// CHECK: prefetchit0 80(,%r14,8)
+// CHECK-STDERR: warning: 'prefetchit0' only supports RIP-relative address
+          prefetchit0 80(,%r14,8)
+
+// CHECK: prefetchit1 3(,%r8,4)
+// CHECK-STDERR: warning: 'prefetchit1' only supports RIP-relative address
+          prefetchit1 3(,%r8,4)
+
+// CHECK: prefetchit0 (,%rax,2)
+// CHECK-STDERR: warning: 'prefetchit0' only supports RIP-relative address
+          prefetchit0 (,%rax,2)
+
+// CHECK: prefetchit1 (,%rcx,8)
+// CHECK-STDERR: warning: 'prefetchit1' only supports RIP-relative address
+          prefetchit1 (,%rcx,8)
Index: llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
===================================================================
--- llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -3923,6 +3923,15 @@
     }
   }
 
+  if ((Opcode == X86::PREFETCHIT0 || Opcode == X86::PREFETCHIT1)) {
+    const MCOperand &MO = Inst.getOperand(X86::AddrBaseReg);
+    if (!MO.isReg() || MO.getReg() != X86::RIP)
+      return Warning(
+          Ops[0]->getStartLoc(),
+          Twine((Inst.getOpcode() == X86::PREFETCHIT0 ? "'prefetchit0'"
+                                                      : "'prefetchit1'")) +
+              " only supports RIP-relative address");
+  }
   return false;
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D142797.493138.patch
Type: text/x-patch
Size: 3432 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230129/ac9e7222/attachment.bin>


More information about the llvm-commits mailing list