@@ -1001,6 +1001,16 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
1001
1001
setOperationAction(ISD::ATOMIC_LOAD_FMIN, MVT::f32, LibCall);
1002
1002
setOperationAction(ISD::ATOMIC_LOAD_FMIN, MVT::f64, LibCall);
1003
1003
setOperationAction(ISD::ATOMIC_LOAD_FMIN, MVT::bf16, LibCall);
1004
+
1005
+ setOperationAction(ISD::ATOMIC_LOAD_FMAXIMUM, MVT::f16, LibCall);
1006
+ setOperationAction(ISD::ATOMIC_LOAD_FMAXIMUM, MVT::f32, LibCall);
1007
+ setOperationAction(ISD::ATOMIC_LOAD_FMAXIMUM, MVT::f64, LibCall);
1008
+ setOperationAction(ISD::ATOMIC_LOAD_FMAXIMUM, MVT::bf16, LibCall);
1009
+
1010
+ setOperationAction(ISD::ATOMIC_LOAD_FMINIMUM, MVT::f16, LibCall);
1011
+ setOperationAction(ISD::ATOMIC_LOAD_FMINIMUM, MVT::f32, LibCall);
1012
+ setOperationAction(ISD::ATOMIC_LOAD_FMINIMUM, MVT::f64, LibCall);
1013
+ setOperationAction(ISD::ATOMIC_LOAD_FMINIMUM, MVT::bf16, LibCall);
1004
1014
}
1005
1015
1006
1016
if (Subtarget->hasLSE128()) {
@@ -27991,7 +28001,9 @@ AArch64TargetLowering::shouldExpandAtomicRMWInIR(AtomicRMWInst *AI) const {
27991
28001
// If LSFE available, use atomic FP instructions in preference to expansion
27992
28002
if (Subtarget->hasLSFE() && (AI->getOperation() == AtomicRMWInst::FAdd ||
27993
28003
AI->getOperation() == AtomicRMWInst::FMax ||
27994
- AI->getOperation() == AtomicRMWInst::FMin))
28004
+ AI->getOperation() == AtomicRMWInst::FMin ||
28005
+ AI->getOperation() == AtomicRMWInst::FMaximum ||
28006
+ AI->getOperation() == AtomicRMWInst::FMinimum))
27995
28007
return AtomicExpansionKind::None;
27996
28008
27997
28009
// Nand is not supported in LSE.
0 commit comments