[llvm] [llvm-c] Add LLVMConstFPFromBits() API (PR #164381)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Thu Dec 4 00:12:09 PST 2025
================
@@ -835,5 +835,35 @@ TEST(ConstantsTest, BlockAddressCAPITest) {
EXPECT_EQ(&BB, OutBB);
}
+TEST(ConstantsTest, Float128Test) {
+ LLVMContextRef C = LLVMContextCreate();
+ LLVMTypeRef Ty128 = LLVMFP128TypeInContext(C);
+ LLVMTypeRef TyPPC128 = LLVMPPCFP128TypeInContext(C);
+ LLVMTypeRef TyFloat = LLVMFloatTypeInContext(C);
+ LLVMTypeRef TyDouble = LLVMDoubleTypeInContext(C);
+ LLVMTypeRef TyHalf = LLVMHalfTypeInContext(C);
+ LLVMBuilderRef Builder = LLVMCreateBuilder();
+ uint64_t n[2] = {0x4000000000000000, 0x0}; //+2
+ uint64_t m[2] = {0xC000000000000000, 0x0}; //-2
+ LLVMValueRef val1 = LLVMConstFPFromBits(Ty128, n);
+ EXPECT_TRUE(val1 != nullptr);
+ LLVMValueRef val2 = LLVMConstFPFromBits(Ty128, m);
+ EXPECT_TRUE(val2 != nullptr);
+ LLVMValueRef val3 = LLVMBuildFAdd(Builder, val1, val2, "test");
+ EXPECT_TRUE(val3 != nullptr);
+ LLVMValueRef val4 = LLVMConstFPFromBits(TyPPC128, n);
+ EXPECT_TRUE(val4 != nullptr);
+ uint64_t p[1] = {0x0000000040000000}; //+2
+ LLVMValueRef val5 = LLVMConstFPFromBits(TyFloat, p);
+ EXPECT_TRUE(val5 != nullptr);
+ uint64_t q[1] = {0x4000000000000000}; //+2
+ LLVMValueRef val6 = LLVMConstFPFromBits(TyDouble, q);
+ EXPECT_TRUE(val6 != nullptr);
----------------
nikic wrote:
It would be good to check that the results are actually correct. I haven't tested it, but I think something like this would work for this case for example?
```
EXPECT_EQ(APFloat(2.0), unwrap<ConstantFP>(val6)->getValue());
```
https://github.com/llvm/llvm-project/pull/164381
More information about the llvm-commits
mailing list