@@ -1001,6 +1001,16 @@ AArch64TargetLowering::AArch64TargetLowering(const TargetMachine &TM,
10011001 setOperationAction(ISD::ATOMIC_LOAD_FMIN, MVT::f32, LibCall);
10021002 setOperationAction(ISD::ATOMIC_LOAD_FMIN, MVT::f64, LibCall);
10031003 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);
10041014 }
10051015
10061016 if (Subtarget->hasLSE128()) {
@@ -27991,7 +28001,9 @@ AArch64TargetLowering::shouldExpandAtomicRMWInIR(AtomicRMWInst *AI) const {
2799128001 // If LSFE available, use atomic FP instructions in preference to expansion
2799228002 if (Subtarget->hasLSFE() && (AI->getOperation() == AtomicRMWInst::FAdd ||
2799328003 AI->getOperation() == AtomicRMWInst::FMax ||
27994- AI->getOperation() == AtomicRMWInst::FMin))
28004+ AI->getOperation() == AtomicRMWInst::FMin ||
28005+ AI->getOperation() == AtomicRMWInst::FMaximum ||
28006+ AI->getOperation() == AtomicRMWInst::FMinimum))
2799528007 return AtomicExpansionKind::None;
2799628008
2799728009 // Nand is not supported in LSE.
0 commit comments