[llvm] 8aa60f6 - [VE] Add vector comparison and min/max

Kazushi Marukawa via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 26 02:32:13 PDT 2020


Author: Kazushi (Jam) Marukawa
Date: 2020-10-26T18:32:04+09:00
New Revision: 8aa60f67dc8c67390680b7a3be0d31384300f09f

URL: https://github.com/llvm/llvm-project/commit/8aa60f67dc8c67390680b7a3be0d31384300f09f
DIFF: https://github.com/llvm/llvm-project/commit/8aa60f67dc8c67390680b7a3be0d31384300f09f.diff

LOG: [VE] Add vector comparison and min/max

Add VCMP/VCPS/VCPX/VCMS/VCMX vector instructions.  Also add regression
tests.

Reviewed By: simoll

Differential Revision: https://reviews.llvm.org/D89643

Added: 
    llvm/test/MC/VE/VCMP.s
    llvm/test/MC/VE/VCMS.s
    llvm/test/MC/VE/VCMX.s
    llvm/test/MC/VE/VCPS.s
    llvm/test/MC/VE/VCPX.s

Modified: 
    llvm/lib/Target/VE/VEInstrVec.td

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/VE/VEInstrVec.td b/llvm/lib/Target/VE/VEInstrVec.td
index 2346c849fd8e..c23e15e4cb51 100644
--- a/llvm/lib/Target/VE/VEInstrVec.td
+++ b/llvm/lib/Target/VE/VEInstrVec.td
@@ -597,3 +597,76 @@ def : MnemonicAlias<"vdivs.w", "vdivs.w.zx">;
 
 // Section 8.10.13 - VDVX (Vector Divide)
 defm VDIVSL : RVDIVm<"vdivs.l", 0xfb, V64, I64, VM>;
+
+// Section 8.10.14 - VCMP (Vector Compare)
+let cx = 0, cx2 = 0 in
+defm VCMPUL : RVm<"vcmpu.l", 0xb9, V64, I64, VM>;
+let cx = 0, cx2 = 1 in {
+  defm PVCMPULO : RVm<"pvcmpu.lo", 0xb9, V64, I32, VM>;
+  let isCodeGenOnly = 1 in
+  defm VCMPUW : RVm<"vcmpu.w", 0xb9, V64, I32, VM>;
+}
+let cx = 1, cx2 = 0 in
+defm PVCMPUUP : RVm<"pvcmpu.up", 0xb9, V64, I64, VM>;
+let cx = 1, cx2 = 1 in
+defm PVCMPU : RVm<"pvcmpu", 0xb9, V64, I64, VM512>;
+def : MnemonicAlias<"vcmpu.w", "pvcmpu.lo">;
+
+// Section 8.10.15 - VCPS (Vector Compare Single)
+let cx = 0, cx2 = 0 in
+defm VCMPSWSX : RVm<"vcmps.w.sx", 0xfa, V64, I32, VM>;
+let cx = 0, cx2 = 1 in {
+  defm PVCMPSLO : RVm<"pvcmps.lo", 0xfa, V64, I32, VM>;
+  let isCodeGenOnly = 1 in
+  defm VCMPSWZX : RVm<"vcmps.w.zx", 0xfa, V64, I32, VM>;
+}
+let cx = 1, cx2 = 0 in
+defm PVCMPSUP : RVm<"pvcmps.up", 0xfa, V64, I64, VM>;
+let cx = 1, cx2 = 1 in
+defm PVCMPS : RVm<"pvcmps", 0xfa, V64, I64, VM512>;
+def : MnemonicAlias<"pvcmps.lo.sx", "vcmps.w.sx">;
+def : MnemonicAlias<"vcmps.w.zx", "pvcmps.lo">;
+def : MnemonicAlias<"vcmps.w", "pvcmps.lo">;
+def : MnemonicAlias<"pvcmps.lo.zx", "pvcmps.lo">;
+
+// Section 8.10.16 - VCPX (Vector Compare)
+defm VCMPSL : RVm<"vcmps.l", 0xba, V64, I64, VM>;
+
+// Section 8.10.17 - VCMS (Vector Compare and Select Maximum/Minimum Single)
+let cx = 0, cx2 = 0 in
+defm VMAXSWSX : RVm<"vmaxs.w.sx", 0x8a, V64, I32, VM>;
+let cx = 0, cx2 = 1 in {
+  defm PVMAXSLO : RVm<"pvmaxs.lo", 0x8a, V64, I32, VM>;
+  let isCodeGenOnly = 1 in
+  defm VMAXSWZX : RVm<"vmaxs.w.zx", 0x8a, V64, I32, VM>;
+}
+let cx = 1, cx2 = 0 in
+defm PVMAXSUP : RVm<"pvmaxs.up", 0x8a, V64, I64, VM>;
+let cx = 1, cx2 = 1 in
+defm PVMAXS : RVm<"pvmaxs", 0x8a, V64, I64, VM512>;
+let cs2 = 1 in {
+  let cx = 0, cx2 = 0 in
+  defm VMINSWSX : RVm<"vmins.w.sx", 0x8a, V64, I32, VM>;
+  let cx = 0, cx2 = 1 in {
+    defm PVMINSLO : RVm<"pvmins.lo", 0x8a, V64, I32, VM>;
+    let isCodeGenOnly = 1 in
+    defm VMINSWZX : RVm<"vmins.w.zx", 0x8a, V64, I32, VM>;
+  }
+  let cx = 1, cx2 = 0 in
+  defm PVMINSUP : RVm<"pvmins.up", 0x8a, V64, I64, VM>;
+  let cx = 1, cx2 = 1 in
+  defm PVMINS : RVm<"pvmins", 0x8a, V64, I64, VM512>;
+}
+def : MnemonicAlias<"pvmaxs.lo.sx", "vmaxs.w.sx">;
+def : MnemonicAlias<"vmaxs.w.zx", "pvmaxs.lo">;
+def : MnemonicAlias<"vmaxs.w", "pvmaxs.lo">;
+def : MnemonicAlias<"pvmaxs.lo.zx", "pvmaxs.lo">;
+def : MnemonicAlias<"pvmins.lo.sx", "vmins.w.sx">;
+def : MnemonicAlias<"vmins.w.zx", "pvmins.lo">;
+def : MnemonicAlias<"vmins.w", "pvmins.lo">;
+def : MnemonicAlias<"pvmins.lo.zx", "pvmins.lo">;
+
+// Section 8.10.18 - VCMX (Vector Compare and Select Maximum/Minimum)
+defm VMAXSL : RVm<"vmaxs.l", 0x9a, V64, I64, VM>;
+let cs2 = 1 in
+defm VMINSL : RVm<"vmins.l", 0x9a, V64, I64, VM>;

diff  --git a/llvm/test/MC/VE/VCMP.s b/llvm/test/MC/VE/VCMP.s
new file mode 100644
index 000000000000..07fcd07c0620
--- /dev/null
+++ b/llvm/test/MC/VE/VCMP.s
@@ -0,0 +1,28 @@
+# RUN: llvm-mc -triple=ve --show-encoding < %s \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-INST
+
+# CHECK-INST: vcmpu.l %v11, %s20, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0xb9]
+vcmpu.l %v11, %s20, %v22
+
+# CHECK-INST: vcmpu.l %vix, %vix, %vix
+# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0xb9]
+vcmpu.l %vix, %vix, %vix
+
+# CHECK-INST: pvcmpu.lo %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0xb9]
+vcmpu.w %vix, 22, %v22
+
+# CHECK-INST: pvcmpu.lo %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0xb9]
+pvcmpu.lo %v11, 63, %v22, %vm11
+
+# CHECK-INST: pvcmpu.up %v11, %vix, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x8b,0xb9]
+pvcmpu.up %v11, %vix, %v22, %vm11
+
+# CHECK-INST: pvcmpu %v12, %v20, %v22, %vm12
+# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xcc,0xb9]
+pvcmpu %v12, %v20, %v22, %vm12

diff  --git a/llvm/test/MC/VE/VCMS.s b/llvm/test/MC/VE/VCMS.s
new file mode 100644
index 000000000000..762669412b80
--- /dev/null
+++ b/llvm/test/MC/VE/VCMS.s
@@ -0,0 +1,76 @@
+# RUN: llvm-mc -triple=ve --show-encoding < %s \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-INST
+
+# CHECK-INST: vmaxs.w.sx %v11, %s20, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0x8a]
+vmaxs.w.sx %v11, %s20, %v22
+
+# CHECK-INST: vmaxs.w.sx %vix, %vix, %vix
+# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x8a]
+vmaxs.w.sx %vix, %vix, %vix
+
+# CHECK-INST: pvmaxs.lo %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0x8a]
+vmaxs.w.zx %vix, 22, %v22
+
+# CHECK-INST: pvmaxs.lo %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0x8a]
+vmaxs.w %vix, 22, %v22
+
+# CHECK-INST: pvmaxs.lo %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0x8a]
+pvmaxs.lo %v11, 63, %v22, %vm11
+
+# CHECK-INST: vmaxs.w.sx %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0x8a]
+pvmaxs.lo.sx %v11, 63, %v22, %vm11
+
+# CHECK-INST: pvmaxs.lo %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0x8a]
+pvmaxs.lo.zx %v11, 63, %v22, %vm11
+
+# CHECK-INST: pvmaxs.up %v11, %vix, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x8b,0x8a]
+pvmaxs.up %v11, %vix, %v22, %vm11
+
+# CHECK-INST: pvmaxs %v12, %v20, %v22, %vm12
+# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xcc,0x8a]
+pvmaxs %v12, %v20, %v22, %vm12
+
+# CHECK-INST: vmins.w.sx %v11, %s20, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x30,0x8a]
+vmins.w.sx %v11, %s20, %v22
+
+# CHECK-INST: vmins.w.sx %vix, %vix, %vix
+# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x10,0x8a]
+vmins.w.sx %vix, %vix, %vix
+
+# CHECK-INST: pvmins.lo %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x70,0x8a]
+vmins.w.zx %vix, 22, %v22
+
+# CHECK-INST: pvmins.lo %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x70,0x8a]
+vmins.w %vix, 22, %v22
+
+# CHECK-INST: pvmins.lo %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x7b,0x8a]
+pvmins.lo %v11, 63, %v22, %vm11
+
+# CHECK-INST: vmins.w.sx %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x3b,0x8a]
+pvmins.lo.sx %v11, 63, %v22, %vm11
+
+# CHECK-INST: pvmins.lo %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x7b,0x8a]
+pvmins.lo.zx %v11, 63, %v22, %vm11
+
+# CHECK-INST: pvmins.up %v11, %vix, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x9b,0x8a]
+pvmins.up %v11, %vix, %v22, %vm11
+
+# CHECK-INST: pvmins %v12, %v20, %v22, %vm12
+# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xdc,0x8a]
+pvmins %v12, %v20, %v22, %vm12

diff  --git a/llvm/test/MC/VE/VCMX.s b/llvm/test/MC/VE/VCMX.s
new file mode 100644
index 000000000000..2b05ac3f3324
--- /dev/null
+++ b/llvm/test/MC/VE/VCMX.s
@@ -0,0 +1,44 @@
+# RUN: llvm-mc -triple=ve --show-encoding < %s \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-INST
+
+# CHECK-INST: vmaxs.l %v11, %s20, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0x9a]
+vmaxs.l %v11, %s20, %v22
+
+# CHECK-INST: vmaxs.l %vix, %vix, %vix
+# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x9a]
+vmaxs.l %vix, %vix, %vix
+
+# CHECK-INST: vmaxs.l %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x20,0x9a]
+vmaxs.l %vix, 22, %v22
+
+# CHECK-INST: vmaxs.l %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0x9a]
+vmaxs.l %v11, 63, %v22, %vm11
+
+# CHECK-INST: vmaxs.l %v11, %v23, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x17,0x0b,0x00,0x00,0x0b,0x9a]
+vmaxs.l %v11, %v23, %v22, %vm11
+
+# CHECK-INST: vmins.l %v11, %s20, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x30,0x9a]
+vmins.l %v11, %s20, %v22
+
+# CHECK-INST: vmins.l %vix, %vix, %vix
+# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x10,0x9a]
+vmins.l %vix, %vix, %vix
+
+# CHECK-INST: vmins.l %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x30,0x9a]
+vmins.l %vix, 22, %v22
+
+# CHECK-INST: vmins.l %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x3b,0x9a]
+vmins.l %v11, 63, %v22, %vm11
+
+# CHECK-INST: vmins.l %v11, %v23, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x17,0x0b,0x00,0x00,0x1b,0x9a]
+vmins.l %v11, %v23, %v22, %vm11

diff  --git a/llvm/test/MC/VE/VCPS.s b/llvm/test/MC/VE/VCPS.s
new file mode 100644
index 000000000000..5359ec2542fa
--- /dev/null
+++ b/llvm/test/MC/VE/VCPS.s
@@ -0,0 +1,40 @@
+# RUN: llvm-mc -triple=ve --show-encoding < %s \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-INST
+
+# CHECK-INST: vcmps.w.sx %v11, %s20, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0xfa]
+vcmps.w.sx %v11, %s20, %v22
+
+# CHECK-INST: vcmps.w.sx %vix, %vix, %vix
+# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0xfa]
+vcmps.w.sx %vix, %vix, %vix
+
+# CHECK-INST: pvcmps.lo %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0xfa]
+vcmps.w.zx %vix, 22, %v22
+
+# CHECK-INST: pvcmps.lo %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0xfa]
+vcmps.w %vix, 22, %v22
+
+# CHECK-INST: pvcmps.lo %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0xfa]
+pvcmps.lo %v11, 63, %v22, %vm11
+
+# CHECK-INST: vcmps.w.sx %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0xfa]
+pvcmps.lo.sx %v11, 63, %v22, %vm11
+
+# CHECK-INST: pvcmps.lo %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0xfa]
+pvcmps.lo.zx %v11, 63, %v22, %vm11
+
+# CHECK-INST: pvcmps.up %v11, %vix, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x8b,0xfa]
+pvcmps.up %v11, %vix, %v22, %vm11
+
+# CHECK-INST: pvcmps %v12, %v20, %v22, %vm12
+# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xcc,0xfa]
+pvcmps %v12, %v20, %v22, %vm12

diff  --git a/llvm/test/MC/VE/VCPX.s b/llvm/test/MC/VE/VCPX.s
new file mode 100644
index 000000000000..7ca540ee93cc
--- /dev/null
+++ b/llvm/test/MC/VE/VCPX.s
@@ -0,0 +1,24 @@
+# RUN: llvm-mc -triple=ve --show-encoding < %s \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
+# RUN:     | FileCheck %s --check-prefixes=CHECK-INST
+
+# CHECK-INST: vcmps.l %v11, %s20, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0xba]
+vcmps.l %v11, %s20, %v22
+
+# CHECK-INST: vcmps.l %vix, %vix, %vix
+# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0xba]
+vcmps.l %vix, %vix, %vix
+
+# CHECK-INST: vcmps.l %vix, 22, %v22
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x20,0xba]
+vcmps.l %vix, 22, %v22
+
+# CHECK-INST: vcmps.l %v11, 63, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0xba]
+vcmps.l %v11, 63, %v22, %vm11
+
+# CHECK-INST: vcmps.l %v11, %v23, %v22, %vm11
+# CHECK-ENCODING: encoding: [0x00,0x16,0x17,0x0b,0x00,0x00,0x0b,0xba]
+vcmps.l %v11, %v23, %v22, %vm11


        


More information about the llvm-commits mailing list