[llvm] [CodeGen] Add scalarization fallback for multi-result scalable intrinsics (PR #218634)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 14 02:08:45 PDT 2026
=?utf-8?q?Mattéo?= Rizza Murgier,=?utf-8?q?Mattéo?= Rizza Murgier,
=?utf-8?q?Mattéo?= Rizza Murgier
Message-ID:
In-Reply-To: <llvm.org/llvm/llvm-project/pull/218634 at github.com>
================
@@ -808,6 +809,37 @@ bool PreISelIntrinsicLowering::lowerIntrinsics(Module &M) const {
return lowerUnaryVectorIntrinsicAsLoop(M, CI);
});
break;
+ case Intrinsic::modf:
+ case Intrinsic::sincos:
+ case Intrinsic::sincospi:
+ Changed |= forEachCall(F, [&](CallInst *CI) {
+ Type *Ty = CI->getArgOperand(0)->getType();
+ if (!isa<ScalableVectorType>(Ty))
+ return false;
+ const TargetLowering *TL = TM->getSubtargetImpl(F)->getTargetLowering();
+ unsigned Op = TL->IntrinsicIDToISD(F.getIntrinsicID());
+ assert(Op != ISD::DELETED_NODE && "unsupported intrinsic");
+ EVT VT = EVT::getEVT(Ty);
+ if (!TL->isOperationExpand(Op, VT))
+ return false;
+ // The vector legalizer can expand these to a vector math library call.
+ RTLIB::Libcall LC;
+ switch (Op) {
+ case ISD::FMODF:
+ LC = RTLIB::getMODF(VT);
+ break;
+ case ISD::FSINCOS:
+ LC = RTLIB::getSINCOS(VT);
+ break;
+ default:
+ LC = RTLIB::getSINCOSPI(VT);
----------------
arsenm wrote:
Add an explicit case for SINCOSPI and make default llvm_unreachable
https://github.com/llvm/llvm-project/pull/218634
More information about the llvm-commits
mailing list