[PATCH] D41338: [CodeGen] lower math intrinsics to finite version of libcalls when possible (PR35672)
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 20 11:51:54 PST 2017
efriedma added a comment.
Comment at: lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:4049
- Results.push_back(ExpandFPLibCall(Node, RTLIB::EXP_F32, RTLIB::EXP_F64,
- RTLIB::EXP_F80, RTLIB::EXP_F128,
+ if (CanUseFiniteLibCall && DAG.getLibInfo().has(LibFunc_exp_finite))
+ Results.push_back(ExpandFPLibCall(Node, RTLIB::EXP_FINITE_F32,
> efriedma wrote:
> > "getLibInfo().has(LibFunc_exp_finite)" probably isn't the right check. There are three __exp*_finite variants; each of them may or may not be legal, and you need to check that the long double variant actually accepts the input float type.
> > Also, it looks like TargetLibraryInfo doesn't contain the appropriate checks to disable them (it assumes any non-Windows platform has __exp_finite, which is clearly false).
> > and you need to check that the long double variant actually accepts the input float type.
> How would we check this?
> > (it assumes any non-Windows platform has __exp_finite, which is clearly false).
> Hrmm. We could start with disabling them for any non-GNU triple.
For figuring out whether the long-double variant is the one we need, I guess TargetLibraryInfo should know? We need to avoid generating a call with undefined behavior somehow. And we probably need to eventually teach this code how to generate a call to __expf128_finite when it's available.
More information about the llvm-commits