1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
2
; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+f,+d \
3
3
; RUN: -target-abi=ilp32d -verify-machineinstrs | FileCheck %s --check-prefix=RV32
4
+ ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv64 -mattr=+v,+f,+d \
5
+ ; RUN: -target-abi=lp64d -verify-machineinstrs | FileCheck %s --check-prefix=RV64-i32
4
6
; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+f,+d \
5
- ; RUN: -target-abi=lp64d -verify-machineinstrs | FileCheck %s --check-prefix=RV64
7
+ ; RUN: -target-abi=lp64d -verify-machineinstrs | FileCheck %s --check-prefix=RV64-i64
6
8
7
9
define <vscale x 1 x iXLen> @lrint_nxv1f32 (<vscale x 1 x float > %x ) {
8
10
; RV32-LABEL: lrint_nxv1f32:
@@ -11,12 +13,18 @@ define <vscale x 1 x iXLen> @lrint_nxv1f32(<vscale x 1 x float> %x) {
11
13
; RV32-NEXT: vfcvt.x.f.v v8, v8
12
14
; RV32-NEXT: ret
13
15
;
14
- ; RV64-LABEL: lrint_nxv1f32:
15
- ; RV64: # %bb.0:
16
- ; RV64-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
17
- ; RV64-NEXT: vfwcvt.x.f.v v9, v8
18
- ; RV64-NEXT: vmv1r.v v8, v9
19
- ; RV64-NEXT: ret
16
+ ; RV64-i32-LABEL: lrint_nxv1f32:
17
+ ; RV64-i32: # %bb.0:
18
+ ; RV64-i32-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
19
+ ; RV64-i32-NEXT: vfcvt.x.f.v v8, v8
20
+ ; RV64-i32-NEXT: ret
21
+ ;
22
+ ; RV64-i64-LABEL: lrint_nxv1f32:
23
+ ; RV64-i64: # %bb.0:
24
+ ; RV64-i64-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
25
+ ; RV64-i64-NEXT: vfwcvt.x.f.v v9, v8
26
+ ; RV64-i64-NEXT: vmv1r.v v8, v9
27
+ ; RV64-i64-NEXT: ret
20
28
%a = call <vscale x 1 x iXLen> @llvm.lrint.nxv1iXLen.nxv1f32 (<vscale x 1 x float > %x )
21
29
ret <vscale x 1 x iXLen> %a
22
30
}
@@ -29,12 +37,18 @@ define <vscale x 2 x iXLen> @lrint_nxv2f32(<vscale x 2 x float> %x) {
29
37
; RV32-NEXT: vfcvt.x.f.v v8, v8
30
38
; RV32-NEXT: ret
31
39
;
32
- ; RV64-LABEL: lrint_nxv2f32:
33
- ; RV64: # %bb.0:
34
- ; RV64-NEXT: vsetvli a0, zero, e32, m1, ta, ma
35
- ; RV64-NEXT: vfwcvt.x.f.v v10, v8
36
- ; RV64-NEXT: vmv2r.v v8, v10
37
- ; RV64-NEXT: ret
40
+ ; RV64-i32-LABEL: lrint_nxv2f32:
41
+ ; RV64-i32: # %bb.0:
42
+ ; RV64-i32-NEXT: vsetvli a0, zero, e32, m1, ta, ma
43
+ ; RV64-i32-NEXT: vfcvt.x.f.v v8, v8
44
+ ; RV64-i32-NEXT: ret
45
+ ;
46
+ ; RV64-i64-LABEL: lrint_nxv2f32:
47
+ ; RV64-i64: # %bb.0:
48
+ ; RV64-i64-NEXT: vsetvli a0, zero, e32, m1, ta, ma
49
+ ; RV64-i64-NEXT: vfwcvt.x.f.v v10, v8
50
+ ; RV64-i64-NEXT: vmv2r.v v8, v10
51
+ ; RV64-i64-NEXT: ret
38
52
%a = call <vscale x 2 x iXLen> @llvm.lrint.nxv2iXLen.nxv2f32 (<vscale x 2 x float > %x )
39
53
ret <vscale x 2 x iXLen> %a
40
54
}
@@ -47,12 +61,18 @@ define <vscale x 4 x iXLen> @lrint_nxv4f32(<vscale x 4 x float> %x) {
47
61
; RV32-NEXT: vfcvt.x.f.v v8, v8
48
62
; RV32-NEXT: ret
49
63
;
50
- ; RV64-LABEL: lrint_nxv4f32:
51
- ; RV64: # %bb.0:
52
- ; RV64-NEXT: vsetvli a0, zero, e32, m2, ta, ma
53
- ; RV64-NEXT: vfwcvt.x.f.v v12, v8
54
- ; RV64-NEXT: vmv4r.v v8, v12
55
- ; RV64-NEXT: ret
64
+ ; RV64-i32-LABEL: lrint_nxv4f32:
65
+ ; RV64-i32: # %bb.0:
66
+ ; RV64-i32-NEXT: vsetvli a0, zero, e32, m2, ta, ma
67
+ ; RV64-i32-NEXT: vfcvt.x.f.v v8, v8
68
+ ; RV64-i32-NEXT: ret
69
+ ;
70
+ ; RV64-i64-LABEL: lrint_nxv4f32:
71
+ ; RV64-i64: # %bb.0:
72
+ ; RV64-i64-NEXT: vsetvli a0, zero, e32, m2, ta, ma
73
+ ; RV64-i64-NEXT: vfwcvt.x.f.v v12, v8
74
+ ; RV64-i64-NEXT: vmv4r.v v8, v12
75
+ ; RV64-i64-NEXT: ret
56
76
%a = call <vscale x 4 x iXLen> @llvm.lrint.nxv4iXLen.nxv4f32 (<vscale x 4 x float > %x )
57
77
ret <vscale x 4 x iXLen> %a
58
78
}
@@ -65,12 +85,18 @@ define <vscale x 8 x iXLen> @lrint_nxv8f32(<vscale x 8 x float> %x) {
65
85
; RV32-NEXT: vfcvt.x.f.v v8, v8
66
86
; RV32-NEXT: ret
67
87
;
68
- ; RV64-LABEL: lrint_nxv8f32:
69
- ; RV64: # %bb.0:
70
- ; RV64-NEXT: vsetvli a0, zero, e32, m4, ta, ma
71
- ; RV64-NEXT: vfwcvt.x.f.v v16, v8
72
- ; RV64-NEXT: vmv8r.v v8, v16
73
- ; RV64-NEXT: ret
88
+ ; RV64-i32-LABEL: lrint_nxv8f32:
89
+ ; RV64-i32: # %bb.0:
90
+ ; RV64-i32-NEXT: vsetvli a0, zero, e32, m4, ta, ma
91
+ ; RV64-i32-NEXT: vfcvt.x.f.v v8, v8
92
+ ; RV64-i32-NEXT: ret
93
+ ;
94
+ ; RV64-i64-LABEL: lrint_nxv8f32:
95
+ ; RV64-i64: # %bb.0:
96
+ ; RV64-i64-NEXT: vsetvli a0, zero, e32, m4, ta, ma
97
+ ; RV64-i64-NEXT: vfwcvt.x.f.v v16, v8
98
+ ; RV64-i64-NEXT: vmv8r.v v8, v16
99
+ ; RV64-i64-NEXT: ret
74
100
%a = call <vscale x 8 x iXLen> @llvm.lrint.nxv8iXLen.nxv8f32 (<vscale x 8 x float > %x )
75
101
ret <vscale x 8 x iXLen> %a
76
102
}
@@ -90,11 +116,18 @@ define <vscale x 1 x iXLen> @lrint_nxv1f64(<vscale x 1 x double> %x) {
90
116
; RV32-NEXT: vmv1r.v v8, v9
91
117
; RV32-NEXT: ret
92
118
;
93
- ; RV64-LABEL: lrint_nxv1f64:
94
- ; RV64: # %bb.0:
95
- ; RV64-NEXT: vsetvli a0, zero, e64, m1, ta, ma
96
- ; RV64-NEXT: vfcvt.x.f.v v8, v8
97
- ; RV64-NEXT: ret
119
+ ; RV64-i32-LABEL: lrint_nxv1f64:
120
+ ; RV64-i32: # %bb.0:
121
+ ; RV64-i32-NEXT: vsetvli a0, zero, e32, mf2, ta, ma
122
+ ; RV64-i32-NEXT: vfncvt.x.f.w v9, v8
123
+ ; RV64-i32-NEXT: vmv1r.v v8, v9
124
+ ; RV64-i32-NEXT: ret
125
+ ;
126
+ ; RV64-i64-LABEL: lrint_nxv1f64:
127
+ ; RV64-i64: # %bb.0:
128
+ ; RV64-i64-NEXT: vsetvli a0, zero, e64, m1, ta, ma
129
+ ; RV64-i64-NEXT: vfcvt.x.f.v v8, v8
130
+ ; RV64-i64-NEXT: ret
98
131
%a = call <vscale x 1 x iXLen> @llvm.lrint.nxv1iXLen.nxv1f64 (<vscale x 1 x double > %x )
99
132
ret <vscale x 1 x iXLen> %a
100
133
}
@@ -108,11 +141,18 @@ define <vscale x 2 x iXLen> @lrint_nxv2f64(<vscale x 2 x double> %x) {
108
141
; RV32-NEXT: vmv.v.v v8, v10
109
142
; RV32-NEXT: ret
110
143
;
111
- ; RV64-LABEL: lrint_nxv2f64:
112
- ; RV64: # %bb.0:
113
- ; RV64-NEXT: vsetvli a0, zero, e64, m2, ta, ma
114
- ; RV64-NEXT: vfcvt.x.f.v v8, v8
115
- ; RV64-NEXT: ret
144
+ ; RV64-i32-LABEL: lrint_nxv2f64:
145
+ ; RV64-i32: # %bb.0:
146
+ ; RV64-i32-NEXT: vsetvli a0, zero, e32, m1, ta, ma
147
+ ; RV64-i32-NEXT: vfncvt.x.f.w v10, v8
148
+ ; RV64-i32-NEXT: vmv.v.v v8, v10
149
+ ; RV64-i32-NEXT: ret
150
+ ;
151
+ ; RV64-i64-LABEL: lrint_nxv2f64:
152
+ ; RV64-i64: # %bb.0:
153
+ ; RV64-i64-NEXT: vsetvli a0, zero, e64, m2, ta, ma
154
+ ; RV64-i64-NEXT: vfcvt.x.f.v v8, v8
155
+ ; RV64-i64-NEXT: ret
116
156
%a = call <vscale x 2 x iXLen> @llvm.lrint.nxv2iXLen.nxv2f64 (<vscale x 2 x double > %x )
117
157
ret <vscale x 2 x iXLen> %a
118
158
}
@@ -126,11 +166,18 @@ define <vscale x 4 x iXLen> @lrint_nxv4f64(<vscale x 4 x double> %x) {
126
166
; RV32-NEXT: vmv.v.v v8, v12
127
167
; RV32-NEXT: ret
128
168
;
129
- ; RV64-LABEL: lrint_nxv4f64:
130
- ; RV64: # %bb.0:
131
- ; RV64-NEXT: vsetvli a0, zero, e64, m4, ta, ma
132
- ; RV64-NEXT: vfcvt.x.f.v v8, v8
133
- ; RV64-NEXT: ret
169
+ ; RV64-i32-LABEL: lrint_nxv4f64:
170
+ ; RV64-i32: # %bb.0:
171
+ ; RV64-i32-NEXT: vsetvli a0, zero, e32, m2, ta, ma
172
+ ; RV64-i32-NEXT: vfncvt.x.f.w v12, v8
173
+ ; RV64-i32-NEXT: vmv.v.v v8, v12
174
+ ; RV64-i32-NEXT: ret
175
+ ;
176
+ ; RV64-i64-LABEL: lrint_nxv4f64:
177
+ ; RV64-i64: # %bb.0:
178
+ ; RV64-i64-NEXT: vsetvli a0, zero, e64, m4, ta, ma
179
+ ; RV64-i64-NEXT: vfcvt.x.f.v v8, v8
180
+ ; RV64-i64-NEXT: ret
134
181
%a = call <vscale x 4 x iXLen> @llvm.lrint.nxv4iXLen.nxv4f64 (<vscale x 4 x double > %x )
135
182
ret <vscale x 4 x iXLen> %a
136
183
}
@@ -144,11 +191,18 @@ define <vscale x 8 x iXLen> @lrint_nxv8f64(<vscale x 8 x double> %x) {
144
191
; RV32-NEXT: vmv.v.v v8, v16
145
192
; RV32-NEXT: ret
146
193
;
147
- ; RV64-LABEL: lrint_nxv8f64:
148
- ; RV64: # %bb.0:
149
- ; RV64-NEXT: vsetvli a0, zero, e64, m8, ta, ma
150
- ; RV64-NEXT: vfcvt.x.f.v v8, v8
151
- ; RV64-NEXT: ret
194
+ ; RV64-i32-LABEL: lrint_nxv8f64:
195
+ ; RV64-i32: # %bb.0:
196
+ ; RV64-i32-NEXT: vsetvli a0, zero, e32, m4, ta, ma
197
+ ; RV64-i32-NEXT: vfncvt.x.f.w v16, v8
198
+ ; RV64-i32-NEXT: vmv.v.v v8, v16
199
+ ; RV64-i32-NEXT: ret
200
+ ;
201
+ ; RV64-i64-LABEL: lrint_nxv8f64:
202
+ ; RV64-i64: # %bb.0:
203
+ ; RV64-i64-NEXT: vsetvli a0, zero, e64, m8, ta, ma
204
+ ; RV64-i64-NEXT: vfcvt.x.f.v v8, v8
205
+ ; RV64-i64-NEXT: ret
152
206
%a = call <vscale x 8 x iXLen> @llvm.lrint.nxv8iXLen.nxv8f64 (<vscale x 8 x double > %x )
153
207
ret <vscale x 8 x iXLen> %a
154
208
}
0 commit comments