| Index: tests_lit/llvm2ice_tests/fp_const_pool.ll
|
| diff --git a/tests_lit/llvm2ice_tests/fp_const_pool.ll b/tests_lit/llvm2ice_tests/fp_const_pool.ll
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c1fa9dfcca090b1b61c193b9d8bd340381449812
|
| --- /dev/null
|
| +++ b/tests_lit/llvm2ice_tests/fp_const_pool.ll
|
| @@ -0,0 +1,71 @@
|
| +; This tests that different floating point constants (such as 0.0 and -0.0)
|
| +; remain distinct even when they sort of look equal, and also that different
|
| +; instances of the same floating point constant (such as NaN and NaN) get the
|
| +; same constant pool entry even when "a==a" would suggest they are different.
|
| +
|
| +; REQUIRES: allow_dump
|
| +
|
| +define void @consume_float(float %f) {
|
| + ret void
|
| +}
|
| +
|
| +define void @consume_double(double %d) {
|
| + ret void
|
| +}
|
| +
|
| +define void @test_zeros() {
|
| +entry:
|
| + call void @consume_float(float 0.0)
|
| + call void @consume_float(float -0.0)
|
| + call void @consume_double(double 0.0)
|
| + call void @consume_double(double -0.0)
|
| + ret void
|
| +}
|
| +; Parse the function, dump the bitcode back out, and stop without translating.
|
| +; This tests that +0.0 and -0.0 aren't accidentally merged into a single
|
| +; zero-valued constant pool entry.
|
| +;
|
| +; RUN: %p2i -i %s --insts | FileCheck --check-prefix=ZERO %s
|
| +; ZERO: test_zeros
|
| +; ZERO-NEXT: entry:
|
| +; ZERO-NEXT: call void @consume_float(float 0.0
|
| +; ZERO-NEXT: call void @consume_float(float -0.0
|
| +; ZERO-NEXT: call void @consume_double(double 0.0
|
| +; ZERO-NEXT: call void @consume_double(double -0.0
|
| +
|
| +
|
| +define void @test_nans() {
|
| +entry:
|
| + call void @consume_float(float 0x7FF8000000000000)
|
| + call void @consume_float(float 0x7FF8000000000000)
|
| + call void @consume_float(float 0xFFF8000000000000)
|
| + call void @consume_float(float 0xFFF8000000000000)
|
| + call void @consume_double(double 0x7FF8000000000000)
|
| + call void @consume_double(double 0x7FF8000000000000)
|
| + call void @consume_double(double 0xFFF8000000000000)
|
| + call void @consume_double(double 0xFFF8000000000000)
|
| + ret void
|
| +}
|
| +; The following tests check the emitted constant pool entries and make sure
|
| +; there is at most one entry for each NaN value. We have to run a separate test
|
| +; for each NaN because the constant pool entries may be emitted in any order.
|
| +;
|
| +; RUN: %p2i -i %s --filetype=asm --llvm-source \
|
| +; RUN: | FileCheck --check-prefix=NANS1 %s
|
| +; NANS1: float nan
|
| +; NANS1-NOT: float nan
|
| +;
|
| +; RUN: %p2i -i %s --filetype=asm --llvm-source \
|
| +; RUN: | FileCheck --check-prefix=NANS2 %s
|
| +; NANS2: float -nan
|
| +; NANS2-NOT: float -nan
|
| +;
|
| +; RUN: %p2i -i %s --filetype=asm --llvm-source \
|
| +; RUN: | FileCheck --check-prefix=NANS3 %s
|
| +; NANS3: double nan
|
| +; NANS3-NOT: double nan
|
| +;
|
| +; RUN: %p2i -i %s --filetype=asm --llvm-source \
|
| +; RUN: | FileCheck --check-prefix=NANS4 %s
|
| +; NANS4: double -nan
|
| +; NANS4-NOT: double -nan
|
|
|