Skip to content

Commit dc1dc60

Browse files
committed
[RISCV][MC][test] Test for current behaviour around default FP rounding modes
The newly added tests check which rounding mode is used by default, and that it is printed when aliases are disabled but not otherwise. These tests will be used in llvm#67555.
1 parent 62205c2 commit dc1dc60

File tree

2 files changed

+357
-0
lines changed

2 files changed

+357
-0
lines changed
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
1+
# RUN: llvm-mc %s -triple=riscv64 -mattr=+d,+zfh,+experimental-zfbfmin -riscv-no-aliases \
2+
# RUN: | FileCheck -check-prefixes=CHECK-INST %s
3+
# RUN: llvm-mc %s -triple=riscv64 -mattr=+d,+zfh,+experimental-zfbfmin \
4+
# RUN: | FileCheck -check-prefixes=CHECK-ALIAS %s
5+
# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+d,+zfh,+experimental-zfbfmin < %s \
6+
# RUN: | llvm-objdump -M no-aliases --mattr=+d,+zfh,+experimental-zfbfmin -d -r - \
7+
# RUN: | FileCheck -check-prefixes=CHECK-INST %s
8+
# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+d,+zfh,+experimental-zfbfmin < %s \
9+
# RUN: | llvm-objdump --mattr=+d,+zfh,+experimental-zfbfmin -d -r - \
10+
# RUN: | FileCheck -check-prefixes=CHECK-ALIAS %s
11+
12+
# This test aims to check what the default rounding mode is for a given
13+
# instruction if it's not specified, and ensures that it isn't printed when
14+
# aliases are enabled but is printed otherwise. Instructions aren't listed
15+
# exhaustively, but special attention is given to the fcvt instructions given
16+
# that those that never round often default to frm=0b000 for historical
17+
# reasons.
18+
19+
# F instructions
20+
21+
# CHECK-INST: fmadd.s fa0, fa1, fa2, fa3, dyn{{$}}
22+
# CHECK-ALIAS: fmadd.s fa0, fa1, fa2, fa3{{$}}
23+
fmadd.s fa0, fa1, fa2, fa3
24+
25+
# CHECK-INST: fadd.s fa0, fa1, fa2, dyn{{$}}
26+
# CHECK-ALIAS: fadd.s fa0, fa1, fa2{{$}}
27+
fadd.s fa0, fa1, fa2
28+
29+
# CHECK-INST: fcvt.w.s a0, fa0, dyn{{$}}
30+
# CHECK-ALIAS: fcvt.w.s a0, fa0{{$}}
31+
fcvt.w.s a0, fa0
32+
33+
# CHECK-INST: fcvt.wu.s a0, fa0, dyn{{$}}
34+
# CHECK-ALIAS: fcvt.wu.s a0, fa0{{$}}
35+
fcvt.wu.s a0, fa0
36+
37+
# CHECK-INST: fcvt.s.w fa0, a0, dyn{{$}}
38+
# CHECK-ALIAS: fcvt.s.w fa0, a0{{$}}
39+
fcvt.s.w fa0, a0
40+
41+
# CHECK-INST: fcvt.s.wu fa0, a0, dyn{{$}}
42+
# CHECK-ALIAS: fcvt.s.wu fa0, a0{{$}}
43+
fcvt.s.wu fa0, a0
44+
45+
# CHECK-INST: fcvt.l.s a0, fa0, dyn{{$}}
46+
# CHECK-ALIAS: fcvt.l.s a0, fa0{{$}}
47+
fcvt.l.s a0, fa0
48+
49+
# CHECK-INST: fcvt.lu.s a0, fa0, dyn{{$}}
50+
# CHECK-ALIAS: fcvt.lu.s a0, fa0{{$}}
51+
fcvt.lu.s a0, fa0
52+
53+
# CHECK-INST: fcvt.s.l fa0, a0, dyn{{$}}
54+
# CHECK-ALIAS: fcvt.s.l fa0, a0{{$}}
55+
fcvt.s.l fa0, a0
56+
57+
# CHECK-INST: fcvt.s.lu fa0, a0, dyn{{$}}
58+
# CHECK-ALIAS: fcvt.s.lu fa0, a0{{$}}
59+
fcvt.s.lu fa0, a0
60+
61+
# D instructions
62+
63+
# CHECK-INST: fmadd.d fa0, fa1, fa2, fa3, dyn{{$}}
64+
# CHECK-ALIAS: fmadd.d fa0, fa1, fa2, fa3{{$}}
65+
fmadd.d fa0, fa1, fa2, fa3
66+
67+
# CHECK-INST: fadd.d fa0, fa1, fa2, dyn{{$}}
68+
# CHECK-ALIAS: fadd.d fa0, fa1, fa2{{$}}
69+
fadd.d fa0, fa1, fa2
70+
71+
# CHECK-INST: fcvt.s.d fa0, fa0, dyn{{$}}
72+
# CHECK-ALIAS: fcvt.s.d fa0, fa0{{$}}
73+
fcvt.s.d fa0, fa0
74+
75+
# FIXME: fcvt.d.s should have a default rounding mode.
76+
# CHECK-INST: fcvt.d.s fa0, fa0{{$}}
77+
# CHECK-ALIAS: fcvt.d.s fa0, fa0{{$}}
78+
fcvt.d.s fa0, fa0
79+
80+
# CHECK-INST: fcvt.w.d a0, fa0, dyn{{$}}
81+
# CHECK-ALIAS: fcvt.w.d a0, fa0{{$}}
82+
fcvt.w.d a0, fa0
83+
84+
# CHECK-INST: fcvt.wu.d a0, fa0, dyn{{$}}
85+
# CHECK-ALIAS: fcvt.wu.d a0, fa0{{$}}
86+
fcvt.wu.d a0, fa0
87+
88+
# FIXME: fcvt.d.w should have a default rounding mode.
89+
# CHECK-INST: fcvt.d.w fa0, a0{{$}}
90+
# CHECK-ALIAS: fcvt.d.w fa0, a0{{$}}
91+
fcvt.d.w fa0, a0
92+
93+
# FIXME: fcvt.d.wu should have a default rounding mode.
94+
# CHECK-INST: fcvt.d.wu fa0, a0{{$}}
95+
# CHECK-ALIAS: fcvt.d.wu fa0, a0{{$}}
96+
fcvt.d.wu fa0, a0
97+
98+
# CHECK-INST: fcvt.l.d a0, fa0, dyn{{$}}
99+
# CHECK-ALIAS: fcvt.l.d a0, fa0{{$}}
100+
fcvt.l.d a0, fa0
101+
102+
# CHECK-INST: fcvt.lu.d a0, fa0, dyn{{$}}
103+
# CHECK-ALIAS: fcvt.lu.d a0, fa0{{$}}
104+
fcvt.lu.d a0, fa0
105+
106+
# CHECK-INST: fcvt.d.l fa0, a0, dyn{{$}}
107+
# CHECK-ALIAS: fcvt.d.l fa0, a0{{$}}
108+
fcvt.d.l fa0, a0
109+
110+
# CHECK-INST: fcvt.d.lu fa0, a0, dyn{{$}}
111+
# CHECK-ALIAS: fcvt.d.lu fa0, a0{{$}}
112+
fcvt.d.lu fa0, a0
113+
114+
# Zfh instructions
115+
116+
# CHECK-INST: fmadd.h fa0, fa1, fa2, fa3, dyn{{$}}
117+
# CHECK-ALIAS: fmadd.h fa0, fa1, fa2, fa3{{$}}
118+
fmadd.h fa0, fa1, fa2, fa3
119+
120+
# CHECK-INST: fadd.h fa0, fa1, fa2, dyn{{$}}
121+
# CHECK-ALIAS: fadd.h fa0, fa1, fa2{{$}}
122+
fadd.h fa0, fa1, fa2
123+
124+
# FIXME: fcvt.s.h should have a default rounding mode.
125+
# CHECK-INST: fcvt.s.h fa0, fa0{{$}}
126+
# CHECK-ALIAS: fcvt.s.h fa0, fa0{{$}}
127+
fcvt.s.h fa0, fa0
128+
129+
# CHECK-INST: fcvt.h.s fa0, fa0, dyn{{$}}
130+
# CHECK-ALIAS: fcvt.h.s fa0, fa0{{$}}
131+
fcvt.h.s fa0, fa0
132+
133+
# FIXME: fcvt.d.h should have a default rounding mode.
134+
# CHECK-INST: fcvt.d.h fa0, fa0{{$}}
135+
# CHECK-ALIAS: fcvt.d.h fa0, fa0{{$}}
136+
fcvt.d.h fa0, fa0
137+
138+
# CHECK-INST: fcvt.h.d fa0, fa0, dyn{{$}}
139+
# CHECK-ALIAS: fcvt.h.d fa0, fa0{{$}}
140+
fcvt.h.d fa0, fa0
141+
142+
# CHECK-INST: fcvt.w.h a0, fa0, dyn{{$}}
143+
# CHECK-ALIAS: fcvt.w.h a0, fa0{{$}}
144+
fcvt.w.h a0, fa0
145+
146+
# CHECK-INST: fcvt.wu.h a0, fa0, dyn{{$}}
147+
# CHECK-ALIAS: fcvt.wu.h a0, fa0{{$}}
148+
fcvt.wu.h a0, fa0
149+
150+
# CHECK-INST: fcvt.h.w fa0, a0, dyn{{$}}
151+
# CHECK-ALIAS: fcvt.h.w fa0, a0{{$}}
152+
fcvt.h.w fa0, a0
153+
154+
# CHECK-INST: fcvt.h.wu fa0, a0, dyn{{$}}
155+
# CHECK-ALIAS: fcvt.h.wu fa0, a0{{$}}
156+
fcvt.h.wu fa0, a0
157+
158+
# CHECK-INST: fcvt.l.h a0, fa0, dyn{{$}}
159+
# CHECK-ALIAS: fcvt.l.h a0, fa0{{$}}
160+
fcvt.l.h a0, fa0
161+
162+
# CHECK-INST: fcvt.lu.h a0, fa0, dyn{{$}}
163+
# CHECK-ALIAS: fcvt.lu.h a0, fa0{{$}}
164+
fcvt.lu.h a0, fa0
165+
166+
# CHECK-INST: fcvt.h.l fa0, a0, dyn{{$}}
167+
# CHECK-ALIAS: fcvt.h.l fa0, a0{{$}}
168+
fcvt.h.l fa0, a0
169+
170+
# CHECK-INST: fcvt.h.lu fa0, a0, dyn{{$}}
171+
# CHECK-ALIAS: fcvt.h.lu fa0, a0{{$}}
172+
fcvt.h.lu fa0, a0
173+
174+
# Zfbfmin instructions
175+
176+
# CHECK-INST: fcvt.s.bf16 fa0, fa0, dyn{{$}}
177+
# CHECK-ALIAS: fcvt.s.bf16 fa0, fa0{{$}}
178+
fcvt.s.bf16 fa0, fa0
179+
180+
# CHECK-INST: fcvt.bf16.s fa0, fa0, dyn{{$}}
181+
# CHECK-ALIAS: fcvt.bf16.s fa0, fa0{{$}}
182+
fcvt.bf16.s fa0, fa0
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
# RUN: llvm-mc %s -triple=riscv64 -mattr=+zdinx,+zhinx -riscv-no-aliases \
2+
# RUN: | FileCheck -check-prefixes=CHECK-INST %s
3+
# RUN: llvm-mc %s -triple=riscv64 -mattr=+zdinx,+zhinx \
4+
# RUN: | FileCheck -check-prefixes=CHECK-ALIAS %s
5+
# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+zdinx,+zhinx < %s \
6+
# RUN: | llvm-objdump -M no-aliases --mattr=+zdinx,+zhinx -d -r - \
7+
# RUN: | FileCheck -check-prefixes=CHECK-INST %s
8+
# RUN: llvm-mc -filetype=obj -triple=riscv64 -mattr=+zdinx,+zhinx < %s \
9+
# RUN: | llvm-objdump --mattr=+zdinx,+zhinx -d -r - \
10+
# RUN: | FileCheck -check-prefixes=CHECK-ALIAS %s
11+
12+
# This test aims to check what the default rounding mode is for a given
13+
# instruction if it's not specified, and ensures that it isn't printed when
14+
# aliases are enabled but is printed otherwise. Instructions aren't listed
15+
# exhaustively, but special attention is given to the fcvt instructions given
16+
# that those that never round often default to frm=0b000 for historical
17+
# reasons.
18+
#
19+
# These test cases are copied from fp-default-round-mode.s, but changed to use
20+
# GPRs.
21+
22+
# Zfinx instructions
23+
24+
# CHECK-INST: fmadd.s a0, a1, a2, a3, dyn{{$}}
25+
# CHECK-ALIAS: fmadd.s a0, a1, a2, a3{{$}}
26+
fmadd.s a0, a1, a2, a3
27+
28+
# CHECK-INST: fadd.s a0, a1, a2, dyn{{$}}
29+
# CHECK-ALIAS: fadd.s a0, a1, a2{{$}}
30+
fadd.s a0, a1, a2
31+
32+
# CHECK-INST: fcvt.w.s a0, a0, dyn{{$}}
33+
# CHECK-ALIAS: fcvt.w.s a0, a0{{$}}
34+
fcvt.w.s a0, a0
35+
36+
# CHECK-INST: fcvt.wu.s a0, a0, dyn{{$}}
37+
# CHECK-ALIAS: fcvt.wu.s a0, a0{{$}}
38+
fcvt.wu.s a0, a0
39+
40+
# CHECK-INST: fcvt.s.w a0, a0, dyn{{$}}
41+
# CHECK-ALIAS: fcvt.s.w a0, a0{{$}}
42+
fcvt.s.w a0, a0
43+
44+
# CHECK-INST: fcvt.s.wu a0, a0, dyn{{$}}
45+
# CHECK-ALIAS: fcvt.s.wu a0, a0{{$}}
46+
fcvt.s.wu a0, a0
47+
48+
# CHECK-INST: fcvt.l.s a0, a0, dyn{{$}}
49+
# CHECK-ALIAS: fcvt.l.s a0, a0{{$}}
50+
fcvt.l.s a0, a0
51+
52+
# CHECK-INST: fcvt.lu.s a0, a0, dyn{{$}}
53+
# CHECK-ALIAS: fcvt.lu.s a0, a0{{$}}
54+
fcvt.lu.s a0, a0
55+
56+
# CHECK-INST: fcvt.s.l a0, a0, dyn{{$}}
57+
# CHECK-ALIAS: fcvt.s.l a0, a0{{$}}
58+
fcvt.s.l a0, a0
59+
60+
# CHECK-INST: fcvt.s.lu a0, a0, dyn{{$}}
61+
# CHECK-ALIAS: fcvt.s.lu a0, a0{{$}}
62+
fcvt.s.lu a0, a0
63+
64+
# Zdinx instructions
65+
66+
# CHECK-INST: fmadd.d a0, a1, a2, a3, dyn{{$}}
67+
# CHECK-ALIAS: fmadd.d a0, a1, a2, a3{{$}}
68+
fmadd.d a0, a1, a2, a3
69+
70+
# CHECK-INST: fadd.d a0, a1, a2, dyn{{$}}
71+
# CHECK-ALIAS: fadd.d a0, a1, a2{{$}}
72+
fadd.d a0, a1, a2
73+
74+
# CHECK-INST: fcvt.s.d a0, a0, dyn{{$}}
75+
# CHECK-ALIAS: fcvt.s.d a0, a0{{$}}
76+
fcvt.s.d a0, a0
77+
78+
# FIXME: fcvt.d.s should have a default rounding mode.
79+
# CHECK-INST: fcvt.d.s a0, a0{{$}}
80+
# CHECK-ALIAS: fcvt.d.s a0, a0{{$}}
81+
fcvt.d.s a0, a0
82+
83+
# CHECK-INST: fcvt.w.d a0, a0, dyn{{$}}
84+
# CHECK-ALIAS: fcvt.w.d a0, a0{{$}}
85+
fcvt.w.d a0, a0
86+
87+
# CHECK-INST: fcvt.wu.d a0, a0, dyn{{$}}
88+
# CHECK-ALIAS: fcvt.wu.d a0, a0{{$}}
89+
fcvt.wu.d a0, a0
90+
91+
# FIXME: fcvt.d.w should have a default rounding mode.
92+
# CHECK-INST: fcvt.d.w a0, a0{{$}}
93+
# CHECK-ALIAS: fcvt.d.w a0, a0{{$}}
94+
fcvt.d.w a0, a0
95+
96+
# FIXME: fcvt.d.wu should have a default rounding mode.
97+
# CHECK-INST: fcvt.d.wu a0, a0{{$}}
98+
# CHECK-ALIAS: fcvt.d.wu a0, a0{{$}}
99+
fcvt.d.wu a0, a0
100+
101+
# CHECK-INST: fcvt.l.d a0, a0, dyn{{$}}
102+
# CHECK-ALIAS: fcvt.l.d a0, a0{{$}}
103+
fcvt.l.d a0, a0
104+
105+
# CHECK-INST: fcvt.lu.d a0, a0, dyn{{$}}
106+
# CHECK-ALIAS: fcvt.lu.d a0, a0{{$}}
107+
fcvt.lu.d a0, a0
108+
109+
# CHECK-INST: fcvt.d.l a0, a0, dyn{{$}}
110+
# CHECK-ALIAS: fcvt.d.l a0, a0{{$}}
111+
fcvt.d.l a0, a0
112+
113+
# CHECK-INST: fcvt.d.lu a0, a0, dyn{{$}}
114+
# CHECK-ALIAS: fcvt.d.lu a0, a0{{$}}
115+
fcvt.d.lu a0, a0
116+
117+
# Zhinx instructions
118+
119+
# CHECK-INST: fmadd.h a0, a1, a2, a3, dyn{{$}}
120+
# CHECK-ALIAS: fmadd.h a0, a1, a2, a3{{$}}
121+
fmadd.h a0, a1, a2, a3
122+
123+
# CHECK-INST: fadd.h a0, a1, a2, dyn{{$}}
124+
# CHECK-ALIAS: fadd.h a0, a1, a2{{$}}
125+
fadd.h a0, a1, a2
126+
127+
# FIXME: fcvt.s.h should have a default rounding mode.
128+
# CHECK-INST: fcvt.s.h a0, a0{{$}}
129+
# CHECK-ALIAS: fcvt.s.h a0, a0{{$}}
130+
fcvt.s.h a0, a0
131+
132+
# CHECK-INST: fcvt.h.s a0, a0, dyn{{$}}
133+
# CHECK-ALIAS: fcvt.h.s a0, a0{{$}}
134+
fcvt.h.s a0, a0
135+
136+
# FIXME: fcvt.d.h should have a default rounding mode.
137+
# CHECK-INST: fcvt.d.h a0, a0{{$}}
138+
# CHECK-ALIAS: fcvt.d.h a0, a0{{$}}
139+
fcvt.d.h a0, a0
140+
141+
# CHECK-INST: fcvt.h.d a0, a0, dyn{{$}}
142+
# CHECK-ALIAS: fcvt.h.d a0, a0{{$}}
143+
fcvt.h.d a0, a0
144+
145+
# CHECK-INST: fcvt.w.h a0, a0, dyn{{$}}
146+
# CHECK-ALIAS: fcvt.w.h a0, a0{{$}}
147+
fcvt.w.h a0, a0
148+
149+
# CHECK-INST: fcvt.wu.h a0, a0, dyn{{$}}
150+
# CHECK-ALIAS: fcvt.wu.h a0, a0{{$}}
151+
fcvt.wu.h a0, a0
152+
153+
# CHECK-INST: fcvt.h.w a0, a0, dyn{{$}}
154+
# CHECK-ALIAS: fcvt.h.w a0, a0{{$}}
155+
fcvt.h.w a0, a0
156+
157+
# CHECK-INST: fcvt.h.wu a0, a0, dyn{{$}}
158+
# CHECK-ALIAS: fcvt.h.wu a0, a0{{$}}
159+
fcvt.h.wu a0, a0
160+
161+
# CHECK-INST: fcvt.l.h a0, a0, dyn{{$}}
162+
# CHECK-ALIAS: fcvt.l.h a0, a0{{$}}
163+
fcvt.l.h a0, a0
164+
165+
# CHECK-INST: fcvt.lu.h a0, a0, dyn{{$}}
166+
# CHECK-ALIAS: fcvt.lu.h a0, a0{{$}}
167+
fcvt.lu.h a0, a0
168+
169+
# CHECK-INST: fcvt.h.l a0, a0, dyn{{$}}
170+
# CHECK-ALIAS: fcvt.h.l a0, a0{{$}}
171+
fcvt.h.l a0, a0
172+
173+
# CHECK-INST: fcvt.h.lu a0, a0, dyn{{$}}
174+
# CHECK-ALIAS: fcvt.h.lu a0, a0{{$}}
175+
fcvt.h.lu a0, a0

0 commit comments

Comments
 (0)