xref: /llvm-project/llvm/test/Transforms/InstCombine/nan.ll (revision 4f42deb5f4fde1676e7cf3ddc54e44e0f4a89760)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3
4@empty = private unnamed_addr constant [1 x i8] zeroinitializer, align 1
5@dec = private unnamed_addr constant [2 x i8] c"1\00", align 1
6@hex = private unnamed_addr constant [4 x i8] c"0xf\00", align 1
7
8define double @nan_empty() {
9; CHECK-LABEL: define double @nan_empty() {
10; CHECK-NEXT:    ret double 0x7FF8000000000000
11;
12  %res = call double @nan(ptr @empty)
13  ret double %res
14}
15
16define double @nan_dec() {
17; CHECK-LABEL: define double @nan_dec() {
18; CHECK-NEXT:    ret double 0x7FF8000000000001
19;
20  %res = call double @nan(ptr @dec)
21  ret double %res
22}
23
24define double @nan_hex() {
25; CHECK-LABEL: define double @nan_hex() {
26; CHECK-NEXT:    ret double 0x7FF800000000000F
27;
28  %res = call double @nan(ptr @hex)
29  ret double %res
30}
31
32define float @nanf_empty() {
33; CHECK-LABEL: define float @nanf_empty() {
34; CHECK-NEXT:    ret float 0x7FF8000000000000
35;
36  %res = call float @nanf(ptr @empty)
37  ret float %res
38}
39
40; nagative tests
41
42define double @nan_poison() {
43; CHECK-LABEL: define double @nan_poison() {
44; CHECK-NEXT:    [[RES:%.*]] = call double @nan(ptr poison)
45; CHECK-NEXT:    ret double [[RES]]
46;
47  %res = call double @nan(ptr poison)
48  ret double %res
49}
50
51define double @nan_undef() {
52; CHECK-LABEL: define double @nan_undef() {
53; CHECK-NEXT:    [[RES:%.*]] = call double @nan(ptr undef)
54; CHECK-NEXT:    ret double [[RES]]
55;
56  %res = call double @nan(ptr undef)
57  ret double %res
58}
59
60define double @nan_null() {
61; CHECK-LABEL: define double @nan_null() {
62; CHECK-NEXT:    [[RES:%.*]] = call double @nan(ptr null)
63; CHECK-NEXT:    ret double [[RES]]
64;
65  %res = call double @nan(ptr null)
66  ret double %res
67}
68
69define double @nan_non_constant(ptr %x) {
70; CHECK-LABEL: define double @nan_non_constant(
71; CHECK-SAME: ptr [[X:%.*]]) {
72; CHECK-NEXT:    [[RES:%.*]] = call double @nan(ptr [[X]])
73; CHECK-NEXT:    ret double [[RES]]
74;
75  %res = call double @nan(ptr %x)
76  ret double %res
77}
78
79declare float @nanf(ptr)
80declare double @nan(ptr)
81