11; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
22; RUN: llc -mtriple=riscv64 -mattr=+d -verify-machineinstrs < %s \
33; 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
46
57; This file exhaustively checks double<->i32 conversions. In general,
68; 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 {
1214; RV64ID: # %bb.0:
1315; RV64ID-NEXT: fcvt.w.d a0, fa0, rtz
1416; 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
1522 %1 = fptosi double %a to i32
1623 ret i32 %1
1724}
@@ -21,6 +28,11 @@ define signext i32 @sext_fptosi(double %a) nounwind {
2128; RV64ID: # %bb.0:
2229; RV64ID-NEXT: fcvt.w.d a0, fa0, rtz
2330; 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
2436 %1 = fptosi double %a to i32
2537 ret i32 %1
2638}
@@ -32,6 +44,13 @@ define zeroext i32 @zext_fptosi(double %a) nounwind {
3244; RV64ID-NEXT: slli a0, a0, 32
3345; RV64ID-NEXT: srli a0, a0, 32
3446; 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
3554 %1 = fptosi double %a to i32
3655 ret i32 %1
3756}
@@ -41,6 +60,11 @@ define i32 @aext_fptoui(double %a) nounwind {
4160; RV64ID: # %bb.0:
4261; RV64ID-NEXT: fcvt.wu.d a0, fa0, rtz
4362; 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
4468 %1 = fptoui double %a to i32
4569 ret i32 %1
4670}
@@ -50,6 +74,11 @@ define signext i32 @sext_fptoui(double %a) nounwind {
5074; RV64ID: # %bb.0:
5175; RV64ID-NEXT: fcvt.wu.d a0, fa0, rtz
5276; 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
5382 %1 = fptoui double %a to i32
5483 ret i32 %1
5584}
@@ -59,6 +88,11 @@ define zeroext i32 @zext_fptoui(double %a) nounwind {
5988; RV64ID: # %bb.0:
6089; RV64ID-NEXT: fcvt.lu.d a0, fa0, rtz
6190; 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
6296 %1 = fptoui double %a to i32
6397 ret i32 %1
6498}
@@ -68,6 +102,11 @@ define double @uitofp_aext_i32_to_f64(i32 %a) nounwind {
68102; RV64ID: # %bb.0:
69103; RV64ID-NEXT: fcvt.d.wu fa0, a0
70104; 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
71110 %1 = uitofp i32 %a to double
72111 ret double %1
73112}
@@ -77,6 +116,11 @@ define double @uitofp_sext_i32_to_f64(i32 signext %a) nounwind {
77116; RV64ID: # %bb.0:
78117; RV64ID-NEXT: fcvt.d.wu fa0, a0
79118; 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
80124 %1 = uitofp i32 %a to double
81125 ret double %1
82126}
@@ -86,6 +130,11 @@ define double @uitofp_zext_i32_to_f64(i32 zeroext %a) nounwind {
86130; RV64ID: # %bb.0:
87131; RV64ID-NEXT: fcvt.d.wu fa0, a0
88132; 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
89138 %1 = uitofp i32 %a to double
90139 ret double %1
91140}
@@ -95,6 +144,11 @@ define double @sitofp_aext_i32_to_f64(i32 %a) nounwind {
95144; RV64ID: # %bb.0:
96145; RV64ID-NEXT: fcvt.d.w fa0, a0
97146; 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
98152 %1 = sitofp i32 %a to double
99153 ret double %1
100154}
@@ -104,6 +158,11 @@ define double @sitofp_sext_i32_to_f64(i32 signext %a) nounwind {
104158; RV64ID: # %bb.0:
105159; RV64ID-NEXT: fcvt.d.w fa0, a0
106160; 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
107166 %1 = sitofp i32 %a to double
108167 ret double %1
109168}
@@ -113,6 +172,11 @@ define double @sitofp_zext_i32_to_f64(i32 zeroext %a) nounwind {
113172; RV64ID: # %bb.0:
114173; RV64ID-NEXT: fcvt.d.w fa0, a0
115174; 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
116180 %1 = sitofp i32 %a to double
117181 ret double %1
118182}
0 commit comments