[llvm] r335500 - [X86] Allow base and index for gather instructions to appear in other order for Intel syntax.

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 25 10:26:51 PDT 2018


Author: ctopper
Date: Mon Jun 25 10:26:51 2018
New Revision: 335500

URL: http://llvm.org/viewvc/llvm-project?rev=335500&view=rev
Log:
[X86] Allow base and index for gather instructions to appear in other order for Intel syntax.

Modified:
    llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
    llvm/trunk/test/MC/X86/intel-syntax.s

Modified: llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp?rev=335500&r1=335499&r2=335500&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp (original)
+++ llvm/trunk/lib/Target/X86/AsmParser/X86AsmParser.cpp Mon Jun 25 10:26:51 2018
@@ -1883,6 +1883,17 @@ std::unique_ptr<X86Operand> X86AsmParser
       (IndexReg == X86::ESP || IndexReg == X86::RSP))
     std::swap(BaseReg, IndexReg);
 
+  // If BaseReg is a vector register and IndexReg is not, swap them unless
+  // Scale was specified in which case it would be an error.
+  if (Scale == 0 &&
+      !(X86MCRegisterClasses[X86::VR128XRegClassID].contains(IndexReg) ||
+        X86MCRegisterClasses[X86::VR256XRegClassID].contains(IndexReg) ||
+        X86MCRegisterClasses[X86::VR512RegClassID].contains(IndexReg)) &&
+      (X86MCRegisterClasses[X86::VR128XRegClassID].contains(BaseReg) ||
+       X86MCRegisterClasses[X86::VR256XRegClassID].contains(BaseReg) ||
+       X86MCRegisterClasses[X86::VR512RegClassID].contains(BaseReg)))
+    std::swap(BaseReg, IndexReg);
+
   if (Scale != 0 &&
       X86MCRegisterClasses[X86::GR16RegClassID].contains(IndexReg))
     return ErrorOperand(Start, "16-bit addresses cannot have a scale");

Modified: llvm/trunk/test/MC/X86/intel-syntax.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/X86/intel-syntax.s?rev=335500&r1=335499&r2=335500&view=diff
==============================================================================
--- llvm/trunk/test/MC/X86/intel-syntax.s (original)
+++ llvm/trunk/test/MC/X86/intel-syntax.s Mon Jun 25 10:26:51 2018
@@ -897,3 +897,8 @@ lea rax, [rsp+rax]
 lea eax, [eax+esp]
 // CHECK: leal (%esp,%eax), %eax
 lea eax, [esp+eax]
+
+// CHECK: vpgatherdq      %ymm2, (%rdi,%xmm1), %ymm0
+vpgatherdq ymm0, [rdi+xmm1], ymm2
+// CHECK: vpgatherdq      %ymm2, (%rdi,%xmm1), %ymm0
+vpgatherdq ymm0, [xmm1+rdi], ymm2




More information about the llvm-commits mailing list