1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
2
; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
3
3
; RUN: -target-abi=lp64d | FileCheck %s -check-prefix=RV64ID
4
+ ; RUN: llc -mtriple=riscv64 -mattr=+zdinx -verify-machineinstrs < %s \
5
+ ; RUN: -target-abi=lp64 | FileCheck %s -check-prefix=RV64IDINX
4
6
5
7
; This file exhaustively checks double<->i32 conversions. In general,
6
8
; fcvt.l[u].d can be selected instead of fcvt.w[u].d because poison is
@@ -12,6 +14,11 @@ define i32 @aext_fptosi(double %a) nounwind {
12
14
; RV64ID: # %bb.0:
13
15
; RV64ID-NEXT: fcvt.w.d a0, fa0, rtz
14
16
; RV64ID-NEXT: ret
17
+ ;
18
+ ; RV64IDINX-LABEL: aext_fptosi:
19
+ ; RV64IDINX: # %bb.0:
20
+ ; RV64IDINX-NEXT: fcvt.w.d a0, a0, rtz
21
+ ; RV64IDINX-NEXT: ret
15
22
%1 = fptosi double %a to i32
16
23
ret i32 %1
17
24
}
@@ -21,6 +28,11 @@ define signext i32 @sext_fptosi(double %a) nounwind {
21
28
; RV64ID: # %bb.0:
22
29
; RV64ID-NEXT: fcvt.w.d a0, fa0, rtz
23
30
; RV64ID-NEXT: ret
31
+ ;
32
+ ; RV64IDINX-LABEL: sext_fptosi:
33
+ ; RV64IDINX: # %bb.0:
34
+ ; RV64IDINX-NEXT: fcvt.w.d a0, a0, rtz
35
+ ; RV64IDINX-NEXT: ret
24
36
%1 = fptosi double %a to i32
25
37
ret i32 %1
26
38
}
@@ -32,6 +44,13 @@ define zeroext i32 @zext_fptosi(double %a) nounwind {
32
44
; RV64ID-NEXT: slli a0, a0, 32
33
45
; RV64ID-NEXT: srli a0, a0, 32
34
46
; RV64ID-NEXT: ret
47
+ ;
48
+ ; RV64IDINX-LABEL: zext_fptosi:
49
+ ; RV64IDINX: # %bb.0:
50
+ ; RV64IDINX-NEXT: fcvt.w.d a0, a0, rtz
51
+ ; RV64IDINX-NEXT: slli a0, a0, 32
52
+ ; RV64IDINX-NEXT: srli a0, a0, 32
53
+ ; RV64IDINX-NEXT: ret
35
54
%1 = fptosi double %a to i32
36
55
ret i32 %1
37
56
}
@@ -41,6 +60,11 @@ define i32 @aext_fptoui(double %a) nounwind {
41
60
; RV64ID: # %bb.0:
42
61
; RV64ID-NEXT: fcvt.wu.d a0, fa0, rtz
43
62
; RV64ID-NEXT: ret
63
+ ;
64
+ ; RV64IDINX-LABEL: aext_fptoui:
65
+ ; RV64IDINX: # %bb.0:
66
+ ; RV64IDINX-NEXT: fcvt.wu.d a0, a0, rtz
67
+ ; RV64IDINX-NEXT: ret
44
68
%1 = fptoui double %a to i32
45
69
ret i32 %1
46
70
}
@@ -50,6 +74,11 @@ define signext i32 @sext_fptoui(double %a) nounwind {
50
74
; RV64ID: # %bb.0:
51
75
; RV64ID-NEXT: fcvt.wu.d a0, fa0, rtz
52
76
; RV64ID-NEXT: ret
77
+ ;
78
+ ; RV64IDINX-LABEL: sext_fptoui:
79
+ ; RV64IDINX: # %bb.0:
80
+ ; RV64IDINX-NEXT: fcvt.wu.d a0, a0, rtz
81
+ ; RV64IDINX-NEXT: ret
53
82
%1 = fptoui double %a to i32
54
83
ret i32 %1
55
84
}
@@ -59,6 +88,11 @@ define zeroext i32 @zext_fptoui(double %a) nounwind {
59
88
; RV64ID: # %bb.0:
60
89
; RV64ID-NEXT: fcvt.lu.d a0, fa0, rtz
61
90
; RV64ID-NEXT: ret
91
+ ;
92
+ ; RV64IDINX-LABEL: zext_fptoui:
93
+ ; RV64IDINX: # %bb.0:
94
+ ; RV64IDINX-NEXT: fcvt.lu.d a0, a0, rtz
95
+ ; RV64IDINX-NEXT: ret
62
96
%1 = fptoui double %a to i32
63
97
ret i32 %1
64
98
}
@@ -68,6 +102,11 @@ define double @uitofp_aext_i32_to_f64(i32 %a) nounwind {
68
102
; RV64ID: # %bb.0:
69
103
; RV64ID-NEXT: fcvt.d.wu fa0, a0
70
104
; RV64ID-NEXT: ret
105
+ ;
106
+ ; RV64IDINX-LABEL: uitofp_aext_i32_to_f64:
107
+ ; RV64IDINX: # %bb.0:
108
+ ; RV64IDINX-NEXT: fcvt.d.wu a0, a0
109
+ ; RV64IDINX-NEXT: ret
71
110
%1 = uitofp i32 %a to double
72
111
ret double %1
73
112
}
@@ -77,6 +116,11 @@ define double @uitofp_sext_i32_to_f64(i32 signext %a) nounwind {
77
116
; RV64ID: # %bb.0:
78
117
; RV64ID-NEXT: fcvt.d.wu fa0, a0
79
118
; RV64ID-NEXT: ret
119
+ ;
120
+ ; RV64IDINX-LABEL: uitofp_sext_i32_to_f64:
121
+ ; RV64IDINX: # %bb.0:
122
+ ; RV64IDINX-NEXT: fcvt.d.wu a0, a0
123
+ ; RV64IDINX-NEXT: ret
80
124
%1 = uitofp i32 %a to double
81
125
ret double %1
82
126
}
@@ -86,6 +130,11 @@ define double @uitofp_zext_i32_to_f64(i32 zeroext %a) nounwind {
86
130
; RV64ID: # %bb.0:
87
131
; RV64ID-NEXT: fcvt.d.wu fa0, a0
88
132
; RV64ID-NEXT: ret
133
+ ;
134
+ ; RV64IDINX-LABEL: uitofp_zext_i32_to_f64:
135
+ ; RV64IDINX: # %bb.0:
136
+ ; RV64IDINX-NEXT: fcvt.d.wu a0, a0
137
+ ; RV64IDINX-NEXT: ret
89
138
%1 = uitofp i32 %a to double
90
139
ret double %1
91
140
}
@@ -95,6 +144,11 @@ define double @sitofp_aext_i32_to_f64(i32 %a) nounwind {
95
144
; RV64ID: # %bb.0:
96
145
; RV64ID-NEXT: fcvt.d.w fa0, a0
97
146
; RV64ID-NEXT: ret
147
+ ;
148
+ ; RV64IDINX-LABEL: sitofp_aext_i32_to_f64:
149
+ ; RV64IDINX: # %bb.0:
150
+ ; RV64IDINX-NEXT: fcvt.d.w a0, a0
151
+ ; RV64IDINX-NEXT: ret
98
152
%1 = sitofp i32 %a to double
99
153
ret double %1
100
154
}
@@ -104,6 +158,11 @@ define double @sitofp_sext_i32_to_f64(i32 signext %a) nounwind {
104
158
; RV64ID: # %bb.0:
105
159
; RV64ID-NEXT: fcvt.d.w fa0, a0
106
160
; RV64ID-NEXT: ret
161
+ ;
162
+ ; RV64IDINX-LABEL: sitofp_sext_i32_to_f64:
163
+ ; RV64IDINX: # %bb.0:
164
+ ; RV64IDINX-NEXT: fcvt.d.w a0, a0
165
+ ; RV64IDINX-NEXT: ret
107
166
%1 = sitofp i32 %a to double
108
167
ret double %1
109
168
}
@@ -113,6 +172,11 @@ define double @sitofp_zext_i32_to_f64(i32 zeroext %a) nounwind {
113
172
; RV64ID: # %bb.0:
114
173
; RV64ID-NEXT: fcvt.d.w fa0, a0
115
174
; RV64ID-NEXT: ret
175
+ ;
176
+ ; RV64IDINX-LABEL: sitofp_zext_i32_to_f64:
177
+ ; RV64IDINX: # %bb.0:
178
+ ; RV64IDINX-NEXT: fcvt.d.w a0, a0
179
+ ; RV64IDINX-NEXT: ret
116
180
%1 = sitofp i32 %a to double
117
181
ret double %1
118
182
}
0 commit comments