Skip to content

Commit 01aeb80

Browse files
committed
[ARM] Lowering and legalization of strict ops
1 parent 06f4aea commit 01aeb80

File tree

1 file changed

+31
-23
lines changed

1 file changed

+31
-23
lines changed

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -602,10 +602,20 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
602602
setOperationAction(ISD::FP_TO_SINT_SAT, MVT::i64, Custom);
603603
setOperationAction(ISD::FP_TO_UINT_SAT, MVT::i64, Custom);
604604

605-
if (!Subtarget->hasVFP2Base())
605+
if (!Subtarget->hasVFP2Base()) {
606606
setAllExpand(MVT::f32);
607-
if (!Subtarget->hasFP64())
607+
} else {
608+
for (auto Op : {ISD::STRICT_FADD, ISD::STRICT_FSUB, ISD::STRICT_FMUL,
609+
ISD::STRICT_FDIV, ISD::STRICT_FMA, ISD::STRICT_FSQRT})
610+
setOperationAction(Op, MVT::f32, Legal);
611+
}
612+
if (!Subtarget->hasFP64()) {
608613
setAllExpand(MVT::f64);
614+
} else {
615+
for (auto Op : {ISD::STRICT_FADD, ISD::STRICT_FSUB, ISD::STRICT_FMUL,
616+
ISD::STRICT_FDIV, ISD::STRICT_FMA, ISD::STRICT_FSQRT})
617+
setOperationAction(Op, MVT::f64, Legal);
618+
}
609619
}
610620

611621
if (Subtarget->hasFullFP16()) {
@@ -1336,28 +1346,26 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM_,
13361346

13371347
// FP16 often need to be promoted to call lib functions
13381348
if (Subtarget->hasFullFP16()) {
1339-
setOperationAction(ISD::FREM, MVT::f16, Promote);
1349+
for (auto Op : {ISD::FREM, ISD::FSIN, ISD::FCOS,
1350+
ISD::FTAN, ISD::FSINCOS, ISD::FPOWI,
1351+
ISD::FPOW, ISD::FEXP, ISD::FEXP2,
1352+
ISD::FEXP10, ISD::FLOG, ISD::FLOG10,
1353+
ISD::FLOG2, ISD::STRICT_FREM, ISD::STRICT_FSIN,
1354+
ISD::STRICT_FCOS, ISD::STRICT_FTAN, ISD::STRICT_FPOWI,
1355+
ISD::STRICT_FPOW, ISD::STRICT_FEXP, ISD::STRICT_FEXP2,
1356+
ISD::STRICT_FLOG, ISD::STRICT_FLOG10, ISD::STRICT_FLOG2}) {
1357+
setOperationAction(Op, MVT::f16, Promote);
1358+
}
1359+
1360+
for (auto Op : {ISD::FROUND, ISD::FROUNDEVEN, ISD::FTRUNC,
1361+
ISD::FNEARBYINT, ISD::FRINT, ISD::FFLOOR,
1362+
ISD::FCEIL, ISD::STRICT_FROUND, ISD::STRICT_FROUNDEVEN,
1363+
ISD::STRICT_FTRUNC, ISD::STRICT_FNEARBYINT, ISD::STRICT_FRINT,
1364+
ISD::STRICT_FFLOOR, ISD::STRICT_FCEIL}) {
1365+
setOperationAction(Op, MVT::f16, Legal);
1366+
}
1367+
13401368
setOperationAction(ISD::FCOPYSIGN, MVT::f16, Expand);
1341-
setOperationAction(ISD::FSIN, MVT::f16, Promote);
1342-
setOperationAction(ISD::FCOS, MVT::f16, Promote);
1343-
setOperationAction(ISD::FTAN, MVT::f16, Promote);
1344-
setOperationAction(ISD::FSINCOS, MVT::f16, Promote);
1345-
setOperationAction(ISD::FPOWI, MVT::f16, Promote);
1346-
setOperationAction(ISD::FPOW, MVT::f16, Promote);
1347-
setOperationAction(ISD::FEXP, MVT::f16, Promote);
1348-
setOperationAction(ISD::FEXP2, MVT::f16, Promote);
1349-
setOperationAction(ISD::FEXP10, MVT::f16, Promote);
1350-
setOperationAction(ISD::FLOG, MVT::f16, Promote);
1351-
setOperationAction(ISD::FLOG10, MVT::f16, Promote);
1352-
setOperationAction(ISD::FLOG2, MVT::f16, Promote);
1353-
1354-
setOperationAction(ISD::FROUND, MVT::f16, Legal);
1355-
setOperationAction(ISD::FROUNDEVEN, MVT::f16, Legal);
1356-
setOperationAction(ISD::FTRUNC, MVT::f16, Legal);
1357-
setOperationAction(ISD::FNEARBYINT, MVT::f16, Legal);
1358-
setOperationAction(ISD::FRINT, MVT::f16, Legal);
1359-
setOperationAction(ISD::FFLOOR, MVT::f16, Legal);
1360-
setOperationAction(ISD::FCEIL, MVT::f16, Legal);
13611369
}
13621370

13631371
if (Subtarget->hasNEON()) {

0 commit comments

Comments
 (0)