[clang] [clang] Lower modf builtin using `llvm.modf` intrinsic (PR #126750)
Eli Friedman via cfe-commits
cfe-commits at lists.llvm.org
Tue Feb 11 12:30:53 PST 2025
================
@@ -859,6 +859,24 @@ static void emitSincosBuiltin(CodeGenFunction &CGF, const CallExpr *E,
StoreCos->setMetadata(LLVMContext::MD_noalias, AliasScopeList);
}
+static llvm::Value *emitModfBuiltin(CodeGenFunction &CGF, const CallExpr *E,
+ llvm::Intrinsic::ID IntrinsicID) {
+ llvm::Value *Val = CGF.EmitScalarExpr(E->getArg(0));
+ llvm::Value *IntPartDest = CGF.EmitScalarExpr(E->getArg(1));
+
+ llvm::Value *Call =
+ CGF.Builder.CreateIntrinsic(IntrinsicID, {Val->getType()}, Val);
+
+ llvm::Value *FractionalResult = CGF.Builder.CreateExtractValue(Call, 0);
+ llvm::Value *IntegralResult = CGF.Builder.CreateExtractValue(Call, 1);
+
+ QualType DestPtrType = E->getArg(1)->getType()->getPointeeType();
+ LValue IntegralLV = CGF.MakeNaturalAlignAddrLValue(IntPartDest, DestPtrType);
+ CGF.Builder.CreateStore(IntegralResult, IntegralLV.getAddress());
----------------
efriedma-quic wrote:
EmitStoreThroughLValue?
https://github.com/llvm/llvm-project/pull/126750
More information about the cfe-commits
mailing list