ConstantFP->getType() is not right

Hi, I want to create a double constant from a float constant, here’s my code:

auto* constFloat1 = static_castllvm::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?

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.

Hi Craig, it works, appreciate your help