Skip to content

Commit 61f51b2

Browse files
author
Aleksei Romanov
committed
[RISCV][AsmParser] Support parsing vsetvl omitting LMUL
This enables support of vset{i}vli instructions omitting LMUL
1 parent a25e89f commit 61f51b2

File tree

3 files changed

+46
-36
lines changed

3 files changed

+46
-36
lines changed

llvm/lib/Target/RISCV/AsmParser/RISCVAsmParser.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2222,8 +2222,14 @@ bool RISCVAsmParser::parseVTypeToken(const AsmToken &Tok, VTypeState &State,
22222222
State = VTypeState_LMUL;
22232223
return false;
22242224
case VTypeState_LMUL: {
2225-
if (!Identifier.consume_front("m"))
2226-
break;
2225+
// Set LMUL to default if it is omitted.
2226+
if (!Identifier.consume_front("m")) {
2227+
Lmul = 1;
2228+
Fractional = false;
2229+
State = VTypeState_TailPolicy;
2230+
return parseVTypeToken(Tok, State, Sew, Lmul, Fractional, TailAgnostic,
2231+
MaskAgnostic);
2232+
}
22272233
Fractional = Identifier.consume_front("f");
22282234
if (Identifier.getAsInteger(10, Lmul))
22292235
break;
@@ -2320,7 +2326,7 @@ bool RISCVAsmParser::generateVTypeError(SMLoc ErrorLoc) {
23202326
return Error(
23212327
ErrorLoc,
23222328
"operand must be "
2323-
"e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]");
2329+
"e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}");
23242330
}
23252331

23262332
ParseStatus RISCVAsmParser::parseMaskReg(OperandVector &Operands) {

llvm/test/MC/RISCV/rvv/invalid.s

Lines changed: 30 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,99 +1,96 @@
11
# RUN: not llvm-mc -triple=riscv64 --mattr=+v --mattr=+f %s 2>&1 \
22
# RUN: | FileCheck %s --check-prefix=CHECK-ERROR
33

4-
vsetvli a2, a0, e8, ta, ma
5-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
6-
74
vsetivli a2, 32, e8,m1
8-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
5+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
96

107
vsetivli a2, zero, e8,m1
11-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
8+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
129

1310
vsetivli a2, 5, (1 << 10)
14-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
11+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
1512

1613
vsetivli a2, 5, 0x400
17-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
14+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
1815

1916
vsetivli a2, 5, e31
20-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
17+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
2118

2219
vsetvli a2, a0, (1 << 11)
23-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
20+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
2421

2522
vsetvli a2, a0, 0x800
26-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
23+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
2724

2825

2926
vsetvli a2, a0, e31
30-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
27+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
3128

3229
vsetvli a2, a0, e32,m3
33-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
30+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
3431

3532
vsetvli a2, a0, m1,e32
36-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
33+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
3734

3835
vsetvli a2, a0, e32,m16
39-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
36+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
4037

4138
vsetvli a2, a0, e128,m8
42-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
39+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
4340

4441
vsetvli a2, a0, e256,m8
45-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
42+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
4643

4744
vsetvli a2, a0, e512,m8
48-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
45+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
4946

5047
vsetvli a2, a0, e1024,m8
51-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
48+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
5249

5350
vsetvli a2, a0, e2048,m8
54-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
51+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
5552

5653
vsetvli a2, a0, e1,m8
57-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
54+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
5855

5956
vsetvli a2, a0, e8,m1,tx
60-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
57+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
6158

6259
vsetvli a2, a0, e8,m1,ta,mx
63-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
60+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
6461

6562
vsetvli a2, a0, e8,m1,ma
66-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
63+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
6764

6865
vsetvli a2, a0, e8,m1,mu
69-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
66+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
7067

7168
vsetvli a2, a0, e8x,m1,tu,mu
72-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
69+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
7370

7471
vsetvli a2, a0, e8,m1z,tu,mu
75-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
72+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
7673

7774
vsetvli a2, a0, e8,mf1,tu,mu
78-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
75+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
7976

8077
vsetvli a2, a0, e8,m1,tu,mut
81-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
78+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
8279

8380
vsetvli a2, a0, e8,m1,tut,mu
84-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
81+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
8582

8683
vsetvli a2, a0, e8
87-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
84+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
8885

8986
vsetvli a2, a0, e8,m1
90-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
87+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
9188

9289
vsetvli a2, a0, e8,m1,ta
93-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
90+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
9491

9592
vsetvli a2, a0, e8,1,ta,ma
96-
# CHECK-ERROR: operand must be e[8|16|32|64],m[1|2|4|8|f2|f4|f8],[ta|tu],[ma|mu]
93+
# CHECK-ERROR: operand must be e{8|16|32|64},[m{1|2|4|8|f2|f4|f8},]{ta|tu},{ma|mu}
9794

9895
vadd.vv v1, v3, v2, v4.t
9996
# CHECK-ERROR: operand must be v0.t

llvm/test/MC/RISCV/rvv/vsetvl.s

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@
1010
# RUN: llvm-mc -triple=riscv64 -filetype=obj --mattr=+v %s \
1111
# RUN: | llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-UNKNOWN
1212

13+
# LMUL is omitted.
14+
vsetvli a2, a0, e8, ta, ma
15+
# CHECK-INST: vsetvli a2, a0, e8, m1, ta, ma
16+
# CHECK-ENCODING: [0x57,0x76,0x05,0x0c]
17+
# CHECK-ERROR: instruction requires the following: 'V' (Vector Extension for Application Processors), 'Zve32x' (Vector Extensions for Embedded Processors){{$}}
18+
# CHECK-UNKNOWN: 0c057657 <unknown>
19+
1320
# reserved filed: vlmul[2:0]=4, vsew[2:0]=0b1xx, non-zero bits 8/9/10.
1421
vsetvli a2, a0, 0x224
1522
# CHECK-INST: vsetvli a2, a0, 548

0 commit comments

Comments
 (0)