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