[llvm-dev] ConstantFP->getType() is not right

Craig Topper via llvm-dev
Thu, 26 Sep 2019 02:59:17 -0000

The Type passed to llvm::ConstantFP::get is only used to get the context
and to determine if the constant needs to be a vector. The width is taken
from the APFloat passed in. There is an assert in the implementation that
makes sure the scalar type of the type passed in matches the size of the
APFloat. Is your llvm library compiled with asserts enabled?

You can use ConstantExpr::getFPExtend to do what you want.

~Craig


On Wed, Sep 25, 2019 at 7:43 PM Yafei Liu via llvm-dev <
llvm-dev at lists.llvm.org> wrote:

> Hi, I want to create a double constant from a float constant, here's my
> code:
>
> auto* constFloat1 >
static_cast<llvm::ConstantFP*>(llvm::ConstantFP::get(llvm::Type::getFloatTy(context),
> 3.1));
>
>   assert(constFloat1->getType() == llvm::Type::getFloatTy(context));
>
>
>   auto* constFloat2 >
llvm::ConstantFP::get(llvm::Type::getDoubleTy(context),
> constFloat1->getValueAPF());
>
>   assert(constFloat2->getType() == llvm::Type::getDoubleTy(context));
>
> but the second assert failed, the type of constFloat2 is still float, not
> double, why?
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20190925/5a418789/attachment.html>