Skip to content

Commit f7ebf19

Browse files
committed
Add missing overlap check, tests for same, and tests for masked forms
1 parent bdd60bb commit f7ebf19

File tree

3 files changed

+40
-0
lines changed

3 files changed

+40
-0
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoXRivos.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717

1818
let Predicates = [HasVendorXRivosVizip], DecoderNamespace = "XRivos",
19+
Constraints = "@earlyclobber $vd", RVVConstraint = Vrgather,
1920
Inst<6-0> = OPC_CUSTOM_2.Value in {
2021
defm RV_VZIPEVEN_V : VALU_IV_V<"rv.vzipeven", 0b001100>;
2122
defm RV_VZIPODD_V : VALU_IV_V<"rv.vzipodd", 0b011100>;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# RUN: not llvm-mc -triple riscv64 -mattr=+experimental-xrivosvizip < %s 2>&1 | \
2+
# RUN: FileCheck %s
3+
4+
# Disallowed source/dest overlap cases
5+
# CHECK: error: the destination vector register group cannot overlap the source vector register group
6+
rv.vzipeven.vv v2, v2, v3
7+
# CHECK: error: the destination vector register group cannot overlap the source vector register group
8+
rv.vzipeven.vv v3, v2, v3
9+
# CHECK: error: the destination vector register group cannot overlap the mask register
10+
rv.vzipeven.vv v0, v2, v3, v0.t

llvm/test/MC/RISCV/xrivosvizip-valid.s

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,48 @@
1212
# CHECK-ASM-AND-OBJ: rv.vzipeven.vv v1, v2, v3
1313
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x32]
1414
rv.vzipeven.vv v1, v2, v3
15+
# CHECK-ASM-AND-OBJ: rv.vzipeven.vv v1, v2, v3, v0.t
16+
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x30]
17+
rv.vzipeven.vv v1, v2, v3, v0.t
1518
# CHECK-ASM-AND-OBJ: rv.vzipodd.vv v1, v2, v3
1619
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x72]
1720
rv.vzipodd.vv v1, v2, v3
21+
# CHECK-ASM-AND-OBJ: rv.vzipodd.vv v1, v2, v3, v0.t
22+
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x70]
23+
rv.vzipodd.vv v1, v2, v3, v0.t
24+
1825
# CHECK-ASM-AND-OBJ: rv.vzip2a.vv v1, v2, v3
1926
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x12]
2027
rv.vzip2a.vv v1, v2, v3
28+
# CHECK-ASM-AND-OBJ: rv.vzip2a.vv v1, v2, v3, v0.t
29+
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x10]
30+
rv.vzip2a.vv v1, v2, v3, v0.t
2131
# CHECK-ASM-AND-OBJ: rv.vzip2b.vv v1, v2, v3
2232
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x52]
2333
rv.vzip2b.vv v1, v2, v3
34+
# CHECK-ASM-AND-OBJ: rv.vzip2b.vv v1, v2, v3, v0.t
35+
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x50]
36+
rv.vzip2b.vv v1, v2, v3, v0.t
37+
2438
# CHECK-ASM-AND-OBJ: rv.vunzip2a.vv v1, v2, v3
2539
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x22]
2640
rv.vunzip2a.vv v1, v2, v3
41+
# CHECK-ASM-AND-OBJ: rv.vunzip2a.vv v1, v2, v3, v0.t
42+
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x20]
43+
rv.vunzip2a.vv v1, v2, v3, v0.t
2744
# CHECK-ASM-AND-OBJ: rv.vunzip2b.vv v1, v2, v3
2845
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x62]
2946
rv.vunzip2b.vv v1, v2, v3
47+
# CHECK-ASM-AND-OBJ: rv.vunzip2b.vv v1, v2, v3, v0.t
48+
# CHECK-ASM: encoding: [0xdb,0x80,0x21,0x60]
49+
rv.vunzip2b.vv v1, v2, v3, v0.t
50+
51+
# Overlap between source registers *is* allowed
52+
53+
# CHECK-ASM-AND-OBJ: rv.vzipeven.vv v1, v2, v2
54+
# CHECK-ASM: encoding: [0xdb,0x00,0x21,0x32]
55+
rv.vzipeven.vv v1, v2, v2
3056

57+
# CHECK-ASM-AND-OBJ: rv.vzipeven.vv v1, v2, v0, v0.t
58+
# CHECK-ASM: encoding: [0xdb,0x00,0x20,0x30]
59+
rv.vzipeven.vv v1, v2, v0, v0.t

0 commit comments

Comments
 (0)