@@ -1626,6 +1626,8 @@ void AArch64TargetLowering::addTypeForStreamingSVE(MVT VT) {
1626
1626
setOperationAction(ISD::MULHU, VT, Custom);
1627
1627
setOperationAction(ISD::ABS, VT, Custom);
1628
1628
setOperationAction(ISD::XOR, VT, Custom);
1629
+ setOperationAction(ISD::TRUNCATE, VT, Custom);
1630
+ setOperationAction(ISD::FMUL, VT, Custom);
1629
1631
}
1630
1632
1631
1633
void AArch64TargetLowering::addTypeForFixedLengthSVE(MVT VT) {
@@ -3784,7 +3786,8 @@ SDValue AArch64TargetLowering::LowerFP_ROUND(SDValue Op,
3784
3786
SDValue SrcVal = Op.getOperand(IsStrict ? 1 : 0);
3785
3787
EVT SrcVT = SrcVal.getValueType();
3786
3788
3787
- if (useSVEForFixedLengthVectorVT(SrcVT))
3789
+ if (useSVEForFixedLengthVectorVT(SrcVT,
3790
+ Subtarget->forceStreamingCompatibleSVE()))
3788
3791
return LowerFixedLengthFPRoundToSVE(Op, DAG);
3789
3792
3790
3793
if (SrcVT != MVT::f128) {
@@ -3815,7 +3818,10 @@ SDValue AArch64TargetLowering::LowerVectorFP_TO_INT(SDValue Op,
3815
3818
return LowerToPredicatedOp(Op, DAG, Opcode);
3816
3819
}
3817
3820
3818
- if (useSVEForFixedLengthVectorVT(VT) || useSVEForFixedLengthVectorVT(InVT))
3821
+ if (useSVEForFixedLengthVectorVT(VT,
3822
+ Subtarget->forceStreamingCompatibleSVE()) ||
3823
+ useSVEForFixedLengthVectorVT(InVT,
3824
+ Subtarget->forceStreamingCompatibleSVE()))
3819
3825
return LowerFixedLengthFPToIntToSVE(Op, DAG);
3820
3826
3821
3827
unsigned NumElts = InVT.getVectorNumElements();
@@ -4069,7 +4075,10 @@ SDValue AArch64TargetLowering::LowerVectorINT_TO_FP(SDValue Op,
4069
4075
return LowerToPredicatedOp(Op, DAG, Opcode);
4070
4076
}
4071
4077
4072
- if (useSVEForFixedLengthVectorVT(VT) || useSVEForFixedLengthVectorVT(InVT))
4078
+ if (useSVEForFixedLengthVectorVT(VT,
4079
+ Subtarget->forceStreamingCompatibleSVE()) ||
4080
+ useSVEForFixedLengthVectorVT(InVT,
4081
+ Subtarget->forceStreamingCompatibleSVE()))
4073
4082
return LowerFixedLengthIntToFPToSVE(Op, DAG);
4074
4083
4075
4084
uint64_t VTSize = VT.getFixedSizeInBits();
@@ -15422,7 +15431,7 @@ static SDValue performIntToFpCombine(SDNode *N, SelectionDAG &DAG,
15422
15431
static SDValue performFpToIntCombine(SDNode *N, SelectionDAG &DAG,
15423
15432
TargetLowering::DAGCombinerInfo &DCI,
15424
15433
const AArch64Subtarget *Subtarget) {
15425
- if (!Subtarget->hasNEON())
15434
+ if (!Subtarget->hasNEON() || Subtarget->forceStreamingCompatibleSVE() )
15426
15435
return SDValue();
15427
15436
15428
15437
if (!N->getValueType(0).isSimple())
0 commit comments