Skip to content

Commit 8aa60f6

Browse files
committed
[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
1 parent 0acf700 commit 8aa60f6

File tree

6 files changed

+285
-0
lines changed

6 files changed

+285
-0
lines changed

llvm/lib/Target/VE/VEInstrVec.td

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,3 +597,76 @@ def : MnemonicAlias<"vdivs.w", "vdivs.w.zx">;
597597

598598
// Section 8.10.13 - VDVX (Vector Divide)
599599
defm VDIVSL : RVDIVm<"vdivs.l", 0xfb, V64, I64, VM>;
600+
601+
// Section 8.10.14 - VCMP (Vector Compare)
602+
let cx = 0, cx2 = 0 in
603+
defm VCMPUL : RVm<"vcmpu.l", 0xb9, V64, I64, VM>;
604+
let cx = 0, cx2 = 1 in {
605+
defm PVCMPULO : RVm<"pvcmpu.lo", 0xb9, V64, I32, VM>;
606+
let isCodeGenOnly = 1 in
607+
defm VCMPUW : RVm<"vcmpu.w", 0xb9, V64, I32, VM>;
608+
}
609+
let cx = 1, cx2 = 0 in
610+
defm PVCMPUUP : RVm<"pvcmpu.up", 0xb9, V64, I64, VM>;
611+
let cx = 1, cx2 = 1 in
612+
defm PVCMPU : RVm<"pvcmpu", 0xb9, V64, I64, VM512>;
613+
def : MnemonicAlias<"vcmpu.w", "pvcmpu.lo">;
614+
615+
// Section 8.10.15 - VCPS (Vector Compare Single)
616+
let cx = 0, cx2 = 0 in
617+
defm VCMPSWSX : RVm<"vcmps.w.sx", 0xfa, V64, I32, VM>;
618+
let cx = 0, cx2 = 1 in {
619+
defm PVCMPSLO : RVm<"pvcmps.lo", 0xfa, V64, I32, VM>;
620+
let isCodeGenOnly = 1 in
621+
defm VCMPSWZX : RVm<"vcmps.w.zx", 0xfa, V64, I32, VM>;
622+
}
623+
let cx = 1, cx2 = 0 in
624+
defm PVCMPSUP : RVm<"pvcmps.up", 0xfa, V64, I64, VM>;
625+
let cx = 1, cx2 = 1 in
626+
defm PVCMPS : RVm<"pvcmps", 0xfa, V64, I64, VM512>;
627+
def : MnemonicAlias<"pvcmps.lo.sx", "vcmps.w.sx">;
628+
def : MnemonicAlias<"vcmps.w.zx", "pvcmps.lo">;
629+
def : MnemonicAlias<"vcmps.w", "pvcmps.lo">;
630+
def : MnemonicAlias<"pvcmps.lo.zx", "pvcmps.lo">;
631+
632+
// Section 8.10.16 - VCPX (Vector Compare)
633+
defm VCMPSL : RVm<"vcmps.l", 0xba, V64, I64, VM>;
634+
635+
// Section 8.10.17 - VCMS (Vector Compare and Select Maximum/Minimum Single)
636+
let cx = 0, cx2 = 0 in
637+
defm VMAXSWSX : RVm<"vmaxs.w.sx", 0x8a, V64, I32, VM>;
638+
let cx = 0, cx2 = 1 in {
639+
defm PVMAXSLO : RVm<"pvmaxs.lo", 0x8a, V64, I32, VM>;
640+
let isCodeGenOnly = 1 in
641+
defm VMAXSWZX : RVm<"vmaxs.w.zx", 0x8a, V64, I32, VM>;
642+
}
643+
let cx = 1, cx2 = 0 in
644+
defm PVMAXSUP : RVm<"pvmaxs.up", 0x8a, V64, I64, VM>;
645+
let cx = 1, cx2 = 1 in
646+
defm PVMAXS : RVm<"pvmaxs", 0x8a, V64, I64, VM512>;
647+
let cs2 = 1 in {
648+
let cx = 0, cx2 = 0 in
649+
defm VMINSWSX : RVm<"vmins.w.sx", 0x8a, V64, I32, VM>;
650+
let cx = 0, cx2 = 1 in {
651+
defm PVMINSLO : RVm<"pvmins.lo", 0x8a, V64, I32, VM>;
652+
let isCodeGenOnly = 1 in
653+
defm VMINSWZX : RVm<"vmins.w.zx", 0x8a, V64, I32, VM>;
654+
}
655+
let cx = 1, cx2 = 0 in
656+
defm PVMINSUP : RVm<"pvmins.up", 0x8a, V64, I64, VM>;
657+
let cx = 1, cx2 = 1 in
658+
defm PVMINS : RVm<"pvmins", 0x8a, V64, I64, VM512>;
659+
}
660+
def : MnemonicAlias<"pvmaxs.lo.sx", "vmaxs.w.sx">;
661+
def : MnemonicAlias<"vmaxs.w.zx", "pvmaxs.lo">;
662+
def : MnemonicAlias<"vmaxs.w", "pvmaxs.lo">;
663+
def : MnemonicAlias<"pvmaxs.lo.zx", "pvmaxs.lo">;
664+
def : MnemonicAlias<"pvmins.lo.sx", "vmins.w.sx">;
665+
def : MnemonicAlias<"vmins.w.zx", "pvmins.lo">;
666+
def : MnemonicAlias<"vmins.w", "pvmins.lo">;
667+
def : MnemonicAlias<"pvmins.lo.zx", "pvmins.lo">;
668+
669+
// Section 8.10.18 - VCMX (Vector Compare and Select Maximum/Minimum)
670+
defm VMAXSL : RVm<"vmaxs.l", 0x9a, V64, I64, VM>;
671+
let cs2 = 1 in
672+
defm VMINSL : RVm<"vmins.l", 0x9a, V64, I64, VM>;

llvm/test/MC/VE/VCMP.s

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# RUN: llvm-mc -triple=ve --show-encoding < %s \
2+
# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
4+
# RUN: | FileCheck %s --check-prefixes=CHECK-INST
5+
6+
# CHECK-INST: vcmpu.l %v11, %s20, %v22
7+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0xb9]
8+
vcmpu.l %v11, %s20, %v22
9+
10+
# CHECK-INST: vcmpu.l %vix, %vix, %vix
11+
# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0xb9]
12+
vcmpu.l %vix, %vix, %vix
13+
14+
# CHECK-INST: pvcmpu.lo %vix, 22, %v22
15+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0xb9]
16+
vcmpu.w %vix, 22, %v22
17+
18+
# CHECK-INST: pvcmpu.lo %v11, 63, %v22, %vm11
19+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0xb9]
20+
pvcmpu.lo %v11, 63, %v22, %vm11
21+
22+
# CHECK-INST: pvcmpu.up %v11, %vix, %v22, %vm11
23+
# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x8b,0xb9]
24+
pvcmpu.up %v11, %vix, %v22, %vm11
25+
26+
# CHECK-INST: pvcmpu %v12, %v20, %v22, %vm12
27+
# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xcc,0xb9]
28+
pvcmpu %v12, %v20, %v22, %vm12

llvm/test/MC/VE/VCMS.s

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# RUN: llvm-mc -triple=ve --show-encoding < %s \
2+
# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
4+
# RUN: | FileCheck %s --check-prefixes=CHECK-INST
5+
6+
# CHECK-INST: vmaxs.w.sx %v11, %s20, %v22
7+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0x8a]
8+
vmaxs.w.sx %v11, %s20, %v22
9+
10+
# CHECK-INST: vmaxs.w.sx %vix, %vix, %vix
11+
# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x8a]
12+
vmaxs.w.sx %vix, %vix, %vix
13+
14+
# CHECK-INST: pvmaxs.lo %vix, 22, %v22
15+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0x8a]
16+
vmaxs.w.zx %vix, 22, %v22
17+
18+
# CHECK-INST: pvmaxs.lo %vix, 22, %v22
19+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0x8a]
20+
vmaxs.w %vix, 22, %v22
21+
22+
# CHECK-INST: pvmaxs.lo %v11, 63, %v22, %vm11
23+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0x8a]
24+
pvmaxs.lo %v11, 63, %v22, %vm11
25+
26+
# CHECK-INST: vmaxs.w.sx %v11, 63, %v22, %vm11
27+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0x8a]
28+
pvmaxs.lo.sx %v11, 63, %v22, %vm11
29+
30+
# CHECK-INST: pvmaxs.lo %v11, 63, %v22, %vm11
31+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0x8a]
32+
pvmaxs.lo.zx %v11, 63, %v22, %vm11
33+
34+
# CHECK-INST: pvmaxs.up %v11, %vix, %v22, %vm11
35+
# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x8b,0x8a]
36+
pvmaxs.up %v11, %vix, %v22, %vm11
37+
38+
# CHECK-INST: pvmaxs %v12, %v20, %v22, %vm12
39+
# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xcc,0x8a]
40+
pvmaxs %v12, %v20, %v22, %vm12
41+
42+
# CHECK-INST: vmins.w.sx %v11, %s20, %v22
43+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x30,0x8a]
44+
vmins.w.sx %v11, %s20, %v22
45+
46+
# CHECK-INST: vmins.w.sx %vix, %vix, %vix
47+
# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x10,0x8a]
48+
vmins.w.sx %vix, %vix, %vix
49+
50+
# CHECK-INST: pvmins.lo %vix, 22, %v22
51+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x70,0x8a]
52+
vmins.w.zx %vix, 22, %v22
53+
54+
# CHECK-INST: pvmins.lo %vix, 22, %v22
55+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x70,0x8a]
56+
vmins.w %vix, 22, %v22
57+
58+
# CHECK-INST: pvmins.lo %v11, 63, %v22, %vm11
59+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x7b,0x8a]
60+
pvmins.lo %v11, 63, %v22, %vm11
61+
62+
# CHECK-INST: vmins.w.sx %v11, 63, %v22, %vm11
63+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x3b,0x8a]
64+
pvmins.lo.sx %v11, 63, %v22, %vm11
65+
66+
# CHECK-INST: pvmins.lo %v11, 63, %v22, %vm11
67+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x7b,0x8a]
68+
pvmins.lo.zx %v11, 63, %v22, %vm11
69+
70+
# CHECK-INST: pvmins.up %v11, %vix, %v22, %vm11
71+
# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x9b,0x8a]
72+
pvmins.up %v11, %vix, %v22, %vm11
73+
74+
# CHECK-INST: pvmins %v12, %v20, %v22, %vm12
75+
# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xdc,0x8a]
76+
pvmins %v12, %v20, %v22, %vm12

llvm/test/MC/VE/VCMX.s

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# RUN: llvm-mc -triple=ve --show-encoding < %s \
2+
# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
4+
# RUN: | FileCheck %s --check-prefixes=CHECK-INST
5+
6+
# CHECK-INST: vmaxs.l %v11, %s20, %v22
7+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0x9a]
8+
vmaxs.l %v11, %s20, %v22
9+
10+
# CHECK-INST: vmaxs.l %vix, %vix, %vix
11+
# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0x9a]
12+
vmaxs.l %vix, %vix, %vix
13+
14+
# CHECK-INST: vmaxs.l %vix, 22, %v22
15+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x20,0x9a]
16+
vmaxs.l %vix, 22, %v22
17+
18+
# CHECK-INST: vmaxs.l %v11, 63, %v22, %vm11
19+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0x9a]
20+
vmaxs.l %v11, 63, %v22, %vm11
21+
22+
# CHECK-INST: vmaxs.l %v11, %v23, %v22, %vm11
23+
# CHECK-ENCODING: encoding: [0x00,0x16,0x17,0x0b,0x00,0x00,0x0b,0x9a]
24+
vmaxs.l %v11, %v23, %v22, %vm11
25+
26+
# CHECK-INST: vmins.l %v11, %s20, %v22
27+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x30,0x9a]
28+
vmins.l %v11, %s20, %v22
29+
30+
# CHECK-INST: vmins.l %vix, %vix, %vix
31+
# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x10,0x9a]
32+
vmins.l %vix, %vix, %vix
33+
34+
# CHECK-INST: vmins.l %vix, 22, %v22
35+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x30,0x9a]
36+
vmins.l %vix, 22, %v22
37+
38+
# CHECK-INST: vmins.l %v11, 63, %v22, %vm11
39+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x3b,0x9a]
40+
vmins.l %v11, 63, %v22, %vm11
41+
42+
# CHECK-INST: vmins.l %v11, %v23, %v22, %vm11
43+
# CHECK-ENCODING: encoding: [0x00,0x16,0x17,0x0b,0x00,0x00,0x1b,0x9a]
44+
vmins.l %v11, %v23, %v22, %vm11

llvm/test/MC/VE/VCPS.s

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# RUN: llvm-mc -triple=ve --show-encoding < %s \
2+
# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
4+
# RUN: | FileCheck %s --check-prefixes=CHECK-INST
5+
6+
# CHECK-INST: vcmps.w.sx %v11, %s20, %v22
7+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0xfa]
8+
vcmps.w.sx %v11, %s20, %v22
9+
10+
# CHECK-INST: vcmps.w.sx %vix, %vix, %vix
11+
# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0xfa]
12+
vcmps.w.sx %vix, %vix, %vix
13+
14+
# CHECK-INST: pvcmps.lo %vix, 22, %v22
15+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0xfa]
16+
vcmps.w.zx %vix, 22, %v22
17+
18+
# CHECK-INST: pvcmps.lo %vix, 22, %v22
19+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x60,0xfa]
20+
vcmps.w %vix, 22, %v22
21+
22+
# CHECK-INST: pvcmps.lo %v11, 63, %v22, %vm11
23+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0xfa]
24+
pvcmps.lo %v11, 63, %v22, %vm11
25+
26+
# CHECK-INST: vcmps.w.sx %v11, 63, %v22, %vm11
27+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0xfa]
28+
pvcmps.lo.sx %v11, 63, %v22, %vm11
29+
30+
# CHECK-INST: pvcmps.lo %v11, 63, %v22, %vm11
31+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x6b,0xfa]
32+
pvcmps.lo.zx %v11, 63, %v22, %vm11
33+
34+
# CHECK-INST: pvcmps.up %v11, %vix, %v22, %vm11
35+
# CHECK-ENCODING: encoding: [0x00,0x16,0xff,0x0b,0x00,0x00,0x8b,0xfa]
36+
pvcmps.up %v11, %vix, %v22, %vm11
37+
38+
# CHECK-INST: pvcmps %v12, %v20, %v22, %vm12
39+
# CHECK-ENCODING: encoding: [0x00,0x16,0x14,0x0c,0x00,0x00,0xcc,0xfa]
40+
pvcmps %v12, %v20, %v22, %vm12

llvm/test/MC/VE/VCPX.s

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# RUN: llvm-mc -triple=ve --show-encoding < %s \
2+
# RUN: | FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
3+
# RUN: llvm-mc -triple=ve -filetype=obj < %s | llvm-objdump -d - \
4+
# RUN: | FileCheck %s --check-prefixes=CHECK-INST
5+
6+
# CHECK-INST: vcmps.l %v11, %s20, %v22
7+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x94,0x20,0xba]
8+
vcmps.l %v11, %s20, %v22
9+
10+
# CHECK-INST: vcmps.l %vix, %vix, %vix
11+
# CHECK-ENCODING: encoding: [0x00,0xff,0xff,0xff,0x00,0x00,0x00,0xba]
12+
vcmps.l %vix, %vix, %vix
13+
14+
# CHECK-INST: vcmps.l %vix, 22, %v22
15+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0xff,0x00,0x16,0x20,0xba]
16+
vcmps.l %vix, 22, %v22
17+
18+
# CHECK-INST: vcmps.l %v11, 63, %v22, %vm11
19+
# CHECK-ENCODING: encoding: [0x00,0x16,0x00,0x0b,0x00,0x3f,0x2b,0xba]
20+
vcmps.l %v11, 63, %v22, %vm11
21+
22+
# CHECK-INST: vcmps.l %v11, %v23, %v22, %vm11
23+
# CHECK-ENCODING: encoding: [0x00,0x16,0x17,0x0b,0x00,0x00,0x0b,0xba]
24+
vcmps.l %v11, %v23, %v22, %vm11

0 commit comments

Comments
 (0)