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