Skip to content

Commit a25d549

Browse files
committed
[AArch64] Don't try to vectorize fixed point to fp narrowing conversion
1 parent 0a1f7f0 commit a25d549

File tree

1 file changed

+5
-13
lines changed

1 file changed

+5
-13
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5095,19 +5095,11 @@ SDValue AArch64TargetLowering::LowerVectorINT_TO_FP(SDValue Op,
50955095
uint64_t VTSize = VT.getFixedSizeInBits();
50965096
uint64_t InVTSize = InVT.getFixedSizeInBits();
50975097
if (VTSize < InVTSize) {
5098-
MVT CastVT =
5099-
MVT::getVectorVT(MVT::getFloatingPointVT(InVT.getScalarSizeInBits()),
5100-
InVT.getVectorNumElements());
5101-
if (IsStrict) {
5102-
In = DAG.getNode(Opc, dl, {CastVT, MVT::Other},
5103-
{Op.getOperand(0), In});
5104-
return DAG.getNode(ISD::STRICT_FP_ROUND, dl, {VT, MVT::Other},
5105-
{In.getValue(1), In.getValue(0),
5106-
DAG.getIntPtrConstant(0, dl, /*isTarget=*/true)});
5107-
}
5108-
In = DAG.getNode(Opc, dl, CastVT, In);
5109-
return DAG.getNode(ISD::FP_ROUND, dl, VT, In,
5110-
DAG.getIntPtrConstant(0, dl, /*isTarget=*/true));
5098+
// Due to the absence of any vector instructions to directly convert
5099+
// larger fixed point to lower floating point, we end up using intermediate
5100+
// representation before finally getting VTSize-d floating point. This extra
5101+
// rounding can lead to subtly incorrect results.
5102+
return SDValue();
51115103
}
51125104

51135105
if (VTSize > InVTSize) {

0 commit comments

Comments
 (0)