Skip to content

Commit 2a5149b

Browse files
Addressed the review comments3
1 parent a04f76c commit 2a5149b

File tree

3 files changed

+16
-18
lines changed

3 files changed

+16
-18
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33685,15 +33685,14 @@ void X86TargetLowering::ReplaceNodeResults(SDNode *N,
3368533685
EVT VT = N->getValueType(0);
3368633686
SDValue Op = N->getOperand(0);
3368733687
EVT OpVT = Op.getValueType();
33688-
SDValue V4I32;
33688+
SDValue Res;
3368933689

3369033690
if (VT == MVT::v2i32 && OpVT == MVT::v2f64) {
33691-
SDValue V4f32 = DAG.getNode(X86ISD::VFPROUND, dl, MVT::v4f32, Op);
3369233691
if (IsSigned)
33693-
V4I32 = DAG.getNode(X86ISD::FP_TO_SINT_SAT, dl, MVT::v4i32, V4f32);
33692+
Res = DAG.getNode(X86ISD::FP_TO_SINT_SAT, dl, MVT::v4i32, Op);
3369433693
else
33695-
V4I32 = DAG.getNode(X86ISD::FP_TO_UINT_SAT, dl, MVT::v4i32, V4f32);
33696-
Results.push_back(V4I32);
33694+
Res = DAG.getNode(X86ISD::FP_TO_UINT_SAT, dl, MVT::v4i32, Op);
33695+
Results.push_back(Res);
3369733696
return;
3369833697
}
3369933698
break;
@@ -56249,15 +56248,18 @@ static SDValue combineFP_TO_xINT_SAT(SDNode *N, SelectionDAG &DAG,
5624956248
SDLoc dl(N);
5625056249

5625156250
if (SrcVT == MVT::v2f32 && DstVT == MVT::v2i64) {
56252-
// Convert v2f32 to v2f64
56253-
SDValue V2F64 =
56254-
DAG.getNode(ISD::FP_EXTEND, dl, MVT::v2f64, N->getOperand(0));
56251+
// Create an undefined value of type v2f32
56252+
SDValue UndefV2F32Value = DAG.getUNDEF(MVT::v2f32);
56253+
56254+
// Concatenate the original v2f32 input and undef v2f32 to create v4f32
56255+
SDValue NewSrc = DAG.getNode(ISD::CONCAT_VECTORS, dl, MVT::v4f32,
56256+
N->getOperand(0), UndefV2F32Value);
5625556257

5625656258
// Select the FP_TO_SINT_SAT/FP_TO_UINT_SAT node
5625756259
if (IsSigned)
56258-
return DAG.getNode(X86ISD::FP_TO_SINT_SAT, dl, MVT::v2i64, V2F64);
56260+
return DAG.getNode(X86ISD::FP_TO_SINT_SAT, dl, MVT::v2i64, NewSrc);
5625956261

56260-
return DAG.getNode(X86ISD::FP_TO_UINT_SAT, dl, MVT::v2i64, V2F64);
56262+
return DAG.getNode(X86ISD::FP_TO_UINT_SAT, dl, MVT::v2i64, NewSrc);
5626156263
}
5626256264
return SDValue();
5626356265
}

llvm/lib/Target/X86/X86InstrAVX10.td

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,7 @@ let Predicates = [HasAVX10_2] in {
835835
// Patterns VCVTTPD2DQSZ128
836836

837837
// VCVTTPD2DQS
838-
def : Pat<(v4i32(X86fp2sisat(v4f32 VR128X:$src))),
838+
def : Pat<(v4i32(X86fp2sisat(v2f64 VR128X:$src))),
839839
(VCVTTPD2DQSZ128rr VR128X:$src)>;
840840
def : Pat<(v4i32(fp_to_sint_sat(v4f64 VR256X:$src), i32)),
841841
(VCVTTPD2DQSZ256rr VR256X:$src)>;
@@ -851,7 +851,7 @@ def : Pat<(v8i64(fp_to_sint_sat(v8f64 VR512:$src), i64)),
851851
(VCVTTPD2QQSZrr VR512:$src)>;
852852

853853
// VCVTTPD2UDQS
854-
def : Pat<(v4i32(X86fp2uisat(v4f32 VR128X:$src))),
854+
def : Pat<(v4i32(X86fp2uisat(v2f64 VR128X:$src))),
855855
(VCVTTPD2UDQSZ128rr VR128X:$src)>;
856856
def : Pat<(v4i32(fp_to_uint_sat(v4f64 VR256X:$src), i32)),
857857
(VCVTTPD2UDQSZ256rr VR256X:$src)>;
@@ -875,7 +875,7 @@ def : Pat<(v16i32(fp_to_sint_sat(v16f32 VR512:$src), i32)),
875875
(VCVTTPS2DQSZrr VR512:$src)>;
876876

877877
// VCVTTPS2QQS
878-
def : Pat<(v2i64(X86fp2sisat(v2f64 VR128X:$src))),
878+
def : Pat<(v2i64(X86fp2sisat(v4f32 VR128X:$src))),
879879
(VCVTTPS2QQSZ128rr VR128X:$src)>;
880880
def : Pat<(v4i64(fp_to_sint_sat(v4f32 VR128X:$src), i64)),
881881
(VCVTTPS2QQSZ256rr VR128X:$src)>;
@@ -891,7 +891,7 @@ def : Pat<(v16i32(fp_to_uint_sat(v16f32 VR512:$src), i32)),
891891
(VCVTTPS2UDQSZrr VR512:$src)>;
892892

893893
// VCVTTPS2UQQS
894-
def : Pat<(v2i64(X86fp2uisat(v2f64 VR128X:$src))),
894+
def : Pat<(v2i64(X86fp2uisat(v4f32 VR128X:$src))),
895895
(VCVTTPS2UQQSZ128rr VR128X:$src)>;
896896
def : Pat<(v4i64(fp_to_uint_sat(v4f32 VR128X:$src), i64)),
897897
(VCVTTPS2UQQSZ256rr VR128X:$src)>;

llvm/test/CodeGen/X86/avx10_2fptosi_satcvtds.ll

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,6 @@ define i64 @test_signed_i64_f64(double %f) nounwind {
117117
define <2 x i32> @test_signed_v2i32_v2f64(<2 x double> %d) nounwind {
118118
; CHECK-LABEL: test_signed_v2i32_v2f64:
119119
; CHECK: # %bb.0:
120-
; CHECK-NEXT: vcvtpd2ps %xmm0, %xmm0
121120
; CHECK-NEXT: vcvttpd2dqs %xmm0, %xmm0
122121
; CHECK-NEXT: ret{{[l|q]}}
123122
%x = call <2 x i32> @llvm.fptosi.sat.v2i32.v2f64(<2 x double> %d)
@@ -157,7 +156,6 @@ define <4 x i64> @test_signed_v4i64_v4f64(<4 x double> %f) nounwind {
157156
define <2 x i32> @test_unsigned_v2i32_v2f64(<2 x double> %d) nounwind {
158157
; CHECK-LABEL: test_unsigned_v2i32_v2f64:
159158
; CHECK: # %bb.0:
160-
; CHECK-NEXT: vcvtpd2ps %xmm0, %xmm0
161159
; CHECK-NEXT: vcvttpd2udqs %xmm0, %xmm0
162160
; CHECK-NEXT: ret{{[l|q]}}
163161
%x = call <2 x i32> @llvm.fptoui.sat.v2i32.v2f64(<2 x double> %d)
@@ -235,7 +233,6 @@ define <8 x i32> @test_unsigned_v8i32_v8f32(<8 x float> %f) nounwind {
235233
define <2 x i64> @test_signed_v2i64_v2f32(<2 x float> %f) nounwind {
236234
; CHECK-LABEL: test_signed_v2i64_v2f32:
237235
; CHECK: # %bb.0:
238-
; CHECK-NEXT: vcvtps2pd %xmm0, %xmm0
239236
; CHECK-NEXT: vcvttps2qqs %xmm0, %xmm0
240237
; CHECK-NEXT: ret{{[l|q]}}
241238
%x = call <2 x i64> @llvm.fptosi.sat.v2i64.v2f32(<2 x float> %f)
@@ -255,7 +252,6 @@ define <4 x i64> @test_signed_v4i64_v4f32(<4 x float> %f) nounwind {
255252
define <2 x i64> @test_unsigned_v2i64_v2f32(<2 x float> %f) nounwind {
256253
; CHECK-LABEL: test_unsigned_v2i64_v2f32:
257254
; CHECK: # %bb.0:
258-
; CHECK-NEXT: vcvtps2pd %xmm0, %xmm0
259255
; CHECK-NEXT: vcvttps2uqqs %xmm0, %xmm0
260256
; CHECK-NEXT: ret{{[l|q]}}
261257
%x = call <2 x i64> @llvm.fptoui.sat.v2i64.v2f32(<2 x float> %f)

0 commit comments

Comments
 (0)