xref: /llvm-project/clang/test/Headers/__clang_hip_math.hip (revision 7eca38ce76d5d1915f4ab7e665964062c0b37697)
12edafe83SMatt Arsenault// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
22edafe83SMatt Arsenault// REQUIRES: amdgpu-registered-target
32edafe83SMatt Arsenault
42edafe83SMatt Arsenault// Test without OCML_BASIC_ROUNDED_OPERATIONS
52edafe83SMatt Arsenault// RUN: %clang_cc1 -include __clang_hip_runtime_wrapper.h \
62edafe83SMatt Arsenault// RUN:   -internal-isystem %S/../../lib/Headers/cuda_wrappers \
72edafe83SMatt Arsenault// RUN:   -internal-isystem %S/Inputs/include \
82edafe83SMatt Arsenault// RUN:   -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-unknown \
92edafe83SMatt Arsenault// RUN:   -target-cpu gfx906 -emit-llvm %s -fcuda-is-device -O1 -o - \
102edafe83SMatt Arsenault// RUN:   -D__HIPCC_RTC__ | FileCheck -check-prefixes=CHECK,DEFAULT %s
112edafe83SMatt Arsenault
122edafe83SMatt Arsenault// Check that we end up with fast math flags set on intrinsic calls
132edafe83SMatt Arsenault// RUN: %clang_cc1 -include __clang_hip_runtime_wrapper.h \
142edafe83SMatt Arsenault// RUN:   -internal-isystem %S/../../lib/Headers/cuda_wrappers \
152edafe83SMatt Arsenault// RUN:   -internal-isystem %S/Inputs/include \
162edafe83SMatt Arsenault// RUN:   -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-unknown \
17c9c91f59SZahira Ammarguellat// RUN:   -target-cpu gfx906 -emit-llvm %s -fcuda-is-device -O1 -menable-no-infs \
18c9c91f59SZahira Ammarguellat// RUN:   -menable-no-nans -o - \
192edafe83SMatt Arsenault// RUN:   -D__HIPCC_RTC__ | FileCheck -check-prefixes=CHECK,FINITEONLY %s
202edafe83SMatt Arsenault
21a0709e22SYaxun (Sam) Liu// Check that we end up with -fapprox-func set on intrinsic calls
22a0709e22SYaxun (Sam) Liu// RUN: %clang_cc1 -include __clang_hip_runtime_wrapper.h \
23a0709e22SYaxun (Sam) Liu// RUN:   -internal-isystem %S/../../lib/Headers/cuda_wrappers \
24a0709e22SYaxun (Sam) Liu// RUN:   -internal-isystem %S/Inputs/include \
25a0709e22SYaxun (Sam) Liu// RUN:   -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-unknown \
26e1788243SYaxun (Sam) Liu// RUN:   -target-cpu gfx906 -emit-llvm %s -fcuda-is-device -O1 -fgpu-approx-transcendentals -o - \
27a0709e22SYaxun (Sam) Liu// RUN:   -D__HIPCC_RTC__ | FileCheck -check-prefixes=CHECK,APPROX %s
28a0709e22SYaxun (Sam) Liu
292edafe83SMatt Arsenault#define BOOL_TYPE int
302edafe83SMatt Arsenaulttypedef unsigned long long uint64_t;
312edafe83SMatt Arsenault
322edafe83SMatt Arsenault// CHECK-LABEL: @test___make_mantissa_base8(
332edafe83SMatt Arsenault// CHECK-NEXT:  entry:
342edafe83SMatt Arsenault// CHECK-NEXT:    br label [[WHILE_COND_I:%.*]]
352edafe83SMatt Arsenault// CHECK:       while.cond.i:
362edafe83SMatt Arsenault// CHECK-NEXT:    [[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
372edafe83SMatt Arsenault// CHECK-NEXT:    [[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_1_I:%.*]], [[CLEANUP_I]] ]
38b57e049fSMatt Arsenault// CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA4:![0-9]+]]
394086ea33SMatt Arsenault// CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
404086ea33SMatt Arsenault// CHECK-NEXT:    br i1 [[CMP_NOT_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
414086ea33SMatt Arsenault// CHECK:       while.body.i:
422edafe83SMatt Arsenault// CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[TMP0]], -8
434086ea33SMatt Arsenault// CHECK-NEXT:    [[OR_COND_I:%.*]] = icmp eq i8 [[TMP1]], 48
444086ea33SMatt Arsenault// CHECK-NEXT:    br i1 [[OR_COND_I]], label [[IF_THEN_I:%.*]], label [[CLEANUP_I]]
452edafe83SMatt Arsenault// CHECK:       if.then.i:
462edafe83SMatt Arsenault// CHECK-NEXT:    [[MUL_I:%.*]] = shl i64 [[__R_0_I]], 3
47d77067d0SNikita Popov// CHECK-NEXT:    [[CONV5_I:%.*]] = zext nneg i8 [[TMP0]] to i64
482edafe83SMatt Arsenault// CHECK-NEXT:    [[ADD_I:%.*]] = add i64 [[MUL_I]], -48
494086ea33SMatt Arsenault// CHECK-NEXT:    [[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV5_I]]
50*7eca38ceSHari Limaye// CHECK-NEXT:    [[INCDEC_PTR_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I]], i64 1
512edafe83SMatt Arsenault// CHECK-NEXT:    br label [[CLEANUP_I]]
522edafe83SMatt Arsenault// CHECK:       cleanup.i:
532edafe83SMatt Arsenault// CHECK-NEXT:    [[__TAGP_ADDR_1_I]] = phi ptr [ [[INCDEC_PTR_I]], [[IF_THEN_I]] ], [ [[__TAGP_ADDR_0_I]], [[WHILE_BODY_I]] ]
542edafe83SMatt Arsenault// CHECK-NEXT:    [[__R_1_I]] = phi i64 [ [[SUB_I]], [[IF_THEN_I]] ], [ [[__R_0_I]], [[WHILE_BODY_I]] ]
55b57e049fSMatt Arsenault// CHECK-NEXT:    br i1 [[OR_COND_I]], label [[WHILE_COND_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT]], !llvm.loop [[LOOP7:![0-9]+]]
562edafe83SMatt Arsenault// CHECK:       _ZL21__make_mantissa_base8PKc.exit:
572edafe83SMatt Arsenault// CHECK-NEXT:    [[RETVAL_2_I:%.*]] = phi i64 [ 0, [[CLEANUP_I]] ], [ [[__R_0_I]], [[WHILE_COND_I]] ]
582edafe83SMatt Arsenault// CHECK-NEXT:    ret i64 [[RETVAL_2_I]]
592edafe83SMatt Arsenault//
602edafe83SMatt Arsenaultextern "C" __device__ uint64_t test___make_mantissa_base8(const char *p) {
612edafe83SMatt Arsenault  return __make_mantissa_base8(p);
622edafe83SMatt Arsenault}
632edafe83SMatt Arsenault
642edafe83SMatt Arsenault// CHECK-LABEL: @test___make_mantissa_base10(
652edafe83SMatt Arsenault// CHECK-NEXT:  entry:
662edafe83SMatt Arsenault// CHECK-NEXT:    br label [[WHILE_COND_I:%.*]]
672edafe83SMatt Arsenault// CHECK:       while.cond.i:
682edafe83SMatt Arsenault// CHECK-NEXT:    [[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
692edafe83SMatt Arsenault// CHECK-NEXT:    [[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_1_I:%.*]], [[CLEANUP_I]] ]
70b57e049fSMatt Arsenault// CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA4]]
714086ea33SMatt Arsenault// CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
724086ea33SMatt Arsenault// CHECK-NEXT:    br i1 [[CMP_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE10PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
734086ea33SMatt Arsenault// CHECK:       while.body.i:
742edafe83SMatt Arsenault// CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[TMP0]], -48
754086ea33SMatt Arsenault// CHECK-NEXT:    [[OR_COND_I:%.*]] = icmp ult i8 [[TMP1]], 10
764086ea33SMatt Arsenault// CHECK-NEXT:    br i1 [[OR_COND_I]], label [[IF_THEN_I:%.*]], label [[CLEANUP_I]]
772edafe83SMatt Arsenault// CHECK:       if.then.i:
782edafe83SMatt Arsenault// CHECK-NEXT:    [[MUL_I:%.*]] = mul i64 [[__R_0_I]], 10
79d77067d0SNikita Popov// CHECK-NEXT:    [[CONV5_I:%.*]] = zext nneg i8 [[TMP0]] to i64
802edafe83SMatt Arsenault// CHECK-NEXT:    [[ADD_I:%.*]] = add i64 [[MUL_I]], -48
814086ea33SMatt Arsenault// CHECK-NEXT:    [[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV5_I]]
82*7eca38ceSHari Limaye// CHECK-NEXT:    [[INCDEC_PTR_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I]], i64 1
832edafe83SMatt Arsenault// CHECK-NEXT:    br label [[CLEANUP_I]]
842edafe83SMatt Arsenault// CHECK:       cleanup.i:
852edafe83SMatt Arsenault// CHECK-NEXT:    [[__TAGP_ADDR_1_I]] = phi ptr [ [[INCDEC_PTR_I]], [[IF_THEN_I]] ], [ [[__TAGP_ADDR_0_I]], [[WHILE_BODY_I]] ]
862edafe83SMatt Arsenault// CHECK-NEXT:    [[__R_1_I]] = phi i64 [ [[SUB_I]], [[IF_THEN_I]] ], [ [[__R_0_I]], [[WHILE_BODY_I]] ]
87b57e049fSMatt Arsenault// CHECK-NEXT:    br i1 [[OR_COND_I]], label [[WHILE_COND_I]], label [[_ZL22__MAKE_MANTISSA_BASE10PKC_EXIT]], !llvm.loop [[LOOP10:![0-9]+]]
882edafe83SMatt Arsenault// CHECK:       _ZL22__make_mantissa_base10PKc.exit:
892edafe83SMatt Arsenault// CHECK-NEXT:    [[RETVAL_2_I:%.*]] = phi i64 [ 0, [[CLEANUP_I]] ], [ [[__R_0_I]], [[WHILE_COND_I]] ]
902edafe83SMatt Arsenault// CHECK-NEXT:    ret i64 [[RETVAL_2_I]]
912edafe83SMatt Arsenault//
922edafe83SMatt Arsenaultextern "C" __device__ uint64_t test___make_mantissa_base10(const char *p) {
932edafe83SMatt Arsenault  return __make_mantissa_base10(p);
942edafe83SMatt Arsenault}
952edafe83SMatt Arsenault
962edafe83SMatt Arsenault// CHECK-LABEL: @test___make_mantissa_base16(
972edafe83SMatt Arsenault// CHECK-NEXT:  entry:
982edafe83SMatt Arsenault// CHECK-NEXT:    br label [[WHILE_COND_I:%.*]]
992edafe83SMatt Arsenault// CHECK:       while.cond.i:
1002edafe83SMatt Arsenault// CHECK-NEXT:    [[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
1012edafe83SMatt Arsenault// CHECK-NEXT:    [[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_2_I:%.*]], [[CLEANUP_I]] ]
102b57e049fSMatt Arsenault// CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA4]]
1034086ea33SMatt Arsenault// CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
1044086ea33SMatt Arsenault// CHECK-NEXT:    br i1 [[CMP_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE16PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
1054086ea33SMatt Arsenault// CHECK:       while.body.i:
1062edafe83SMatt Arsenault// CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[TMP0]], -48
1074086ea33SMatt Arsenault// CHECK-NEXT:    [[OR_COND_I:%.*]] = icmp ult i8 [[TMP1]], 10
1084086ea33SMatt Arsenault// CHECK-NEXT:    br i1 [[OR_COND_I]], label [[IF_END31_I:%.*]], label [[IF_ELSE_I:%.*]]
1092edafe83SMatt Arsenault// CHECK:       if.else.i:
1104086ea33SMatt Arsenault// CHECK-NEXT:    [[TMP2:%.*]] = add i8 [[TMP0]], -97
1114086ea33SMatt Arsenault// CHECK-NEXT:    [[OR_COND33_I:%.*]] = icmp ult i8 [[TMP2]], 6
1124086ea33SMatt Arsenault// CHECK-NEXT:    br i1 [[OR_COND33_I]], label [[IF_END31_I]], label [[IF_ELSE17_I:%.*]]
1134086ea33SMatt Arsenault// CHECK:       if.else17.i:
1144086ea33SMatt Arsenault// CHECK-NEXT:    [[TMP3:%.*]] = add i8 [[TMP0]], -65
1154086ea33SMatt Arsenault// CHECK-NEXT:    [[OR_COND34_I:%.*]] = icmp ult i8 [[TMP3]], 6
1164086ea33SMatt Arsenault// CHECK-NEXT:    br i1 [[OR_COND34_I]], label [[IF_END31_I]], label [[CLEANUP_I]]
1174086ea33SMatt Arsenault// CHECK:       if.end31.i:
1184086ea33SMatt Arsenault// CHECK-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I]] ], [ -87, [[IF_ELSE_I]] ], [ -55, [[IF_ELSE17_I]] ]
1194086ea33SMatt Arsenault// CHECK-NEXT:    [[MUL24_I:%.*]] = shl i64 [[__R_0_I]], 4
120d77067d0SNikita Popov// CHECK-NEXT:    [[CONV25_I:%.*]] = zext nneg i8 [[TMP0]] to i64
1214086ea33SMatt Arsenault// CHECK-NEXT:    [[ADD26_I:%.*]] = add i64 [[MUL24_I]], [[DOTSINK]]
1224086ea33SMatt Arsenault// CHECK-NEXT:    [[ADD28_I:%.*]] = add i64 [[ADD26_I]], [[CONV25_I]]
123*7eca38ceSHari Limaye// CHECK-NEXT:    [[INCDEC_PTR_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I]], i64 1
1242edafe83SMatt Arsenault// CHECK-NEXT:    br label [[CLEANUP_I]]
1252edafe83SMatt Arsenault// CHECK:       cleanup.i:
1264086ea33SMatt Arsenault// CHECK-NEXT:    [[__TAGP_ADDR_1_I]] = phi ptr [ [[INCDEC_PTR_I]], [[IF_END31_I]] ], [ [[__TAGP_ADDR_0_I]], [[IF_ELSE17_I]] ]
1274086ea33SMatt Arsenault// CHECK-NEXT:    [[__R_2_I]] = phi i64 [ [[ADD28_I]], [[IF_END31_I]] ], [ [[__R_0_I]], [[IF_ELSE17_I]] ]
1284086ea33SMatt Arsenault// CHECK-NEXT:    [[COND_I:%.*]] = phi i1 [ true, [[IF_END31_I]] ], [ false, [[IF_ELSE17_I]] ]
129b57e049fSMatt Arsenault// CHECK-NEXT:    br i1 [[COND_I]], label [[WHILE_COND_I]], label [[_ZL22__MAKE_MANTISSA_BASE16PKC_EXIT]], !llvm.loop [[LOOP11:![0-9]+]]
1302edafe83SMatt Arsenault// CHECK:       _ZL22__make_mantissa_base16PKc.exit:
1312edafe83SMatt Arsenault// CHECK-NEXT:    [[RETVAL_2_I:%.*]] = phi i64 [ 0, [[CLEANUP_I]] ], [ [[__R_0_I]], [[WHILE_COND_I]] ]
1322edafe83SMatt Arsenault// CHECK-NEXT:    ret i64 [[RETVAL_2_I]]
1332edafe83SMatt Arsenault//
1342edafe83SMatt Arsenaultextern "C" __device__ uint64_t test___make_mantissa_base16(const char *p) {
1352edafe83SMatt Arsenault  return __make_mantissa_base16(p);
1362edafe83SMatt Arsenault}
1372edafe83SMatt Arsenault
1382edafe83SMatt Arsenault// CHECK-LABEL: @test___make_mantissa(
1392edafe83SMatt Arsenault// CHECK-NEXT:  entry:
140b57e049fSMatt Arsenault// CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[P:%.*]], align 1, !tbaa [[TBAA4]]
1414086ea33SMatt Arsenault// CHECK-NEXT:    [[CMP_I:%.*]] = icmp eq i8 [[TMP0]], 48
1421a2e77cfSAmara Emerson// CHECK-NEXT:    br i1 [[CMP_I]], label [[IF_THEN_I:%.*]], label [[WHILE_COND_I14_I:%.*]]
1434086ea33SMatt Arsenault// CHECK:       if.then.i:
144*7eca38ceSHari Limaye// CHECK-NEXT:    [[INCDEC_PTR_I:%.*]] = getelementptr inbounds nuw i8, ptr [[P]], i64 1
145b57e049fSMatt Arsenault// CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[INCDEC_PTR_I]], align 1, !tbaa [[TBAA4]]
1461a2e77cfSAmara Emerson// CHECK-NEXT:    switch i8 [[TMP1]], label [[WHILE_COND_I_I:%.*]] [
1471a2e77cfSAmara Emerson// CHECK-NEXT:      i8 120, label [[WHILE_COND_I30_I_PREHEADER:%.*]]
1481a2e77cfSAmara Emerson// CHECK-NEXT:      i8 88, label [[WHILE_COND_I30_I_PREHEADER]]
1494086ea33SMatt Arsenault// CHECK-NEXT:    ]
1501a2e77cfSAmara Emerson// CHECK:       while.cond.i30.i.preheader:
1511a2e77cfSAmara Emerson// CHECK-NEXT:    br label [[WHILE_COND_I30_I:%.*]]
1521a2e77cfSAmara Emerson// CHECK:       while.cond.i30.i:
1531a2e77cfSAmara Emerson// CHECK-NEXT:    [[__TAGP_ADDR_0_I31_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I37_I:%.*]], [[CLEANUP_I36_I:%.*]] ], [ [[INCDEC_PTR_I]], [[WHILE_COND_I30_I_PREHEADER]] ]
1541a2e77cfSAmara Emerson// CHECK-NEXT:    [[__R_0_I32_I:%.*]] = phi i64 [ [[__R_2_I_I:%.*]], [[CLEANUP_I36_I]] ], [ 0, [[WHILE_COND_I30_I_PREHEADER]] ]
1551a2e77cfSAmara Emerson// CHECK-NEXT:    [[TMP2:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I31_I]], align 1, !tbaa [[TBAA4]]
1561a2e77cfSAmara Emerson// CHECK-NEXT:    [[CMP_NOT_I33_I:%.*]] = icmp eq i8 [[TMP2]], 0
1571a2e77cfSAmara Emerson// CHECK-NEXT:    br i1 [[CMP_NOT_I33_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT:%.*]], label [[WHILE_BODY_I34_I:%.*]]
1581a2e77cfSAmara Emerson// CHECK:       while.body.i34.i:
1594086ea33SMatt Arsenault// CHECK-NEXT:    [[TMP3:%.*]] = add i8 [[TMP2]], -48
1601a2e77cfSAmara Emerson// CHECK-NEXT:    [[OR_COND_I35_I:%.*]] = icmp ult i8 [[TMP3]], 10
1611a2e77cfSAmara Emerson// CHECK-NEXT:    br i1 [[OR_COND_I35_I]], label [[IF_END31_I_I:%.*]], label [[IF_ELSE_I_I:%.*]]
1624086ea33SMatt Arsenault// CHECK:       if.else.i.i:
1634086ea33SMatt Arsenault// CHECK-NEXT:    [[TMP4:%.*]] = add i8 [[TMP2]], -97
1644086ea33SMatt Arsenault// CHECK-NEXT:    [[OR_COND33_I_I:%.*]] = icmp ult i8 [[TMP4]], 6
1654086ea33SMatt Arsenault// CHECK-NEXT:    br i1 [[OR_COND33_I_I]], label [[IF_END31_I_I]], label [[IF_ELSE17_I_I:%.*]]
1664086ea33SMatt Arsenault// CHECK:       if.else17.i.i:
1674086ea33SMatt Arsenault// CHECK-NEXT:    [[TMP5:%.*]] = add i8 [[TMP2]], -65
1684086ea33SMatt Arsenault// CHECK-NEXT:    [[OR_COND34_I_I:%.*]] = icmp ult i8 [[TMP5]], 6
1691a2e77cfSAmara Emerson// CHECK-NEXT:    br i1 [[OR_COND34_I_I]], label [[IF_END31_I_I]], label [[CLEANUP_I36_I]]
1704086ea33SMatt Arsenault// CHECK:       if.end31.i.i:
1711a2e77cfSAmara Emerson// CHECK-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I34_I]] ], [ -87, [[IF_ELSE_I_I]] ], [ -55, [[IF_ELSE17_I_I]] ]
1721a2e77cfSAmara Emerson// CHECK-NEXT:    [[MUL24_I_I:%.*]] = shl i64 [[__R_0_I32_I]], 4
173d77067d0SNikita Popov// CHECK-NEXT:    [[CONV25_I_I:%.*]] = zext nneg i8 [[TMP2]] to i64
1744086ea33SMatt Arsenault// CHECK-NEXT:    [[ADD26_I_I:%.*]] = add i64 [[MUL24_I_I]], [[DOTSINK]]
1754086ea33SMatt Arsenault// CHECK-NEXT:    [[ADD28_I_I:%.*]] = add i64 [[ADD26_I_I]], [[CONV25_I_I]]
176*7eca38ceSHari Limaye// CHECK-NEXT:    [[INCDEC_PTR_I40_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I31_I]], i64 1
1771a2e77cfSAmara Emerson// CHECK-NEXT:    br label [[CLEANUP_I36_I]]
1781a2e77cfSAmara Emerson// CHECK:       cleanup.i36.i:
1791a2e77cfSAmara Emerson// CHECK-NEXT:    [[__TAGP_ADDR_1_I37_I]] = phi ptr [ [[INCDEC_PTR_I40_I]], [[IF_END31_I_I]] ], [ [[__TAGP_ADDR_0_I31_I]], [[IF_ELSE17_I_I]] ]
1801a2e77cfSAmara Emerson// CHECK-NEXT:    [[__R_2_I_I]] = phi i64 [ [[ADD28_I_I]], [[IF_END31_I_I]] ], [ [[__R_0_I32_I]], [[IF_ELSE17_I_I]] ]
1811a2e77cfSAmara Emerson// CHECK-NEXT:    [[COND_I_I:%.*]] = phi i1 [ true, [[IF_END31_I_I]] ], [ false, [[IF_ELSE17_I_I]] ]
1821a2e77cfSAmara Emerson// CHECK-NEXT:    br i1 [[COND_I_I]], label [[WHILE_COND_I30_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], !llvm.loop [[LOOP11]]
1831a2e77cfSAmara Emerson// CHECK:       while.cond.i.i:
1841a2e77cfSAmara Emerson// CHECK-NEXT:    [[__TAGP_ADDR_0_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I_I:%.*]], [[CLEANUP_I_I:%.*]] ], [ [[INCDEC_PTR_I]], [[IF_THEN_I]] ]
1851a2e77cfSAmara Emerson// CHECK-NEXT:    [[__R_0_I_I:%.*]] = phi i64 [ [[__R_1_I_I:%.*]], [[CLEANUP_I_I]] ], [ 0, [[IF_THEN_I]] ]
1861a2e77cfSAmara Emerson// CHECK-NEXT:    [[TMP6:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I_I]], align 1, !tbaa [[TBAA4]]
1871a2e77cfSAmara Emerson// CHECK-NEXT:    [[CMP_NOT_I_I:%.*]] = icmp eq i8 [[TMP6]], 0
1881a2e77cfSAmara Emerson// CHECK-NEXT:    br i1 [[CMP_NOT_I_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], label [[WHILE_BODY_I_I:%.*]]
1891a2e77cfSAmara Emerson// CHECK:       while.body.i.i:
1901a2e77cfSAmara Emerson// CHECK-NEXT:    [[TMP7:%.*]] = and i8 [[TMP6]], -8
1911a2e77cfSAmara Emerson// CHECK-NEXT:    [[OR_COND_I_I:%.*]] = icmp eq i8 [[TMP7]], 48
1921a2e77cfSAmara Emerson// CHECK-NEXT:    br i1 [[OR_COND_I_I]], label [[IF_THEN_I_I:%.*]], label [[CLEANUP_I_I]]
1931a2e77cfSAmara Emerson// CHECK:       if.then.i.i:
1941a2e77cfSAmara Emerson// CHECK-NEXT:    [[MUL_I_I:%.*]] = shl i64 [[__R_0_I_I]], 3
195d77067d0SNikita Popov// CHECK-NEXT:    [[CONV5_I_I:%.*]] = zext nneg i8 [[TMP6]] to i64
1961a2e77cfSAmara Emerson// CHECK-NEXT:    [[ADD_I_I:%.*]] = add i64 [[MUL_I_I]], -48
1971a2e77cfSAmara Emerson// CHECK-NEXT:    [[SUB_I_I:%.*]] = add i64 [[ADD_I_I]], [[CONV5_I_I]]
198*7eca38ceSHari Limaye// CHECK-NEXT:    [[INCDEC_PTR_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I_I]], i64 1
1994086ea33SMatt Arsenault// CHECK-NEXT:    br label [[CLEANUP_I_I]]
2004086ea33SMatt Arsenault// CHECK:       cleanup.i.i:
2011a2e77cfSAmara Emerson// CHECK-NEXT:    [[__TAGP_ADDR_1_I_I]] = phi ptr [ [[INCDEC_PTR_I_I]], [[IF_THEN_I_I]] ], [ [[__TAGP_ADDR_0_I_I]], [[WHILE_BODY_I_I]] ]
2021a2e77cfSAmara Emerson// CHECK-NEXT:    [[__R_1_I_I]] = phi i64 [ [[SUB_I_I]], [[IF_THEN_I_I]] ], [ [[__R_0_I_I]], [[WHILE_BODY_I_I]] ]
2031a2e77cfSAmara Emerson// CHECK-NEXT:    br i1 [[OR_COND_I_I]], label [[WHILE_COND_I_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], !llvm.loop [[LOOP7]]
20485f4ef3bSArthur Eubanks// CHECK:       while.cond.i14.i:
2051a2e77cfSAmara Emerson// CHECK-NEXT:    [[__TAGP_ADDR_0_I15_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I21_I:%.*]], [[CLEANUP_I20_I:%.*]] ], [ [[P]], [[ENTRY:%.*]] ]
2061a2e77cfSAmara Emerson// CHECK-NEXT:    [[__R_0_I16_I:%.*]] = phi i64 [ [[__R_1_I22_I:%.*]], [[CLEANUP_I20_I]] ], [ 0, [[ENTRY]] ]
2071a2e77cfSAmara Emerson// CHECK-NEXT:    [[TMP8:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I15_I]], align 1, !tbaa [[TBAA4]]
2081a2e77cfSAmara Emerson// CHECK-NEXT:    [[CMP_NOT_I17_I:%.*]] = icmp eq i8 [[TMP8]], 0
20985f4ef3bSArthur Eubanks// CHECK-NEXT:    br i1 [[CMP_NOT_I17_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], label [[WHILE_BODY_I18_I:%.*]]
21085f4ef3bSArthur Eubanks// CHECK:       while.body.i18.i:
2111a2e77cfSAmara Emerson// CHECK-NEXT:    [[TMP9:%.*]] = add i8 [[TMP8]], -48
2121a2e77cfSAmara Emerson// CHECK-NEXT:    [[OR_COND_I19_I:%.*]] = icmp ult i8 [[TMP9]], 10
21385f4ef3bSArthur Eubanks// CHECK-NEXT:    br i1 [[OR_COND_I19_I]], label [[IF_THEN_I24_I:%.*]], label [[CLEANUP_I20_I]]
21485f4ef3bSArthur Eubanks// CHECK:       if.then.i24.i:
2151a2e77cfSAmara Emerson// CHECK-NEXT:    [[MUL_I25_I:%.*]] = mul i64 [[__R_0_I16_I]], 10
216d77067d0SNikita Popov// CHECK-NEXT:    [[CONV5_I26_I:%.*]] = zext nneg i8 [[TMP8]] to i64
21785f4ef3bSArthur Eubanks// CHECK-NEXT:    [[ADD_I27_I:%.*]] = add i64 [[MUL_I25_I]], -48
21885f4ef3bSArthur Eubanks// CHECK-NEXT:    [[SUB_I28_I:%.*]] = add i64 [[ADD_I27_I]], [[CONV5_I26_I]]
219*7eca38ceSHari Limaye// CHECK-NEXT:    [[INCDEC_PTR_I29_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I15_I]], i64 1
22085f4ef3bSArthur Eubanks// CHECK-NEXT:    br label [[CLEANUP_I20_I]]
22185f4ef3bSArthur Eubanks// CHECK:       cleanup.i20.i:
22285f4ef3bSArthur Eubanks// CHECK-NEXT:    [[__TAGP_ADDR_1_I21_I]] = phi ptr [ [[INCDEC_PTR_I29_I]], [[IF_THEN_I24_I]] ], [ [[__TAGP_ADDR_0_I15_I]], [[WHILE_BODY_I18_I]] ]
22385f4ef3bSArthur Eubanks// CHECK-NEXT:    [[__R_1_I22_I]] = phi i64 [ [[SUB_I28_I]], [[IF_THEN_I24_I]] ], [ [[__R_0_I16_I]], [[WHILE_BODY_I18_I]] ]
2241a2e77cfSAmara Emerson// CHECK-NEXT:    br i1 [[OR_COND_I19_I]], label [[WHILE_COND_I14_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], !llvm.loop [[LOOP10]]
2254086ea33SMatt Arsenault// CHECK:       _ZL15__make_mantissaPKc.exit:
2261a2e77cfSAmara Emerson// CHECK-NEXT:    [[RETVAL_0_I:%.*]] = phi i64 [ 0, [[CLEANUP_I_I]] ], [ [[__R_0_I_I]], [[WHILE_COND_I_I]] ], [ 0, [[CLEANUP_I36_I]] ], [ [[__R_0_I32_I]], [[WHILE_COND_I30_I]] ], [ 0, [[CLEANUP_I20_I]] ], [ [[__R_0_I16_I]], [[WHILE_COND_I14_I]] ]
2274086ea33SMatt Arsenault// CHECK-NEXT:    ret i64 [[RETVAL_0_I]]
2282edafe83SMatt Arsenault//
2292edafe83SMatt Arsenaultextern "C" __device__ uint64_t test___make_mantissa(const char *p) {
2302edafe83SMatt Arsenault  return __make_mantissa(p);
2312edafe83SMatt Arsenault}
2322edafe83SMatt Arsenault
2332edafe83SMatt Arsenault// CHECK-LABEL: @test_abs(
2342edafe83SMatt Arsenault// CHECK-NEXT:  entry:
2355c214eb0SAndreas Jonson// CHECK-NEXT:    [[TMP0:%.*]] = tail call noundef range(i32 0, -2147483648) i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)
2361a2e77cfSAmara Emerson// CHECK-NEXT:    ret i32 [[TMP0]]
2372edafe83SMatt Arsenault//
2382edafe83SMatt Arsenaultextern "C" __device__ int test_abs(int x) {
2392edafe83SMatt Arsenault  return abs(x);
2402edafe83SMatt Arsenault}
2412edafe83SMatt Arsenault
2422edafe83SMatt Arsenault// CHECK-LABEL: @test_labs(
2432edafe83SMatt Arsenault// CHECK-NEXT:  entry:
2445c214eb0SAndreas Jonson// CHECK-NEXT:    [[TMP0:%.*]] = tail call noundef range(i64 0, -9223372036854775808) i64 @llvm.abs.i64(i64 [[X:%.*]], i1 true)
2451a2e77cfSAmara Emerson// CHECK-NEXT:    ret i64 [[TMP0]]
2462edafe83SMatt Arsenault//
2472edafe83SMatt Arsenaultextern "C" __device__ long test_labs(long x) {
2482edafe83SMatt Arsenault  return labs(x);
2492edafe83SMatt Arsenault}
2502edafe83SMatt Arsenault
2512edafe83SMatt Arsenault// CHECK-LABEL: @test_llabs(
2522edafe83SMatt Arsenault// CHECK-NEXT:  entry:
2535c214eb0SAndreas Jonson// CHECK-NEXT:    [[TMP0:%.*]] = tail call noundef range(i64 0, -9223372036854775808) i64 @llvm.abs.i64(i64 [[X:%.*]], i1 true)
2541a2e77cfSAmara Emerson// CHECK-NEXT:    ret i64 [[TMP0]]
2552edafe83SMatt Arsenault//
2562edafe83SMatt Arsenaultextern "C" __device__ long long test_llabs(long x) {
2572edafe83SMatt Arsenault  return llabs(x);
2582edafe83SMatt Arsenault}
2592edafe83SMatt Arsenault
2602edafe83SMatt Arsenault// DEFAULT-LABEL: @test_acosf(
2612edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
262a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_acos_f32(float noundef [[X:%.*]]) #[[ATTR12:[0-9]+]]
2632edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
2642edafe83SMatt Arsenault//
2652edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_acosf(
2662edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
267a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_acos_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12:[0-9]+]]
2682edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
2692edafe83SMatt Arsenault//
270a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_acosf(
271a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
272a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_acos_f32(float noundef [[X:%.*]]) #[[ATTR12:[0-9]+]]
273a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
274a0709e22SYaxun (Sam) Liu//
2752edafe83SMatt Arsenaultextern "C" __device__ float test_acosf(float x) {
2762edafe83SMatt Arsenault  return acosf(x);
2772edafe83SMatt Arsenault}
2782edafe83SMatt Arsenault
2792edafe83SMatt Arsenault// DEFAULT-LABEL: @test_acos(
2802edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
281a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_acos_f64(double noundef [[X:%.*]]) #[[ATTR12]]
2822edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
2832edafe83SMatt Arsenault//
2842edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_acos(
2852edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
286a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_acos_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
2872edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
2882edafe83SMatt Arsenault//
289a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_acos(
290a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
291a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_acos_f64(double noundef [[X:%.*]]) #[[ATTR12]]
292a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
293a0709e22SYaxun (Sam) Liu//
2942edafe83SMatt Arsenaultextern "C" __device__ double test_acos(double x) {
2952edafe83SMatt Arsenault  return acos(x);
2962edafe83SMatt Arsenault}
2972edafe83SMatt Arsenault
2982edafe83SMatt Arsenault// DEFAULT-LABEL: @test_acoshf(
2992edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
300a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_acosh_f32(float noundef [[X:%.*]]) #[[ATTR13:[0-9]+]]
3012edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
3022edafe83SMatt Arsenault//
3032edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_acoshf(
3042edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
305a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_acosh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13:[0-9]+]]
3062edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
3072edafe83SMatt Arsenault//
308a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_acoshf(
309a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
310a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_acosh_f32(float noundef [[X:%.*]]) #[[ATTR13:[0-9]+]]
311a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
312a0709e22SYaxun (Sam) Liu//
3132edafe83SMatt Arsenaultextern "C" __device__ float test_acoshf(float x) {
3142edafe83SMatt Arsenault  return acoshf(x);
3152edafe83SMatt Arsenault}
3162edafe83SMatt Arsenault
3172edafe83SMatt Arsenault// DEFAULT-LABEL: @test_acosh(
3182edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
319a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_acosh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
3202edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
3212edafe83SMatt Arsenault//
3222edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_acosh(
3232edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
324a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_acosh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
3252edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
3262edafe83SMatt Arsenault//
327a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_acosh(
328a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
329a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_acosh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
330a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
331a0709e22SYaxun (Sam) Liu//
3322edafe83SMatt Arsenaultextern "C" __device__ double test_acosh(double x) {
3332edafe83SMatt Arsenault  return acosh(x);
3342edafe83SMatt Arsenault}
3352edafe83SMatt Arsenault
3362edafe83SMatt Arsenault// DEFAULT-LABEL: @test_asinf(
3372edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
338a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_asin_f32(float noundef [[X:%.*]]) #[[ATTR12]]
3392edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
3402edafe83SMatt Arsenault//
3412edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_asinf(
3422edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
343a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_asin_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
3442edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
3452edafe83SMatt Arsenault//
346a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_asinf(
347a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
348a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_asin_f32(float noundef [[X:%.*]]) #[[ATTR12]]
349a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
350a0709e22SYaxun (Sam) Liu//
3512edafe83SMatt Arsenaultextern "C" __device__ float test_asinf(float x) {
3522edafe83SMatt Arsenault  return asinf(x);
3532edafe83SMatt Arsenault}
3542edafe83SMatt Arsenault
3552edafe83SMatt Arsenault// DEFAULT-LABEL: @test_asin(
3562edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
357a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_asin_f64(double noundef [[X:%.*]]) #[[ATTR12]]
3582edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
3592edafe83SMatt Arsenault//
3602edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_asin(
3612edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
362a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_asin_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
3632edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
3642edafe83SMatt Arsenault//
365a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_asin(
366a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
367a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_asin_f64(double noundef [[X:%.*]]) #[[ATTR12]]
368a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
369a0709e22SYaxun (Sam) Liu//
3702edafe83SMatt Arsenaultextern "C" __device__ double test_asin(double x) {
3712edafe83SMatt Arsenault
3722edafe83SMatt Arsenault  return asin(x);
3732edafe83SMatt Arsenault}
3742edafe83SMatt Arsenault
3752edafe83SMatt Arsenault// DEFAULT-LABEL: @test_asinhf(
3762edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
377a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_asinh_f32(float noundef [[X:%.*]]) #[[ATTR13]]
3782edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
3792edafe83SMatt Arsenault//
3802edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_asinhf(
3812edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
382a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_asinh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
3832edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
3842edafe83SMatt Arsenault//
385a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_asinhf(
386a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
387a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_asinh_f32(float noundef [[X:%.*]]) #[[ATTR13]]
388a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
389a0709e22SYaxun (Sam) Liu//
3902edafe83SMatt Arsenaultextern "C" __device__ float test_asinhf(float x) {
3912edafe83SMatt Arsenault  return asinhf(x);
3922edafe83SMatt Arsenault}
3932edafe83SMatt Arsenault
3942edafe83SMatt Arsenault// DEFAULT-LABEL: @test_asinh(
3952edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
396a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_asinh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
3972edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
3982edafe83SMatt Arsenault//
3992edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_asinh(
4002edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
401a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_asinh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
4022edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
4032edafe83SMatt Arsenault//
404a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_asinh(
405a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
406a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_asinh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
407a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
408a0709e22SYaxun (Sam) Liu//
4092edafe83SMatt Arsenaultextern "C" __device__ double test_asinh(double x) {
4102edafe83SMatt Arsenault  return asinh(x);
4112edafe83SMatt Arsenault}
4122edafe83SMatt Arsenault
4132edafe83SMatt Arsenault// DEFAULT-LABEL: @test_atan2f(
4142edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
415a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atan2_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
4162edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
4172edafe83SMatt Arsenault//
4182edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_atan2f(
4192edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
420a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_atan2_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
4212edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
4222edafe83SMatt Arsenault//
423a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_atan2f(
424a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
425a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atan2_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
426a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
427a0709e22SYaxun (Sam) Liu//
4282edafe83SMatt Arsenaultextern "C" __device__ float test_atan2f(float x, float y) {
4292edafe83SMatt Arsenault  return atan2f(x, y);
4302edafe83SMatt Arsenault}
4312edafe83SMatt Arsenault
4322edafe83SMatt Arsenault// DEFAULT-LABEL: @test_atan2(
4332edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
434a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atan2_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
4352edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
4362edafe83SMatt Arsenault//
4372edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_atan2(
4382edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
439a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_atan2_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
4402edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
4412edafe83SMatt Arsenault//
442a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_atan2(
443a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
444a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atan2_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
445a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
446a0709e22SYaxun (Sam) Liu//
4472edafe83SMatt Arsenaultextern "C" __device__ double test_atan2(double x, double y) {
4482edafe83SMatt Arsenault  return atan2(x, y);
4492edafe83SMatt Arsenault}
4502edafe83SMatt Arsenault
4512edafe83SMatt Arsenault// DEFAULT-LABEL: @test_atanf(
4522edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
453a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atan_f32(float noundef [[X:%.*]]) #[[ATTR12]]
4542edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
4552edafe83SMatt Arsenault//
4562edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_atanf(
4572edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
458a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_atan_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
4592edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
4602edafe83SMatt Arsenault//
461a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_atanf(
462a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
463a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atan_f32(float noundef [[X:%.*]]) #[[ATTR12]]
464a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
465a0709e22SYaxun (Sam) Liu//
4662edafe83SMatt Arsenaultextern "C" __device__ float test_atanf(float x) {
4672edafe83SMatt Arsenault  return atanf(x);
4682edafe83SMatt Arsenault}
4692edafe83SMatt Arsenault
4702edafe83SMatt Arsenault// DEFAULT-LABEL: @test_atan(
4712edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
472a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atan_f64(double noundef [[X:%.*]]) #[[ATTR12]]
4732edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
4742edafe83SMatt Arsenault//
4752edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_atan(
4762edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
477a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_atan_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
4782edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
4792edafe83SMatt Arsenault//
480a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_atan(
481a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
482a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atan_f64(double noundef [[X:%.*]]) #[[ATTR12]]
483a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
484a0709e22SYaxun (Sam) Liu//
4852edafe83SMatt Arsenaultextern "C" __device__ double test_atan(double x) {
4862edafe83SMatt Arsenault  return atan(x);
4872edafe83SMatt Arsenault}
4882edafe83SMatt Arsenault
4892edafe83SMatt Arsenault// DEFAULT-LABEL: @test_atanhf(
4902edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
491a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atanh_f32(float noundef [[X:%.*]]) #[[ATTR13]]
4922edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
4932edafe83SMatt Arsenault//
4942edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_atanhf(
4952edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
496a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_atanh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
4972edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
4982edafe83SMatt Arsenault//
499a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_atanhf(
500a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
501a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atanh_f32(float noundef [[X:%.*]]) #[[ATTR13]]
502a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
503a0709e22SYaxun (Sam) Liu//
5042edafe83SMatt Arsenaultextern "C" __device__ float test_atanhf(float x) {
5052edafe83SMatt Arsenault  return atanhf(x);
5062edafe83SMatt Arsenault}
5072edafe83SMatt Arsenault
5082edafe83SMatt Arsenault// DEFAULT-LABEL: @test_atanh(
5092edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
510a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atanh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
5112edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
5122edafe83SMatt Arsenault//
5132edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_atanh(
5142edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
515a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_atanh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
5162edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
5172edafe83SMatt Arsenault//
518a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_atanh(
519a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
520a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atanh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
521a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
522a0709e22SYaxun (Sam) Liu//
5232edafe83SMatt Arsenaultextern "C" __device__ double test_atanh(double x) {
5242edafe83SMatt Arsenault  return atanh(x);
5252edafe83SMatt Arsenault}
5262edafe83SMatt Arsenault
5272edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cbrtf(
5282edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
529a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cbrt_f32(float noundef [[X:%.*]]) #[[ATTR13]]
5302edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
5312edafe83SMatt Arsenault//
5322edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cbrtf(
5332edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
534a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_cbrt_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
5352edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
5362edafe83SMatt Arsenault//
537a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cbrtf(
538a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
539a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cbrt_f32(float noundef [[X:%.*]]) #[[ATTR13]]
540a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
541a0709e22SYaxun (Sam) Liu//
5422edafe83SMatt Arsenaultextern "C" __device__ float test_cbrtf(float x) {
5432edafe83SMatt Arsenault  return cbrtf(x);
5442edafe83SMatt Arsenault}
5452edafe83SMatt Arsenault
5462edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cbrt(
5472edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
548a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cbrt_f64(double noundef [[X:%.*]]) #[[ATTR13]]
5492edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
5502edafe83SMatt Arsenault//
5512edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cbrt(
5522edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
553a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_cbrt_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
5542edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
5552edafe83SMatt Arsenault//
556a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cbrt(
557a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
558a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cbrt_f64(double noundef [[X:%.*]]) #[[ATTR13]]
559a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
560a0709e22SYaxun (Sam) Liu//
5612edafe83SMatt Arsenaultextern "C" __device__ double test_cbrt(double x) {
5622edafe83SMatt Arsenault  return cbrt(x);
5632edafe83SMatt Arsenault}
5642edafe83SMatt Arsenault
5652edafe83SMatt Arsenault// DEFAULT-LABEL: @test_ceilf(
5662edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
5672da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ceil.f32(float [[X:%.*]])
5689a97e3bfSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
5692edafe83SMatt Arsenault//
5702edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_ceilf(
5712edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
5722da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.ceil.f32(float [[X:%.*]])
5739a97e3bfSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
5742edafe83SMatt Arsenault//
575a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_ceilf(
576a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
5772da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ceil.f32(float [[X:%.*]])
578a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
579a0709e22SYaxun (Sam) Liu//
5802edafe83SMatt Arsenaultextern "C" __device__ float test_ceilf(float x) {
5812edafe83SMatt Arsenault  return ceilf(x);
5822edafe83SMatt Arsenault}
5832edafe83SMatt Arsenault
5842edafe83SMatt Arsenault// DEFAULT-LABEL: @test_ceil(
5852edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
5862da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ceil.f64(double [[X:%.*]])
5879a97e3bfSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
5882edafe83SMatt Arsenault//
5892edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_ceil(
5902edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
5912da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.ceil.f64(double [[X:%.*]])
5929a97e3bfSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
5932edafe83SMatt Arsenault//
594a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_ceil(
595a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
5962da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ceil.f64(double [[X:%.*]])
597a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
598a0709e22SYaxun (Sam) Liu//
5992edafe83SMatt Arsenaultextern "C" __device__ double test_ceil(double x) {
6002edafe83SMatt Arsenault  return ceil(x);
6012edafe83SMatt Arsenault}
6022edafe83SMatt Arsenault
6032edafe83SMatt Arsenault// DEFAULT-LABEL: @test_copysignf(
6042edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
6052da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.copysign.f32(float [[X:%.*]], float [[Y:%.*]])
6064524a315SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
6072edafe83SMatt Arsenault//
6082edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_copysignf(
6092edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
6102da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.copysign.f32(float [[X:%.*]], float [[Y:%.*]])
6114524a315SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
6122edafe83SMatt Arsenault//
613a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_copysignf(
614a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
6152da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.copysign.f32(float [[X:%.*]], float [[Y:%.*]])
616a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
617a0709e22SYaxun (Sam) Liu//
6182edafe83SMatt Arsenaultextern "C" __device__ float test_copysignf(float x, float y) {
6192edafe83SMatt Arsenault  return copysignf(x, y);
6202edafe83SMatt Arsenault}
6212edafe83SMatt Arsenault
6222edafe83SMatt Arsenault// DEFAULT-LABEL: @test_copysign(
6232edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
6242da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.copysign.f64(double [[X:%.*]], double [[Y:%.*]])
6254524a315SMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
6262edafe83SMatt Arsenault//
6272edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_copysign(
6282edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
6292da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.copysign.f64(double [[X:%.*]], double [[Y:%.*]])
6304524a315SMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
6312edafe83SMatt Arsenault//
632a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_copysign(
633a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
6342da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.copysign.f64(double [[X:%.*]], double [[Y:%.*]])
635a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
636a0709e22SYaxun (Sam) Liu//
6372edafe83SMatt Arsenaultextern "C" __device__ double test_copysign(double x, double y) {
6382edafe83SMatt Arsenault  return copysign(x, y);
6392edafe83SMatt Arsenault}
6402edafe83SMatt Arsenault
6412edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cosf(
6422edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
643a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cos_f32(float noundef [[X:%.*]]) #[[ATTR14:[0-9]+]]
6442edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
6452edafe83SMatt Arsenault//
6462edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cosf(
6472edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
648a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_cos_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14:[0-9]+]]
6492edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
6502edafe83SMatt Arsenault//
651a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cosf(
652a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
653a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I1:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X:%.*]]) #[[ATTR14:[0-9]+]]
6541a2e77cfSAmara Emerson// APPROX-NEXT:    ret float [[CALL_I1]]
655a0709e22SYaxun (Sam) Liu//
6562edafe83SMatt Arsenaultextern "C" __device__ float test_cosf(float x) {
6572edafe83SMatt Arsenault  return cosf(x);
6582edafe83SMatt Arsenault}
6592edafe83SMatt Arsenault
6602edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cos(
6612edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
662a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cos_f64(double noundef [[X:%.*]]) #[[ATTR14]]
6632edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
6642edafe83SMatt Arsenault//
6652edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cos(
6662edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
667a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_cos_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
6682edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
6692edafe83SMatt Arsenault//
670a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cos(
671a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
672a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cos_f64(double noundef [[X:%.*]]) #[[ATTR14]]
673a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
674a0709e22SYaxun (Sam) Liu//
6752edafe83SMatt Arsenaultextern "C" __device__ double test_cos(double x) {
6762edafe83SMatt Arsenault  return cos(x);
6772edafe83SMatt Arsenault}
6782edafe83SMatt Arsenault
6792edafe83SMatt Arsenault// DEFAULT-LABEL: @test_coshf(
6802edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
681a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cosh_f32(float noundef [[X:%.*]]) #[[ATTR13]]
6822edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
6832edafe83SMatt Arsenault//
6842edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_coshf(
6852edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
686a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_cosh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
6872edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
6882edafe83SMatt Arsenault//
689a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_coshf(
690a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
691a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cosh_f32(float noundef [[X:%.*]]) #[[ATTR13]]
692a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
693a0709e22SYaxun (Sam) Liu//
6942edafe83SMatt Arsenaultextern "C" __device__ float test_coshf(float x) {
6952edafe83SMatt Arsenault  return coshf(x);
6962edafe83SMatt Arsenault}
6972edafe83SMatt Arsenault
6982edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cosh(
6992edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
700a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cosh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
7012edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
7022edafe83SMatt Arsenault//
7032edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cosh(
7042edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
705a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_cosh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
7062edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
7072edafe83SMatt Arsenault//
708a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cosh(
709a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
710a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cosh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
711a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
712a0709e22SYaxun (Sam) Liu//
7132edafe83SMatt Arsenaultextern "C" __device__ double test_cosh(double x) {
7142edafe83SMatt Arsenault  return cosh(x);
7152edafe83SMatt Arsenault}
7162edafe83SMatt Arsenault
7172edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cospif(
7182edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
719a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cospi_f32(float noundef [[X:%.*]]) #[[ATTR14]]
7202edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
7212edafe83SMatt Arsenault//
7222edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cospif(
7232edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
724a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_cospi_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
7252edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
7262edafe83SMatt Arsenault//
727a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cospif(
728a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
729a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cospi_f32(float noundef [[X:%.*]]) #[[ATTR14]]
730a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
731a0709e22SYaxun (Sam) Liu//
7322edafe83SMatt Arsenaultextern "C" __device__ float test_cospif(float x) {
7332edafe83SMatt Arsenault  return cospif(x);
7342edafe83SMatt Arsenault}
7352edafe83SMatt Arsenault
7362edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cospi(
7372edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
738a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cospi_f64(double noundef [[X:%.*]]) #[[ATTR14]]
7392edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
7402edafe83SMatt Arsenault//
7412edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cospi(
7422edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
743a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_cospi_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
7442edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
7452edafe83SMatt Arsenault//
746a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cospi(
747a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
748a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cospi_f64(double noundef [[X:%.*]]) #[[ATTR14]]
749a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
750a0709e22SYaxun (Sam) Liu//
7512edafe83SMatt Arsenaultextern "C" __device__ double test_cospi(double x) {
7522edafe83SMatt Arsenault  return cospi(x);
7532edafe83SMatt Arsenault}
7542edafe83SMatt Arsenault
7552edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cyl_bessel_i0f(
7562edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
757a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_i0_f32(float noundef [[X:%.*]]) #[[ATTR14]]
7582edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
7592edafe83SMatt Arsenault//
7602edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cyl_bessel_i0f(
7612edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
762a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_i0_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
7632edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
7642edafe83SMatt Arsenault//
765a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cyl_bessel_i0f(
766a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
767a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_i0_f32(float noundef [[X:%.*]]) #[[ATTR14]]
768a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
769a0709e22SYaxun (Sam) Liu//
7702edafe83SMatt Arsenaultextern "C" __device__ float test_cyl_bessel_i0f(float x) {
7712edafe83SMatt Arsenault  return cyl_bessel_i0f(x);
7722edafe83SMatt Arsenault}
7732edafe83SMatt Arsenault
7742edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cyl_bessel_i0(
7752edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
776a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_i0_f64(double noundef [[X:%.*]]) #[[ATTR14]]
7772edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
7782edafe83SMatt Arsenault//
7792edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cyl_bessel_i0(
7802edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
781a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_i0_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
7822edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
7832edafe83SMatt Arsenault//
784a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cyl_bessel_i0(
785a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
786a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_i0_f64(double noundef [[X:%.*]]) #[[ATTR14]]
787a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
788a0709e22SYaxun (Sam) Liu//
7892edafe83SMatt Arsenaultextern "C" __device__ double test_cyl_bessel_i0(double x) {
7902edafe83SMatt Arsenault  return cyl_bessel_i0(x);
7912edafe83SMatt Arsenault}
7922edafe83SMatt Arsenault
7932edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cyl_bessel_i1f(
7942edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
795a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_i1_f32(float noundef [[X:%.*]]) #[[ATTR14]]
7962edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
7972edafe83SMatt Arsenault//
7982edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cyl_bessel_i1f(
7992edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
800a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_i1_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
8012edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
8022edafe83SMatt Arsenault//
803a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cyl_bessel_i1f(
804a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
805a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_i1_f32(float noundef [[X:%.*]]) #[[ATTR14]]
806a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
807a0709e22SYaxun (Sam) Liu//
8082edafe83SMatt Arsenaultextern "C" __device__ float test_cyl_bessel_i1f(float x) {
8092edafe83SMatt Arsenault  return cyl_bessel_i1f(x);
8102edafe83SMatt Arsenault}
8112edafe83SMatt Arsenault
8122edafe83SMatt Arsenault// DEFAULT-LABEL: @test_cyl_bessel_i1(
8132edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
814a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_i1_f64(double noundef [[X:%.*]]) #[[ATTR14]]
8152edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
8162edafe83SMatt Arsenault//
8172edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_cyl_bessel_i1(
8182edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
819a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_i1_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
8202edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
8212edafe83SMatt Arsenault//
822a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_cyl_bessel_i1(
823a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
824a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_i1_f64(double noundef [[X:%.*]]) #[[ATTR14]]
825a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
826a0709e22SYaxun (Sam) Liu//
8272edafe83SMatt Arsenaultextern "C" __device__ double test_cyl_bessel_i1(double x) {
8282edafe83SMatt Arsenault  return cyl_bessel_i1(x);
8292edafe83SMatt Arsenault}
8302edafe83SMatt Arsenault
8312edafe83SMatt Arsenault// DEFAULT-LABEL: @test_erfcf(
8322edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
833a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_erfc_f32(float noundef [[X:%.*]]) #[[ATTR13]]
8342edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
8352edafe83SMatt Arsenault//
8362edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_erfcf(
8372edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
838a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_erfc_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
8392edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
8402edafe83SMatt Arsenault//
841a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_erfcf(
842a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
843a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_erfc_f32(float noundef [[X:%.*]]) #[[ATTR13]]
844a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
845a0709e22SYaxun (Sam) Liu//
8462edafe83SMatt Arsenaultextern "C" __device__ float test_erfcf(float x) {
8472edafe83SMatt Arsenault  return erfcf(x);
8482edafe83SMatt Arsenault}
8492edafe83SMatt Arsenault
8502edafe83SMatt Arsenault// DEFAULT-LABEL: @test_erfc(
8512edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
852a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_erfc_f64(double noundef [[X:%.*]]) #[[ATTR13]]
8532edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
8542edafe83SMatt Arsenault//
8552edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_erfc(
8562edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
857a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_erfc_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
8582edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
8592edafe83SMatt Arsenault//
860a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_erfc(
861a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
862a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_erfc_f64(double noundef [[X:%.*]]) #[[ATTR13]]
863a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
864a0709e22SYaxun (Sam) Liu//
8652edafe83SMatt Arsenaultextern "C" __device__ double test_erfc(double x) {
8662edafe83SMatt Arsenault  return erfc(x);
8672edafe83SMatt Arsenault}
8682edafe83SMatt Arsenault
8692edafe83SMatt Arsenault// DEFAULT-LABEL: @test_erfinvf(
8702edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
871a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_erfinv_f32(float noundef [[X:%.*]]) #[[ATTR13]]
8722edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
8732edafe83SMatt Arsenault//
8742edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_erfinvf(
8752edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
876a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_erfinv_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
8772edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
8782edafe83SMatt Arsenault//
879a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_erfinvf(
880a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
881a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_erfinv_f32(float noundef [[X:%.*]]) #[[ATTR13]]
882a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
883a0709e22SYaxun (Sam) Liu//
8842edafe83SMatt Arsenaultextern "C" __device__ float test_erfinvf(float x) {
8852edafe83SMatt Arsenault  return erfinvf(x);
8862edafe83SMatt Arsenault}
8872edafe83SMatt Arsenault
8882edafe83SMatt Arsenault// DEFAULT-LABEL: @test_erfinv(
8892edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
890a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_erfinv_f64(double noundef [[X:%.*]]) #[[ATTR13]]
8912edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
8922edafe83SMatt Arsenault//
8932edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_erfinv(
8942edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
895a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_erfinv_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
8962edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
8972edafe83SMatt Arsenault//
898a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_erfinv(
899a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
900a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_erfinv_f64(double noundef [[X:%.*]]) #[[ATTR13]]
901a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
902a0709e22SYaxun (Sam) Liu//
9032edafe83SMatt Arsenaultextern "C" __device__ double test_erfinv(double x) {
9042edafe83SMatt Arsenault  return erfinv(x);
9052edafe83SMatt Arsenault}
9062edafe83SMatt Arsenault
9072edafe83SMatt Arsenault// DEFAULT-LABEL: @test_exp10f(
9082edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
909a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_exp10_f32(float noundef [[X:%.*]]) #[[ATTR13]]
9102edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
9112edafe83SMatt Arsenault//
9122edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_exp10f(
9132edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
914a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_exp10_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
9152edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
9162edafe83SMatt Arsenault//
917a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_exp10f(
918a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
919a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_exp10_f32(float noundef [[X:%.*]]) #[[ATTR13]]
920a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
921a0709e22SYaxun (Sam) Liu//
9222edafe83SMatt Arsenaultextern "C" __device__ float test_exp10f(float x) {
9232edafe83SMatt Arsenault  return exp10f(x);
9242edafe83SMatt Arsenault}
9252edafe83SMatt Arsenault
9262edafe83SMatt Arsenault// DEFAULT-LABEL: @test_exp10(
9272edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
928a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp10_f64(double noundef [[X:%.*]]) #[[ATTR13]]
9292edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
9302edafe83SMatt Arsenault//
9312edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_exp10(
9322edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
933a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_exp10_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
9342edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
9352edafe83SMatt Arsenault//
936a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_exp10(
937a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
938a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp10_f64(double noundef [[X:%.*]]) #[[ATTR13]]
939a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
940a0709e22SYaxun (Sam) Liu//
9412edafe83SMatt Arsenaultextern "C" __device__ double test_exp10(double x) {
9422edafe83SMatt Arsenault  return exp10(x);
9432edafe83SMatt Arsenault}
9442edafe83SMatt Arsenault
9452edafe83SMatt Arsenault// DEFAULT-LABEL: @test_exp2f(
9462edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
9472da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.exp2.f32(float [[X:%.*]])
9485f1d3834SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
9492edafe83SMatt Arsenault//
9502edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_exp2f(
9512edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
9522da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.exp2.f32(float [[X:%.*]])
9535f1d3834SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
9542edafe83SMatt Arsenault//
955a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_exp2f(
956a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
9572da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.exp2.f32(float [[X:%.*]])
958a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
959a0709e22SYaxun (Sam) Liu//
9602edafe83SMatt Arsenaultextern "C" __device__ float test_exp2f(float x) {
9612edafe83SMatt Arsenault  return exp2f(x);
9622edafe83SMatt Arsenault}
9632edafe83SMatt Arsenault
9642edafe83SMatt Arsenault// DEFAULT-LABEL: @test_exp2(
9652edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
966a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp2_f64(double noundef [[X:%.*]]) #[[ATTR13]]
9672edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
9682edafe83SMatt Arsenault//
9692edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_exp2(
9702edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
971a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_exp2_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
9722edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
9732edafe83SMatt Arsenault//
974a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_exp2(
975a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
976a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp2_f64(double noundef [[X:%.*]]) #[[ATTR13]]
977a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
978a0709e22SYaxun (Sam) Liu//
9792edafe83SMatt Arsenaultextern "C" __device__ double test_exp2(double x) {
9802edafe83SMatt Arsenault  return exp2(x);
9812edafe83SMatt Arsenault}
9822edafe83SMatt Arsenault
9832edafe83SMatt Arsenault// DEFAULT-LABEL: @test_expf(
9842edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
9852da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.exp.f32(float [[X:%.*]])
9865f1d3834SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
9872edafe83SMatt Arsenault//
9882edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_expf(
9892edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
9902da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.exp.f32(float [[X:%.*]])
9915f1d3834SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
9922edafe83SMatt Arsenault//
993a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_expf(
994a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
9952da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.exp.f32(float [[X:%.*]])
996a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
997a0709e22SYaxun (Sam) Liu//
9982edafe83SMatt Arsenaultextern "C" __device__ float test_expf(float x) {
9992edafe83SMatt Arsenault  return expf(x);
10002edafe83SMatt Arsenault}
10012edafe83SMatt Arsenault
10022edafe83SMatt Arsenault// DEFAULT-LABEL: @test_exp(
10032edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1004a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp_f64(double noundef [[X:%.*]]) #[[ATTR13]]
10052edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
10062edafe83SMatt Arsenault//
10072edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_exp(
10082edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1009a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_exp_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
10102edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
10112edafe83SMatt Arsenault//
1012a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_exp(
1013a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1014a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp_f64(double noundef [[X:%.*]]) #[[ATTR13]]
1015a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
1016a0709e22SYaxun (Sam) Liu//
10172edafe83SMatt Arsenaultextern "C" __device__ double test_exp(double x) {
10182edafe83SMatt Arsenault  return exp(x);
10192edafe83SMatt Arsenault}
10202edafe83SMatt Arsenault
10212edafe83SMatt Arsenault// DEFAULT-LABEL: @test_expm1f(
10222edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1023a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_expm1_f32(float noundef [[X:%.*]]) #[[ATTR13]]
10242edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
10252edafe83SMatt Arsenault//
10262edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_expm1f(
10272edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1028a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_expm1_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
10292edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
10302edafe83SMatt Arsenault//
1031a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_expm1f(
1032a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1033a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_expm1_f32(float noundef [[X:%.*]]) #[[ATTR13]]
1034a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
1035a0709e22SYaxun (Sam) Liu//
10362edafe83SMatt Arsenaultextern "C" __device__ float test_expm1f(float x) {
10372edafe83SMatt Arsenault  return expm1f(x);
10382edafe83SMatt Arsenault}
10392edafe83SMatt Arsenault
10402edafe83SMatt Arsenault// DEFAULT-LABEL: @test_expm1(
10412edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1042a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_expm1_f64(double noundef [[X:%.*]]) #[[ATTR13]]
10432edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
10442edafe83SMatt Arsenault//
10452edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_expm1(
10462edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1047a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_expm1_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
10482edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
10492edafe83SMatt Arsenault//
1050a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_expm1(
1051a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1052a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_expm1_f64(double noundef [[X:%.*]]) #[[ATTR13]]
1053a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
1054a0709e22SYaxun (Sam) Liu//
10552edafe83SMatt Arsenaultextern "C" __device__ double test_expm1(double x) {
10562edafe83SMatt Arsenault  return expm1(x);
10572edafe83SMatt Arsenault}
10582edafe83SMatt Arsenault
10592edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fabsf(
10602edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
10612da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fabs.f32(float [[X:%.*]])
106281616561SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
10632edafe83SMatt Arsenault//
10642edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fabsf(
10652edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
10662da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.fabs.f32(float [[X:%.*]])
106781616561SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
10682edafe83SMatt Arsenault//
1069a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fabsf(
1070a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
10712da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fabs.f32(float [[X:%.*]])
1072a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
1073a0709e22SYaxun (Sam) Liu//
10742edafe83SMatt Arsenaultextern "C" __device__ float test_fabsf(float x) {
10752edafe83SMatt Arsenault  return fabsf(x);
10762edafe83SMatt Arsenault}
10772edafe83SMatt Arsenault
10782edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fabs(
10792edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
10802da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fabs.f64(double [[X:%.*]])
108181616561SMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
10822edafe83SMatt Arsenault//
10832edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fabs(
10842edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
10852da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.fabs.f64(double [[X:%.*]])
108681616561SMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
10872edafe83SMatt Arsenault//
1088a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fabs(
1089a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
10902da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fabs.f64(double [[X:%.*]])
1091a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
1092a0709e22SYaxun (Sam) Liu//
10932edafe83SMatt Arsenaultextern "C" __device__ double test_fabs(double x) {
10942edafe83SMatt Arsenault  return fabs(x);
10952edafe83SMatt Arsenault}
10962edafe83SMatt Arsenault
10972edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fdimf(
10982edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1099a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_fdim_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
11002edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
11012edafe83SMatt Arsenault//
11022edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fdimf(
11032edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1104a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_fdim_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
11052edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
11062edafe83SMatt Arsenault//
1107a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fdimf(
1108a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1109a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_fdim_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
1110a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
1111a0709e22SYaxun (Sam) Liu//
11122edafe83SMatt Arsenaultextern "C" __device__ float test_fdimf(float x, float y) {
11132edafe83SMatt Arsenault  return fdimf(x, y);
11142edafe83SMatt Arsenault}
11152edafe83SMatt Arsenault
11162edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fdim(
11172edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1118a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_fdim_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
11192edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
11202edafe83SMatt Arsenault//
11212edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fdim(
11222edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1123a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_fdim_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
11242edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
11252edafe83SMatt Arsenault//
1126a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fdim(
1127a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1128a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_fdim_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
1129a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
1130a0709e22SYaxun (Sam) Liu//
11312edafe83SMatt Arsenaultextern "C" __device__ double test_fdim(double x, double y) {
11322edafe83SMatt Arsenault  return fdim(x, y);
11332edafe83SMatt Arsenault}
11342edafe83SMatt Arsenault
11352edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fdividef(
11362edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
11372edafe83SMatt Arsenault// DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[X:%.*]], [[Y:%.*]]
11382edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[DIV_I]]
11392edafe83SMatt Arsenault//
11402edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fdividef(
11412edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
11422edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float [[X:%.*]], [[Y:%.*]]
11432edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[DIV_I]]
11442edafe83SMatt Arsenault//
1145a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fdividef(
1146a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1147a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[X:%.*]], [[Y:%.*]]
1148a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[DIV_I]]
1149a0709e22SYaxun (Sam) Liu//
11502edafe83SMatt Arsenaultextern "C" __device__ float test_fdividef(float x, float y) {
11512edafe83SMatt Arsenault  return fdividef(x, y);
11522edafe83SMatt Arsenault}
11532edafe83SMatt Arsenault
11542edafe83SMatt Arsenault// DEFAULT-LABEL: @test_floorf(
11552edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
11562da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.floor.f32(float [[X:%.*]])
1157fe65043aSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
11582edafe83SMatt Arsenault//
11592edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_floorf(
11602edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
11612da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.floor.f32(float [[X:%.*]])
1162fe65043aSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
11632edafe83SMatt Arsenault//
1164a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_floorf(
1165a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
11662da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.floor.f32(float [[X:%.*]])
1167a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
1168a0709e22SYaxun (Sam) Liu//
11692edafe83SMatt Arsenaultextern "C" __device__ float test_floorf(float x) {
11702edafe83SMatt Arsenault  return floorf(x);
11712edafe83SMatt Arsenault}
11722edafe83SMatt Arsenault
11732edafe83SMatt Arsenault// DEFAULT-LABEL: @test_floor(
11742edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
11752da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.floor.f64(double [[X:%.*]])
1176fe65043aSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
11772edafe83SMatt Arsenault//
11782edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_floor(
11792edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
11802da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.floor.f64(double [[X:%.*]])
1181fe65043aSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
11822edafe83SMatt Arsenault//
1183a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_floor(
1184a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
11852da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.floor.f64(double [[X:%.*]])
1186a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
1187a0709e22SYaxun (Sam) Liu//
11882edafe83SMatt Arsenaultextern "C" __device__ double test_floor(double x) {
11892edafe83SMatt Arsenault  return floor(x);
11902edafe83SMatt Arsenault}
11912edafe83SMatt Arsenault
11922edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fmaf(
11932edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
11942da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
119543fd46fdSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
11962edafe83SMatt Arsenault//
11972edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fmaf(
11982edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
11992da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
120043fd46fdSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
12012edafe83SMatt Arsenault//
1202a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fmaf(
1203a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
12042da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
1205a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
1206a0709e22SYaxun (Sam) Liu//
12072edafe83SMatt Arsenaultextern "C" __device__ float test_fmaf(float x, float y, float z) {
12082edafe83SMatt Arsenault  return fmaf(x, y, z);
12092edafe83SMatt Arsenault}
12102edafe83SMatt Arsenault
12112edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fma(
12122edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
12132da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
121443fd46fdSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
12152edafe83SMatt Arsenault//
12162edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fma(
12172edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
12182da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
121943fd46fdSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
12202edafe83SMatt Arsenault//
1221a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fma(
1222a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
12232da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
1224a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
1225a0709e22SYaxun (Sam) Liu//
12262edafe83SMatt Arsenaultextern "C" __device__ double test_fma(double x, double y, double z) {
12272edafe83SMatt Arsenault  return fma(x, y, z);
12282edafe83SMatt Arsenault}
12292edafe83SMatt Arsenault
12302edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fma_rn(
12312edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
12322da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
123343fd46fdSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
12342edafe83SMatt Arsenault//
12352edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fma_rn(
12362edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
12372da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
123843fd46fdSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
12392edafe83SMatt Arsenault//
1240a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fma_rn(
1241a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
12422da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
1243a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
1244a0709e22SYaxun (Sam) Liu//
12452edafe83SMatt Arsenaultextern "C" __device__ double test_fma_rn(double x, double y, double z) {
12462edafe83SMatt Arsenault  return __fma_rn(x, y, z);
12472edafe83SMatt Arsenault}
12482edafe83SMatt Arsenault
12492edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fmaxf(
12502edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
12512da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
125266d4dbaeSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
12532edafe83SMatt Arsenault//
12542edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fmaxf(
12552edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
12562da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
125766d4dbaeSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
12582edafe83SMatt Arsenault//
1259a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fmaxf(
1260a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
12612da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
1262a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
1263a0709e22SYaxun (Sam) Liu//
12642edafe83SMatt Arsenaultextern "C" __device__ float test_fmaxf(float x, float y) {
12652edafe83SMatt Arsenault  return fmaxf(x, y);
12662edafe83SMatt Arsenault}
12672edafe83SMatt Arsenault
12682edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fmax(
12692edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
12702da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
127166d4dbaeSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
12722edafe83SMatt Arsenault//
12732edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fmax(
12742edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
12752da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
127666d4dbaeSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
12772edafe83SMatt Arsenault//
1278a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fmax(
1279a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
12802da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
1281a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
1282a0709e22SYaxun (Sam) Liu//
12832edafe83SMatt Arsenaultextern "C" __device__ double test_fmax(double x, double y) {
12842edafe83SMatt Arsenault  return fmax(x, y);
12852edafe83SMatt Arsenault}
12862edafe83SMatt Arsenault
12872edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fminf(
12882edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
12892da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
129066d4dbaeSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
12912edafe83SMatt Arsenault//
12922edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fminf(
12932edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
12942da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
129566d4dbaeSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
12962edafe83SMatt Arsenault//
1297a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fminf(
1298a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
12992da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1300a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
1301a0709e22SYaxun (Sam) Liu//
13022edafe83SMatt Arsenaultextern "C" __device__ float test_fminf(float x, float y) {
13032edafe83SMatt Arsenault  return fminf(x, y);
13042edafe83SMatt Arsenault}
13052edafe83SMatt Arsenault
13062edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fmin(
13072edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
13082da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
130966d4dbaeSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
13102edafe83SMatt Arsenault//
13112edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fmin(
13122edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
13132da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
131466d4dbaeSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
13152edafe83SMatt Arsenault//
1316a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fmin(
1317a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
13182da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
1319a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
1320a0709e22SYaxun (Sam) Liu//
13212edafe83SMatt Arsenaultextern "C" __device__ double test_fmin(double x, double y) {
13222edafe83SMatt Arsenault  return fmin(x, y);
13232edafe83SMatt Arsenault}
13242edafe83SMatt Arsenault
13252edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fmodf(
13262edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1327a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_fmod_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
13282edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
13292edafe83SMatt Arsenault//
13302edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fmodf(
13312edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1332a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_fmod_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
13332edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
13342edafe83SMatt Arsenault//
1335a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fmodf(
1336a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1337a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_fmod_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
1338a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
1339a0709e22SYaxun (Sam) Liu//
13402edafe83SMatt Arsenaultextern "C" __device__ float test_fmodf(float x, float y) {
13412edafe83SMatt Arsenault  return fmodf(x, y);
13422edafe83SMatt Arsenault}
13432edafe83SMatt Arsenault
13442edafe83SMatt Arsenault// DEFAULT-LABEL: @test_fmod(
13452edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1346a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_fmod_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
13472edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
13482edafe83SMatt Arsenault//
13492edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_fmod(
13502edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1351a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_fmod_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
13522edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
13532edafe83SMatt Arsenault//
1354a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_fmod(
1355a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1356a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_fmod_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
1357a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
1358a0709e22SYaxun (Sam) Liu//
13592edafe83SMatt Arsenaultextern "C" __device__ double test_fmod(double x, double y) {
13602edafe83SMatt Arsenault  return fmod(x, y);
13612edafe83SMatt Arsenault}
13622edafe83SMatt Arsenault
1363b15bf305SMatt Arsenault// CHECK-LABEL: @test_frexpf(
1364b15bf305SMatt Arsenault// CHECK-NEXT:  entry:
1365b15bf305SMatt Arsenault// CHECK-NEXT:    [[TMP0:%.*]] = tail call { float, i32 } @llvm.frexp.f32.i32(float [[X:%.*]])
1366b15bf305SMatt Arsenault// CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { float, i32 } [[TMP0]], 1
1367b15bf305SMatt Arsenault// CHECK-NEXT:    store i32 [[TMP1]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12:![0-9]+]]
1368b15bf305SMatt Arsenault// CHECK-NEXT:    [[TMP2:%.*]] = extractvalue { float, i32 } [[TMP0]], 0
1369b15bf305SMatt Arsenault// CHECK-NEXT:    ret float [[TMP2]]
13702edafe83SMatt Arsenault//
13712edafe83SMatt Arsenaultextern "C" __device__ float test_frexpf(float x, int* y) {
13722edafe83SMatt Arsenault  return frexpf(x, y);
13732edafe83SMatt Arsenault}
13742edafe83SMatt Arsenault
1375b15bf305SMatt Arsenault// CHECK-LABEL: @test_frexp(
1376b15bf305SMatt Arsenault// CHECK-NEXT:  entry:
1377b15bf305SMatt Arsenault// CHECK-NEXT:    [[TMP0:%.*]] = tail call { double, i32 } @llvm.frexp.f64.i32(double [[X:%.*]])
1378b15bf305SMatt Arsenault// CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { double, i32 } [[TMP0]], 1
1379b15bf305SMatt Arsenault// CHECK-NEXT:    store i32 [[TMP1]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12]]
1380b15bf305SMatt Arsenault// CHECK-NEXT:    [[TMP2:%.*]] = extractvalue { double, i32 } [[TMP0]], 0
1381b15bf305SMatt Arsenault// CHECK-NEXT:    ret double [[TMP2]]
13822edafe83SMatt Arsenault//
13832edafe83SMatt Arsenaultextern "C" __device__ double test_frexp(double x, int* y) {
13842edafe83SMatt Arsenault  return frexp(x, y);
13852edafe83SMatt Arsenault}
13862edafe83SMatt Arsenault
13872edafe83SMatt Arsenault// DEFAULT-LABEL: @test_hypotf(
13882edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1389a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_hypot_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
13902edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
13912edafe83SMatt Arsenault//
13922edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_hypotf(
13932edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1394a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_hypot_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
13952edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
13962edafe83SMatt Arsenault//
1397a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_hypotf(
1398a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1399a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_hypot_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
1400a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
1401a0709e22SYaxun (Sam) Liu//
14022edafe83SMatt Arsenaultextern "C" __device__ float test_hypotf(float x, float y) {
14032edafe83SMatt Arsenault  return hypotf(x, y);
14042edafe83SMatt Arsenault}
14052edafe83SMatt Arsenault
14062edafe83SMatt Arsenault// DEFAULT-LABEL: @test_hypot(
14072edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1408a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_hypot_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
14092edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
14102edafe83SMatt Arsenault//
14112edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_hypot(
14122edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1413a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_hypot_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
14142edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
14152edafe83SMatt Arsenault//
1416a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_hypot(
1417a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1418a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_hypot_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
1419a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
1420a0709e22SYaxun (Sam) Liu//
14212edafe83SMatt Arsenaultextern "C" __device__ double test_hypot(double x, double y) {
14222edafe83SMatt Arsenault  return hypot(x, y);
14232edafe83SMatt Arsenault}
14242edafe83SMatt Arsenault
1425872a3bf3SMatt Arsenault// DEFAULT-LABEL: @test_ilogbf(
1426872a3bf3SMatt Arsenault// DEFAULT-NEXT:  entry:
1427a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f32(float noundef [[X:%.*]]) #[[ATTR12]]
1428872a3bf3SMatt Arsenault// DEFAULT-NEXT:    ret i32 [[CALL_I]]
1429872a3bf3SMatt Arsenault//
1430872a3bf3SMatt Arsenault// FINITEONLY-LABEL: @test_ilogbf(
1431872a3bf3SMatt Arsenault// FINITEONLY-NEXT:  entry:
1432a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
1433872a3bf3SMatt Arsenault// FINITEONLY-NEXT:    ret i32 [[CALL_I]]
14342edafe83SMatt Arsenault//
1435a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_ilogbf(
1436a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1437a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f32(float noundef [[X:%.*]]) #[[ATTR12]]
1438a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i32 [[CALL_I]]
1439a0709e22SYaxun (Sam) Liu//
14402edafe83SMatt Arsenaultextern "C" __device__ int test_ilogbf(float x) {
14412edafe83SMatt Arsenault  return ilogbf(x);
14422edafe83SMatt Arsenault}
14432edafe83SMatt Arsenault
1444872a3bf3SMatt Arsenault// DEFAULT-LABEL: @test_ilogb(
1445872a3bf3SMatt Arsenault// DEFAULT-NEXT:  entry:
1446a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f64(double noundef [[X:%.*]]) #[[ATTR12]]
1447872a3bf3SMatt Arsenault// DEFAULT-NEXT:    ret i32 [[CALL_I]]
1448872a3bf3SMatt Arsenault//
1449872a3bf3SMatt Arsenault// FINITEONLY-LABEL: @test_ilogb(
1450872a3bf3SMatt Arsenault// FINITEONLY-NEXT:  entry:
1451a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
1452872a3bf3SMatt Arsenault// FINITEONLY-NEXT:    ret i32 [[CALL_I]]
14532edafe83SMatt Arsenault//
1454a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_ilogb(
1455a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1456a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f64(double noundef [[X:%.*]]) #[[ATTR12]]
1457a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i32 [[CALL_I]]
1458a0709e22SYaxun (Sam) Liu//
14592edafe83SMatt Arsenaultextern "C" __device__ int test_ilogb(double x) {
14602edafe83SMatt Arsenault  return ilogb(x);
14612edafe83SMatt Arsenault}
14622edafe83SMatt Arsenault
1463872a3bf3SMatt Arsenault// DEFAULT-LABEL: @test___finitef(
1464872a3bf3SMatt Arsenault// DEFAULT-NEXT:  entry:
14658f48392bSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call float @llvm.fabs.f32(float [[X:%.*]])
14668f48392bSMatt Arsenault// DEFAULT-NEXT:    [[TMP1:%.*]] = fcmp one float [[TMP0]], 0x7FF0000000000000
14678f48392bSMatt Arsenault// DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1468872a3bf3SMatt Arsenault// DEFAULT-NEXT:    ret i32 [[CONV]]
1469872a3bf3SMatt Arsenault//
1470872a3bf3SMatt Arsenault// FINITEONLY-LABEL: @test___finitef(
1471872a3bf3SMatt Arsenault// FINITEONLY-NEXT:  entry:
147285232b0eSMatt Arsenault// FINITEONLY-NEXT:    ret i32 1
14732edafe83SMatt Arsenault//
1474a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___finitef(
1475a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
14768f48392bSMatt Arsenault// APPROX-NEXT:    [[TMP0:%.*]] = tail call float @llvm.fabs.f32(float [[X:%.*]])
14778f48392bSMatt Arsenault// APPROX-NEXT:    [[TMP1:%.*]] = fcmp one float [[TMP0]], 0x7FF0000000000000
14788f48392bSMatt Arsenault// APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1479a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i32 [[CONV]]
1480a0709e22SYaxun (Sam) Liu//
14812edafe83SMatt Arsenaultextern "C" __device__ BOOL_TYPE test___finitef(float x) {
14822edafe83SMatt Arsenault  return __finitef(x);
14832edafe83SMatt Arsenault}
14842edafe83SMatt Arsenault
1485872a3bf3SMatt Arsenault// DEFAULT-LABEL: @test___finite(
1486872a3bf3SMatt Arsenault// DEFAULT-NEXT:  entry:
14878f48392bSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
14888f48392bSMatt Arsenault// DEFAULT-NEXT:    [[TMP1:%.*]] = fcmp one double [[TMP0]], 0x7FF0000000000000
14898f48392bSMatt Arsenault// DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1490872a3bf3SMatt Arsenault// DEFAULT-NEXT:    ret i32 [[CONV]]
1491872a3bf3SMatt Arsenault//
1492872a3bf3SMatt Arsenault// FINITEONLY-LABEL: @test___finite(
1493872a3bf3SMatt Arsenault// FINITEONLY-NEXT:  entry:
149485232b0eSMatt Arsenault// FINITEONLY-NEXT:    ret i32 1
14952edafe83SMatt Arsenault//
1496a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___finite(
1497a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
14988f48392bSMatt Arsenault// APPROX-NEXT:    [[TMP0:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
14998f48392bSMatt Arsenault// APPROX-NEXT:    [[TMP1:%.*]] = fcmp one double [[TMP0]], 0x7FF0000000000000
15008f48392bSMatt Arsenault// APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1501a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i32 [[CONV]]
1502a0709e22SYaxun (Sam) Liu//
15032edafe83SMatt Arsenaultextern "C" __device__ BOOL_TYPE test___finite(double x) {
15042edafe83SMatt Arsenault  return __finite(x);
15052edafe83SMatt Arsenault}
15062edafe83SMatt Arsenault
1507872a3bf3SMatt Arsenault// DEFAULT-LABEL: @test___isinff(
1508872a3bf3SMatt Arsenault// DEFAULT-NEXT:  entry:
15098f48392bSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call float @llvm.fabs.f32(float [[X:%.*]])
15108f48392bSMatt Arsenault// DEFAULT-NEXT:    [[TMP1:%.*]] = fcmp oeq float [[TMP0]], 0x7FF0000000000000
15118f48392bSMatt Arsenault// DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1512872a3bf3SMatt Arsenault// DEFAULT-NEXT:    ret i32 [[CONV]]
1513872a3bf3SMatt Arsenault//
1514872a3bf3SMatt Arsenault// FINITEONLY-LABEL: @test___isinff(
1515872a3bf3SMatt Arsenault// FINITEONLY-NEXT:  entry:
1516d14ac1d1SMatt Arsenault// FINITEONLY-NEXT:    ret i32 0
15172edafe83SMatt Arsenault//
1518a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___isinff(
1519a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
15208f48392bSMatt Arsenault// APPROX-NEXT:    [[TMP0:%.*]] = tail call float @llvm.fabs.f32(float [[X:%.*]])
15218f48392bSMatt Arsenault// APPROX-NEXT:    [[TMP1:%.*]] = fcmp oeq float [[TMP0]], 0x7FF0000000000000
15228f48392bSMatt Arsenault// APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1523a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i32 [[CONV]]
1524a0709e22SYaxun (Sam) Liu//
15252edafe83SMatt Arsenaultextern "C" __device__ BOOL_TYPE test___isinff(float x) {
15262edafe83SMatt Arsenault  return __isinff(x);
15272edafe83SMatt Arsenault}
15282edafe83SMatt Arsenault
1529872a3bf3SMatt Arsenault// DEFAULT-LABEL: @test___isinf(
1530872a3bf3SMatt Arsenault// DEFAULT-NEXT:  entry:
15318f48392bSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
15328f48392bSMatt Arsenault// DEFAULT-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[TMP0]], 0x7FF0000000000000
15338f48392bSMatt Arsenault// DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1534872a3bf3SMatt Arsenault// DEFAULT-NEXT:    ret i32 [[CONV]]
1535872a3bf3SMatt Arsenault//
1536872a3bf3SMatt Arsenault// FINITEONLY-LABEL: @test___isinf(
1537872a3bf3SMatt Arsenault// FINITEONLY-NEXT:  entry:
1538d14ac1d1SMatt Arsenault// FINITEONLY-NEXT:    ret i32 0
15392edafe83SMatt Arsenault//
1540a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___isinf(
1541a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
15428f48392bSMatt Arsenault// APPROX-NEXT:    [[TMP0:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
15438f48392bSMatt Arsenault// APPROX-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[TMP0]], 0x7FF0000000000000
15448f48392bSMatt Arsenault// APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1545a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i32 [[CONV]]
1546a0709e22SYaxun (Sam) Liu//
15472edafe83SMatt Arsenaultextern "C" __device__ BOOL_TYPE test___isinf(double x) {
15482edafe83SMatt Arsenault  return __isinf(x);
15492edafe83SMatt Arsenault}
15502edafe83SMatt Arsenault
1551872a3bf3SMatt Arsenault// DEFAULT-LABEL: @test___isnanf(
1552872a3bf3SMatt Arsenault// DEFAULT-NEXT:  entry:
15537d6c2e18SSerge Pavlov// DEFAULT-NEXT:    [[TMP0:%.*]] = fcmp uno float [[X:%.*]], 0.000000e+00
15547d6c2e18SSerge Pavlov// DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP0]] to i32
1555872a3bf3SMatt Arsenault// DEFAULT-NEXT:    ret i32 [[CONV]]
1556872a3bf3SMatt Arsenault//
1557872a3bf3SMatt Arsenault// FINITEONLY-LABEL: @test___isnanf(
1558872a3bf3SMatt Arsenault// FINITEONLY-NEXT:  entry:
155931dfd2b9SMatt Arsenault// FINITEONLY-NEXT:    ret i32 0
15602edafe83SMatt Arsenault//
1561a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___isnanf(
1562a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1563a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = fcmp uno float [[X:%.*]], 0.000000e+00
1564a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP0]] to i32
1565a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i32 [[CONV]]
1566a0709e22SYaxun (Sam) Liu//
15672edafe83SMatt Arsenaultextern "C" __device__ BOOL_TYPE test___isnanf(float x) {
15682edafe83SMatt Arsenault  return __isnanf(x);
15692edafe83SMatt Arsenault}
15702edafe83SMatt Arsenault
1571872a3bf3SMatt Arsenault// DEFAULT-LABEL: @test___isnan(
1572872a3bf3SMatt Arsenault// DEFAULT-NEXT:  entry:
15737d6c2e18SSerge Pavlov// DEFAULT-NEXT:    [[TMP0:%.*]] = fcmp uno double [[X:%.*]], 0.000000e+00
15747d6c2e18SSerge Pavlov// DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP0]] to i32
1575872a3bf3SMatt Arsenault// DEFAULT-NEXT:    ret i32 [[CONV]]
1576872a3bf3SMatt Arsenault//
1577872a3bf3SMatt Arsenault// FINITEONLY-LABEL: @test___isnan(
1578872a3bf3SMatt Arsenault// FINITEONLY-NEXT:  entry:
157931dfd2b9SMatt Arsenault// FINITEONLY-NEXT:    ret i32 0
15802edafe83SMatt Arsenault//
1581a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___isnan(
1582a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1583a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = fcmp uno double [[X:%.*]], 0.000000e+00
1584a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP0]] to i32
1585a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i32 [[CONV]]
1586a0709e22SYaxun (Sam) Liu//
15872edafe83SMatt Arsenaultextern "C" __device__ BOOL_TYPE test___isnan(double x) {
15882edafe83SMatt Arsenault  return __isnan(x);
15892edafe83SMatt Arsenault}
15902edafe83SMatt Arsenault
15912edafe83SMatt Arsenault// DEFAULT-LABEL: @test_j0f(
15922edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1593a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[X:%.*]]) #[[ATTR14]]
15942edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
15952edafe83SMatt Arsenault//
15962edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_j0f(
15972edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1598a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j0_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
15992edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
16002edafe83SMatt Arsenault//
1601a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_j0f(
1602a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1603a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[X:%.*]]) #[[ATTR14]]
1604a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
1605a0709e22SYaxun (Sam) Liu//
16062edafe83SMatt Arsenaultextern "C" __device__ float test_j0f(float x) {
16072edafe83SMatt Arsenault  return j0f(x);
16082edafe83SMatt Arsenault}
16092edafe83SMatt Arsenault
16102edafe83SMatt Arsenault// DEFAULT-LABEL: @test_j0(
16112edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1612a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[X:%.*]]) #[[ATTR14]]
16132edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
16142edafe83SMatt Arsenault//
16152edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_j0(
16162edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1617a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j0_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
16182edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
16192edafe83SMatt Arsenault//
1620a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_j0(
1621a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1622a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[X:%.*]]) #[[ATTR14]]
1623a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
1624a0709e22SYaxun (Sam) Liu//
16252edafe83SMatt Arsenaultextern "C" __device__ double test_j0(double x) {
16262edafe83SMatt Arsenault  return j0(x);
16272edafe83SMatt Arsenault}
16282edafe83SMatt Arsenault
16292edafe83SMatt Arsenault// DEFAULT-LABEL: @test_j1f(
16302edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1631a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[X:%.*]]) #[[ATTR14]]
16322edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
16332edafe83SMatt Arsenault//
16342edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_j1f(
16352edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1636a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j1_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
16372edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
16382edafe83SMatt Arsenault//
1639a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_j1f(
1640a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1641a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[X:%.*]]) #[[ATTR14]]
1642a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
1643a0709e22SYaxun (Sam) Liu//
16442edafe83SMatt Arsenaultextern "C" __device__ float test_j1f(float x) {
16452edafe83SMatt Arsenault  return j1f(x);
16462edafe83SMatt Arsenault}
16472edafe83SMatt Arsenault
16482edafe83SMatt Arsenault// DEFAULT-LABEL: @test_j1(
16492edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1650a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[X:%.*]]) #[[ATTR14]]
16512edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
16522edafe83SMatt Arsenault//
16532edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_j1(
16542edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1655a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j1_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
16562edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
16572edafe83SMatt Arsenault//
1658a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_j1(
1659a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1660a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[X:%.*]]) #[[ATTR14]]
1661a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
1662a0709e22SYaxun (Sam) Liu//
16632edafe83SMatt Arsenaultextern "C" __device__ double test_j1(double x) {
16642edafe83SMatt Arsenault  return j1(x);
16652edafe83SMatt Arsenault}
16662edafe83SMatt Arsenault
16672edafe83SMatt Arsenault// DEFAULT-LABEL: @test_jnf(
16682edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
16692edafe83SMatt Arsenault// DEFAULT-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
16702edafe83SMatt Arsenault// DEFAULT-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
16712edafe83SMatt Arsenault// DEFAULT-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
16722edafe83SMatt Arsenault// DEFAULT-NEXT:    ]
16732edafe83SMatt Arsenault// DEFAULT:       if.then.i:
1674a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[Y:%.*]]) #[[ATTR14]]
16752edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL3JNFIF_EXIT:%.*]]
16762edafe83SMatt Arsenault// DEFAULT:       if.then2.i:
1677a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[Y]]) #[[ATTR14]]
16782edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL3JNFIF_EXIT]]
16792edafe83SMatt Arsenault// DEFAULT:       if.end4.i:
1680a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[Y]]) #[[ATTR14]]
1681a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[Y]]) #[[ATTR14]]
16821a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
16831a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3JNFIF_EXIT]]
16842edafe83SMatt Arsenault// DEFAULT:       for.body.i:
16851a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
16861a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
16871a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
16881a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1689b6bd41dbSNoah Goldstein// DEFAULT-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to float
16902edafe83SMatt Arsenault// DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[CONV_I]], [[Y]]
16911a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[MUL8_I:%.*]] = fmul contract float [[__X1_0_I3]], [[DIV_I]]
16921a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[SUB_I]] = fsub contract float [[MUL8_I]], [[__X0_0_I2]]
16931a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
16941a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
16951a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3JNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP14:![0-9]+]]
16962edafe83SMatt Arsenault// DEFAULT:       _ZL3jnfif.exit:
16971a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[RETVAL_0_I:%.*]] = phi float [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
16982edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[RETVAL_0_I]]
16992edafe83SMatt Arsenault//
17002edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_jnf(
17012edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
17022edafe83SMatt Arsenault// FINITEONLY-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
17032edafe83SMatt Arsenault// FINITEONLY-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
17042edafe83SMatt Arsenault// FINITEONLY-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
17052edafe83SMatt Arsenault// FINITEONLY-NEXT:    ]
17062edafe83SMatt Arsenault// FINITEONLY:       if.then.i:
1707a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I20_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j0_f32(float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR14]]
17082edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL3JNFIF_EXIT:%.*]]
17092edafe83SMatt Arsenault// FINITEONLY:       if.then2.i:
1710a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I22_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j1_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
17112edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL3JNFIF_EXIT]]
17122edafe83SMatt Arsenault// FINITEONLY:       if.end4.i:
1713a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j0_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
1714a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I21_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j1_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
17151a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
17161a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3JNFIF_EXIT]]
17172edafe83SMatt Arsenault// FINITEONLY:       for.body.i:
17181a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
17191a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
17201a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
17211a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1722b6bd41dbSNoah Goldstein// FINITEONLY-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to float
17232edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float [[CONV_I]], [[Y]]
17241a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[MUL8_I:%.*]] = fmul nnan ninf contract float [[__X1_0_I3]], [[DIV_I]]
17251a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[SUB_I]] = fsub nnan ninf contract float [[MUL8_I]], [[__X0_0_I2]]
17261a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
17271a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
17281a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3JNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP14:![0-9]+]]
17292edafe83SMatt Arsenault// FINITEONLY:       _ZL3jnfif.exit:
17301a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[RETVAL_0_I:%.*]] = phi float [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
17312edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[RETVAL_0_I]]
17322edafe83SMatt Arsenault//
1733a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_jnf(
1734a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1735a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
1736a0709e22SYaxun (Sam) Liu// APPROX-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
1737a0709e22SYaxun (Sam) Liu// APPROX-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
1738a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ]
1739a0709e22SYaxun (Sam) Liu// APPROX:       if.then.i:
1740a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[Y:%.*]]) #[[ATTR14]]
1741a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL3JNFIF_EXIT:%.*]]
1742a0709e22SYaxun (Sam) Liu// APPROX:       if.then2.i:
1743a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[Y]]) #[[ATTR14]]
1744a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL3JNFIF_EXIT]]
1745a0709e22SYaxun (Sam) Liu// APPROX:       if.end4.i:
1746a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[Y]]) #[[ATTR14]]
1747a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[Y]]) #[[ATTR14]]
17481a2e77cfSAmara Emerson// APPROX-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
17491a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3JNFIF_EXIT]]
1750a0709e22SYaxun (Sam) Liu// APPROX:       for.body.i:
17511a2e77cfSAmara Emerson// APPROX-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
17521a2e77cfSAmara Emerson// APPROX-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
17531a2e77cfSAmara Emerson// APPROX-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
17541a2e77cfSAmara Emerson// APPROX-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1755b6bd41dbSNoah Goldstein// APPROX-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to float
1756a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[CONV_I]], [[Y]]
17571a2e77cfSAmara Emerson// APPROX-NEXT:    [[MUL8_I:%.*]] = fmul contract float [[__X1_0_I3]], [[DIV_I]]
17581a2e77cfSAmara Emerson// APPROX-NEXT:    [[SUB_I]] = fsub contract float [[MUL8_I]], [[__X0_0_I2]]
17591a2e77cfSAmara Emerson// APPROX-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
17601a2e77cfSAmara Emerson// APPROX-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
17611a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3JNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP14:![0-9]+]]
1762a0709e22SYaxun (Sam) Liu// APPROX:       _ZL3jnfif.exit:
17631a2e77cfSAmara Emerson// APPROX-NEXT:    [[RETVAL_0_I:%.*]] = phi float [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
1764a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[RETVAL_0_I]]
1765a0709e22SYaxun (Sam) Liu//
17662edafe83SMatt Arsenaultextern "C" __device__ float test_jnf(int x, float y) {
17672edafe83SMatt Arsenault  return jnf(x, y);
17682edafe83SMatt Arsenault}
17692edafe83SMatt Arsenault
17702edafe83SMatt Arsenault// DEFAULT-LABEL: @test_jn(
17712edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
17722edafe83SMatt Arsenault// DEFAULT-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
17732edafe83SMatt Arsenault// DEFAULT-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
17742edafe83SMatt Arsenault// DEFAULT-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
17752edafe83SMatt Arsenault// DEFAULT-NEXT:    ]
17762edafe83SMatt Arsenault// DEFAULT:       if.then.i:
1777a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[Y:%.*]]) #[[ATTR14]]
17782edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL2JNID_EXIT:%.*]]
17792edafe83SMatt Arsenault// DEFAULT:       if.then2.i:
1780a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[Y]]) #[[ATTR14]]
17812edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL2JNID_EXIT]]
17822edafe83SMatt Arsenault// DEFAULT:       if.end4.i:
1783a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[Y]]) #[[ATTR14]]
1784a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[Y]]) #[[ATTR14]]
17851a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
17861a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2JNID_EXIT]]
17872edafe83SMatt Arsenault// DEFAULT:       for.body.i:
17881a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
17891a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
17901a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
17911a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1792b6bd41dbSNoah Goldstein// DEFAULT-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to double
17932edafe83SMatt Arsenault// DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[CONV_I]], [[Y]]
17941a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[MUL8_I:%.*]] = fmul contract double [[__X1_0_I3]], [[DIV_I]]
17951a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[SUB_I]] = fsub contract double [[MUL8_I]], [[__X0_0_I2]]
17961a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
17971a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
17981a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2JNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP15:![0-9]+]]
17992edafe83SMatt Arsenault// DEFAULT:       _ZL2jnid.exit:
18001a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[RETVAL_0_I:%.*]] = phi double [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
18012edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[RETVAL_0_I]]
18022edafe83SMatt Arsenault//
18032edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_jn(
18042edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
18052edafe83SMatt Arsenault// FINITEONLY-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
18062edafe83SMatt Arsenault// FINITEONLY-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
18072edafe83SMatt Arsenault// FINITEONLY-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
18082edafe83SMatt Arsenault// FINITEONLY-NEXT:    ]
18092edafe83SMatt Arsenault// FINITEONLY:       if.then.i:
1810a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I20_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j0_f64(double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR14]]
18112edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL2JNID_EXIT:%.*]]
18122edafe83SMatt Arsenault// FINITEONLY:       if.then2.i:
1813a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I22_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j1_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
18142edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL2JNID_EXIT]]
18152edafe83SMatt Arsenault// FINITEONLY:       if.end4.i:
1816a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j0_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
1817a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I21_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j1_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
18181a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
18191a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2JNID_EXIT]]
18202edafe83SMatt Arsenault// FINITEONLY:       for.body.i:
18211a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
18221a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
18231a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
18241a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1825b6bd41dbSNoah Goldstein// FINITEONLY-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to double
18262edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract double [[CONV_I]], [[Y]]
18271a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[MUL8_I:%.*]] = fmul nnan ninf contract double [[__X1_0_I3]], [[DIV_I]]
18281a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[SUB_I]] = fsub nnan ninf contract double [[MUL8_I]], [[__X0_0_I2]]
18291a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
18301a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
18311a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2JNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP15:![0-9]+]]
18322edafe83SMatt Arsenault// FINITEONLY:       _ZL2jnid.exit:
18331a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[RETVAL_0_I:%.*]] = phi double [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
18342edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[RETVAL_0_I]]
18352edafe83SMatt Arsenault//
1836a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_jn(
1837a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1838a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
1839a0709e22SYaxun (Sam) Liu// APPROX-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
1840a0709e22SYaxun (Sam) Liu// APPROX-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
1841a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ]
1842a0709e22SYaxun (Sam) Liu// APPROX:       if.then.i:
1843a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[Y:%.*]]) #[[ATTR14]]
1844a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL2JNID_EXIT:%.*]]
1845a0709e22SYaxun (Sam) Liu// APPROX:       if.then2.i:
1846a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[Y]]) #[[ATTR14]]
1847a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL2JNID_EXIT]]
1848a0709e22SYaxun (Sam) Liu// APPROX:       if.end4.i:
1849a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[Y]]) #[[ATTR14]]
1850a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[Y]]) #[[ATTR14]]
18511a2e77cfSAmara Emerson// APPROX-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
18521a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2JNID_EXIT]]
1853a0709e22SYaxun (Sam) Liu// APPROX:       for.body.i:
18541a2e77cfSAmara Emerson// APPROX-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
18551a2e77cfSAmara Emerson// APPROX-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
18561a2e77cfSAmara Emerson// APPROX-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
18571a2e77cfSAmara Emerson// APPROX-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1858b6bd41dbSNoah Goldstein// APPROX-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to double
1859a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[CONV_I]], [[Y]]
18601a2e77cfSAmara Emerson// APPROX-NEXT:    [[MUL8_I:%.*]] = fmul contract double [[__X1_0_I3]], [[DIV_I]]
18611a2e77cfSAmara Emerson// APPROX-NEXT:    [[SUB_I]] = fsub contract double [[MUL8_I]], [[__X0_0_I2]]
18621a2e77cfSAmara Emerson// APPROX-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
18631a2e77cfSAmara Emerson// APPROX-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
18641a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2JNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP15:![0-9]+]]
1865a0709e22SYaxun (Sam) Liu// APPROX:       _ZL2jnid.exit:
18661a2e77cfSAmara Emerson// APPROX-NEXT:    [[RETVAL_0_I:%.*]] = phi double [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
1867a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[RETVAL_0_I]]
1868a0709e22SYaxun (Sam) Liu//
18692edafe83SMatt Arsenaultextern "C" __device__ double test_jn(int x, double y) {
18702edafe83SMatt Arsenault  return jn(x, y);
18712edafe83SMatt Arsenault}
18722edafe83SMatt Arsenault
18732edafe83SMatt Arsenault// DEFAULT-LABEL: @test_ldexpf(
18742edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
18752da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
1876c448e1daSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
18772edafe83SMatt Arsenault//
18782edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_ldexpf(
18792edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
18802da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
1881c448e1daSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
18822edafe83SMatt Arsenault//
1883a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_ldexpf(
1884a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
18852da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
1886a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
1887a0709e22SYaxun (Sam) Liu//
18882edafe83SMatt Arsenaultextern "C" __device__ float test_ldexpf(float x, int y) {
18892edafe83SMatt Arsenault  return ldexpf(x, y);
18902edafe83SMatt Arsenault}
18912edafe83SMatt Arsenault
18922edafe83SMatt Arsenault// DEFAULT-LABEL: @test_ldexp(
18932edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
18942da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
1895c448e1daSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
18962edafe83SMatt Arsenault//
18972edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_ldexp(
18982edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
18992da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
1900c448e1daSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
19012edafe83SMatt Arsenault//
1902a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_ldexp(
1903a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
19042da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
1905a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
1906a0709e22SYaxun (Sam) Liu//
19072edafe83SMatt Arsenaultextern "C" __device__ double test_ldexp(double x, int y) {
19082edafe83SMatt Arsenault  return ldexp(x, y);
19092edafe83SMatt Arsenault}
19102edafe83SMatt Arsenault
19112edafe83SMatt Arsenault// DEFAULT-LABEL: @test_lgammaf(
19122edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1913a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_lgamma_f32(float noundef [[X:%.*]]) #[[ATTR14]]
19142edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
19152edafe83SMatt Arsenault//
19162edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_lgammaf(
19172edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1918a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_lgamma_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
19192edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
19202edafe83SMatt Arsenault//
1921a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_lgammaf(
1922a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1923a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_lgamma_f32(float noundef [[X:%.*]]) #[[ATTR14]]
1924a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
1925a0709e22SYaxun (Sam) Liu//
19262edafe83SMatt Arsenaultextern "C" __device__ float test_lgammaf(float x) {
19272edafe83SMatt Arsenault  return lgammaf(x);
19282edafe83SMatt Arsenault}
19292edafe83SMatt Arsenault
19302edafe83SMatt Arsenault// DEFAULT-LABEL: @test_lgamma(
19312edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
1932a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_lgamma_f64(double noundef [[X:%.*]]) #[[ATTR14]]
19332edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
19342edafe83SMatt Arsenault//
19352edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_lgamma(
19362edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
1937a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_lgamma_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
19382edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
19392edafe83SMatt Arsenault//
1940a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_lgamma(
1941a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1942a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_lgamma_f64(double noundef [[X:%.*]]) #[[ATTR14]]
1943a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
1944a0709e22SYaxun (Sam) Liu//
19452edafe83SMatt Arsenaultextern "C" __device__ double test_lgamma(double x) {
19462edafe83SMatt Arsenault  return lgamma(x);
19472edafe83SMatt Arsenault}
19482edafe83SMatt Arsenault
19492edafe83SMatt Arsenault// DEFAULT-LABEL: @test_llrintf(
19502edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
195171be91ebSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.rint.f32(float [[X:%.*]])
195271be91ebSMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
19532edafe83SMatt Arsenault// DEFAULT-NEXT:    ret i64 [[CONV_I]]
19542edafe83SMatt Arsenault//
19552edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_llrintf(
19562edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
195771be91ebSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.rint.f32(float [[X:%.*]])
195871be91ebSMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
19592edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret i64 [[CONV_I]]
19602edafe83SMatt Arsenault//
1961a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_llrintf(
1962a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1963a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.rint.f32(float [[X:%.*]])
1964a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
1965a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i64 [[CONV_I]]
1966a0709e22SYaxun (Sam) Liu//
19672edafe83SMatt Arsenaultextern "C" __device__ long long int test_llrintf(float x) {
19682edafe83SMatt Arsenault  return llrintf(x);
19692edafe83SMatt Arsenault}
19702edafe83SMatt Arsenault
19712edafe83SMatt Arsenault// DEFAULT-LABEL: @test_llrint(
19722edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
197371be91ebSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.rint.f64(double [[X:%.*]])
197471be91ebSMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
19752edafe83SMatt Arsenault// DEFAULT-NEXT:    ret i64 [[CONV_I]]
19762edafe83SMatt Arsenault//
19772edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_llrint(
19782edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
197971be91ebSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.rint.f64(double [[X:%.*]])
198071be91ebSMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
19812edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret i64 [[CONV_I]]
19822edafe83SMatt Arsenault//
1983a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_llrint(
1984a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
1985a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.rint.f64(double [[X:%.*]])
1986a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
1987a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i64 [[CONV_I]]
1988a0709e22SYaxun (Sam) Liu//
19892edafe83SMatt Arsenaultextern "C" __device__ long long int test_llrint(double x) {
19902edafe83SMatt Arsenault  return llrint(x);
19912edafe83SMatt Arsenault}
19922edafe83SMatt Arsenault
19932edafe83SMatt Arsenault// DEFAULT-LABEL: @test_llroundf(
19942edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
19959a317516SMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.round.f32(float [[X:%.*]])
19969a317516SMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
19972edafe83SMatt Arsenault// DEFAULT-NEXT:    ret i64 [[CONV_I]]
19982edafe83SMatt Arsenault//
19992edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_llroundf(
20002edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
20019a317516SMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.round.f32(float [[X:%.*]])
20029a317516SMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
20032edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret i64 [[CONV_I]]
20042edafe83SMatt Arsenault//
2005a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_llroundf(
2006a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2007a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.round.f32(float [[X:%.*]])
2008a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2009a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i64 [[CONV_I]]
2010a0709e22SYaxun (Sam) Liu//
20112edafe83SMatt Arsenaultextern "C" __device__ long long int test_llroundf(float x) {
20122edafe83SMatt Arsenault  return llroundf(x);
20132edafe83SMatt Arsenault}
20142edafe83SMatt Arsenault
20152edafe83SMatt Arsenault// DEFAULT-LABEL: @test_llround(
20162edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
20179a317516SMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.round.f64(double [[X:%.*]])
20189a317516SMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
20192edafe83SMatt Arsenault// DEFAULT-NEXT:    ret i64 [[CONV_I]]
20202edafe83SMatt Arsenault//
20212edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_llround(
20222edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
20239a317516SMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.round.f64(double [[X:%.*]])
20249a317516SMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
20252edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret i64 [[CONV_I]]
20262edafe83SMatt Arsenault//
2027a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_llround(
2028a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2029a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.round.f64(double [[X:%.*]])
2030a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2031a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i64 [[CONV_I]]
2032a0709e22SYaxun (Sam) Liu//
20332edafe83SMatt Arsenaultextern "C" __device__ long long int test_llround(double x) {
20342edafe83SMatt Arsenault  return llround(x);
20352edafe83SMatt Arsenault}
20362edafe83SMatt Arsenault
20372edafe83SMatt Arsenault// DEFAULT-LABEL: @test_log10f(
20382edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
20392da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log10.f32(float [[X:%.*]])
20405f1d3834SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
20412edafe83SMatt Arsenault//
20422edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_log10f(
20432edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
20442da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.log10.f32(float [[X:%.*]])
20455f1d3834SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
20462edafe83SMatt Arsenault//
2047a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_log10f(
2048a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
20492da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log10.f32(float [[X:%.*]])
2050a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
2051a0709e22SYaxun (Sam) Liu//
20522edafe83SMatt Arsenaultextern "C" __device__ float test_log10f(float x) {
20532edafe83SMatt Arsenault  return log10f(x);
20542edafe83SMatt Arsenault}
20552edafe83SMatt Arsenault
20562edafe83SMatt Arsenault// DEFAULT-LABEL: @test_log10(
20572edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2058a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log10_f64(double noundef [[X:%.*]]) #[[ATTR13]]
20592edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
20602edafe83SMatt Arsenault//
20612edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_log10(
20622edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2063a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_log10_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
20642edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
20652edafe83SMatt Arsenault//
2066a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_log10(
2067a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2068a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log10_f64(double noundef [[X:%.*]]) #[[ATTR13]]
2069a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
2070a0709e22SYaxun (Sam) Liu//
20712edafe83SMatt Arsenaultextern "C" __device__ double test_log10(double x) {
20722edafe83SMatt Arsenault  return log10(x);
20732edafe83SMatt Arsenault}
20742edafe83SMatt Arsenault
20752edafe83SMatt Arsenault// DEFAULT-LABEL: @test_log1pf(
20762edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2077a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_log1p_f32(float noundef [[X:%.*]]) #[[ATTR13]]
20782edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
20792edafe83SMatt Arsenault//
20802edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_log1pf(
20812edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2082a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_log1p_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
20832edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
20842edafe83SMatt Arsenault//
2085a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_log1pf(
2086a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2087a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_log1p_f32(float noundef [[X:%.*]]) #[[ATTR13]]
2088a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
2089a0709e22SYaxun (Sam) Liu//
20902edafe83SMatt Arsenaultextern "C" __device__ float test_log1pf(float x) {
20912edafe83SMatt Arsenault  return log1pf(x);
20922edafe83SMatt Arsenault}
20932edafe83SMatt Arsenault
20942edafe83SMatt Arsenault// DEFAULT-LABEL: @test_log1p(
20952edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2096a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log1p_f64(double noundef [[X:%.*]]) #[[ATTR13]]
20972edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
20982edafe83SMatt Arsenault//
20992edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_log1p(
21002edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2101a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_log1p_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
21022edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
21032edafe83SMatt Arsenault//
2104a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_log1p(
2105a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2106a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log1p_f64(double noundef [[X:%.*]]) #[[ATTR13]]
2107a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
2108a0709e22SYaxun (Sam) Liu//
21092edafe83SMatt Arsenaultextern "C" __device__ double test_log1p(double x) {
21102edafe83SMatt Arsenault  return log1p(x);
21112edafe83SMatt Arsenault}
21122edafe83SMatt Arsenault
21132edafe83SMatt Arsenault// DEFAULT-LABEL: @test_log2f(
21142edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2115a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_log2_f32(float noundef [[X:%.*]]) #[[ATTR13]]
2116a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    ret float [[CALL_I]]
21172edafe83SMatt Arsenault//
21182edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_log2f(
21192edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2120a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_log2_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
2121a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    ret float [[CALL_I]]
2122a0709e22SYaxun (Sam) Liu//
2123a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_log2f(
2124a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
21252da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.log.f32(float [[X:%.*]])
2126a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
21272edafe83SMatt Arsenault//
21282edafe83SMatt Arsenaultextern "C" __device__ float test_log2f(float x) {
21292edafe83SMatt Arsenault  return log2f(x);
21302edafe83SMatt Arsenault}
21312edafe83SMatt Arsenault
21322edafe83SMatt Arsenault// DEFAULT-LABEL: @test_log2(
21332edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2134a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log2_f64(double noundef [[X:%.*]]) #[[ATTR13]]
21352edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
21362edafe83SMatt Arsenault//
21372edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_log2(
21382edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2139a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_log2_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
21402edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
21412edafe83SMatt Arsenault//
2142a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_log2(
2143a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2144a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log2_f64(double noundef [[X:%.*]]) #[[ATTR13]]
2145a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
2146a0709e22SYaxun (Sam) Liu//
21472edafe83SMatt Arsenaultextern "C" __device__ double test_log2(double x) {
21482edafe83SMatt Arsenault  return log2(x);
21492edafe83SMatt Arsenault}
21502edafe83SMatt Arsenault
21512edafe83SMatt Arsenault// DEFAULT-LABEL: @test_logbf(
21522edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2153a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_logb_f32(float noundef [[X:%.*]]) #[[ATTR12]]
21542edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
21552edafe83SMatt Arsenault//
21562edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_logbf(
21572edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2158a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_logb_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
21592edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
21602edafe83SMatt Arsenault//
2161a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_logbf(
2162a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2163a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_logb_f32(float noundef [[X:%.*]]) #[[ATTR12]]
2164a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
2165a0709e22SYaxun (Sam) Liu//
21662edafe83SMatt Arsenaultextern "C" __device__ float test_logbf(float x) {
21672edafe83SMatt Arsenault  return logbf(x);
21682edafe83SMatt Arsenault}
21692edafe83SMatt Arsenault
21702edafe83SMatt Arsenault// DEFAULT-LABEL: @test_logb(
21712edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2172a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_logb_f64(double noundef [[X:%.*]]) #[[ATTR12]]
21732edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
21742edafe83SMatt Arsenault//
21752edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_logb(
21762edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2177a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_logb_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
21782edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
21792edafe83SMatt Arsenault//
2180a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_logb(
2181a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2182a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_logb_f64(double noundef [[X:%.*]]) #[[ATTR12]]
2183a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
2184a0709e22SYaxun (Sam) Liu//
21852edafe83SMatt Arsenaultextern "C" __device__ double test_logb(double x) {
21862edafe83SMatt Arsenault  return logb(x);
21872edafe83SMatt Arsenault}
21882edafe83SMatt Arsenault
2189a0709e22SYaxun (Sam) Liu// DEFAULT-LABEL: @test_logf(
2190a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:  entry:
2191a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_log_f32(float noundef [[X:%.*]]) #[[ATTR13]]
2192a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    ret float [[CALL_I]]
2193a0709e22SYaxun (Sam) Liu//
2194a0709e22SYaxun (Sam) Liu// FINITEONLY-LABEL: @test_logf(
2195a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:  entry:
2196a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_log_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
2197a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    ret float [[CALL_I]]
2198a0709e22SYaxun (Sam) Liu//
2199a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_logf(
2200a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
22012da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log.f32(float [[X:%.*]])
2202a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
2203a0709e22SYaxun (Sam) Liu//
2204a0709e22SYaxun (Sam) Liuextern "C" __device__ float test_logf(float x) {
2205a0709e22SYaxun (Sam) Liu  return logf(x);
2206a0709e22SYaxun (Sam) Liu}
2207a0709e22SYaxun (Sam) Liu
22082edafe83SMatt Arsenault// DEFAULT-LABEL: @test_lrintf(
22092edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
221071be91ebSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.rint.f32(float [[X:%.*]])
221171be91ebSMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
22122edafe83SMatt Arsenault// DEFAULT-NEXT:    ret i64 [[CONV_I]]
22132edafe83SMatt Arsenault//
22142edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_lrintf(
22152edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
221671be91ebSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.rint.f32(float [[X:%.*]])
221771be91ebSMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
22182edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret i64 [[CONV_I]]
22192edafe83SMatt Arsenault//
2220a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_lrintf(
2221a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2222a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.rint.f32(float [[X:%.*]])
2223a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2224a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i64 [[CONV_I]]
2225a0709e22SYaxun (Sam) Liu//
22262edafe83SMatt Arsenaultextern "C" __device__ long int test_lrintf(float x) {
22272edafe83SMatt Arsenault  return lrintf(x);
22282edafe83SMatt Arsenault}
22292edafe83SMatt Arsenault
22302edafe83SMatt Arsenault// DEFAULT-LABEL: @test_lrint(
22312edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
223271be91ebSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.rint.f64(double [[X:%.*]])
223371be91ebSMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
22342edafe83SMatt Arsenault// DEFAULT-NEXT:    ret i64 [[CONV_I]]
22352edafe83SMatt Arsenault//
22362edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_lrint(
22372edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
223871be91ebSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.rint.f64(double [[X:%.*]])
223971be91ebSMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
22402edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret i64 [[CONV_I]]
22412edafe83SMatt Arsenault//
2242a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_lrint(
2243a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2244a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.rint.f64(double [[X:%.*]])
2245a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2246a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i64 [[CONV_I]]
2247a0709e22SYaxun (Sam) Liu//
22482edafe83SMatt Arsenaultextern "C" __device__ long int test_lrint(double x) {
22492edafe83SMatt Arsenault  return lrint(x);
22502edafe83SMatt Arsenault}
22512edafe83SMatt Arsenault
22522edafe83SMatt Arsenault// DEFAULT-LABEL: @test_lroundf(
22532edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
22549a317516SMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.round.f32(float [[X:%.*]])
22559a317516SMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
22562edafe83SMatt Arsenault// DEFAULT-NEXT:    ret i64 [[CONV_I]]
22572edafe83SMatt Arsenault//
22582edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_lroundf(
22592edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
22609a317516SMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.round.f32(float [[X:%.*]])
22619a317516SMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
22622edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret i64 [[CONV_I]]
22632edafe83SMatt Arsenault//
2264a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_lroundf(
2265a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2266a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.round.f32(float [[X:%.*]])
2267a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2268a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i64 [[CONV_I]]
2269a0709e22SYaxun (Sam) Liu//
22702edafe83SMatt Arsenaultextern "C" __device__ long int test_lroundf(float x) {
22712edafe83SMatt Arsenault  return lroundf(x);
22722edafe83SMatt Arsenault}
22732edafe83SMatt Arsenault
22742edafe83SMatt Arsenault// DEFAULT-LABEL: @test_lround(
22752edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
22769a317516SMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.round.f64(double [[X:%.*]])
22779a317516SMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
22782edafe83SMatt Arsenault// DEFAULT-NEXT:    ret i64 [[CONV_I]]
22792edafe83SMatt Arsenault//
22802edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_lround(
22812edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
22829a317516SMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.round.f64(double [[X:%.*]])
22839a317516SMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
22842edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret i64 [[CONV_I]]
22852edafe83SMatt Arsenault//
2286a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_lround(
2287a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2288a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.round.f64(double [[X:%.*]])
2289a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2290a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret i64 [[CONV_I]]
2291a0709e22SYaxun (Sam) Liu//
22922edafe83SMatt Arsenaultextern "C" __device__ long int test_lround(double x) {
22932edafe83SMatt Arsenault  return lround(x);
22942edafe83SMatt Arsenault}
22952edafe83SMatt Arsenault
22962edafe83SMatt Arsenault// DEFAULT-LABEL: @test_modff(
22972edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
22982edafe83SMatt Arsenault// DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
2299a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15:[0-9]+]]
2300a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract noundef float @__ocml_modf_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
2301b57e049fSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16:![0-9]+]]
2302b57e049fSMatt Arsenault// DEFAULT-NEXT:    store float [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
2303a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
23042edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
23052edafe83SMatt Arsenault//
23062edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_modff(
23072edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
23082edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
2309a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15:[0-9]+]]
2310a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_modf_f32(float noundef nofpclass(nan inf) [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
2311b57e049fSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16:![0-9]+]]
2312b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store float [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
2313a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
23142edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
23152edafe83SMatt Arsenault//
2316a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_modff(
2317a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2318a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
2319a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15:[0-9]+]]
2320a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = call contract noundef float @__ocml_modf_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
2321a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16:![0-9]+]]
2322a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store float [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
2323a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
2324a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
2325a0709e22SYaxun (Sam) Liu//
23262edafe83SMatt Arsenaultextern "C" __device__ float test_modff(float x, float* y) {
23272edafe83SMatt Arsenault  return modff(x, y);
23282edafe83SMatt Arsenault}
23292edafe83SMatt Arsenault
23302edafe83SMatt Arsenault// DEFAULT-LABEL: @test_modf(
23312edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
23322edafe83SMatt Arsenault// DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
2333a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
2334a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract noundef double @__ocml_modf_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
2335b57e049fSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18:![0-9]+]]
2336b57e049fSMatt Arsenault// DEFAULT-NEXT:    store double [[TMP0]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
2337a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
23382edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
23392edafe83SMatt Arsenault//
23402edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_modf(
23412edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
23422edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
2343a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
2344a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_modf_f64(double noundef nofpclass(nan inf) [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
2345b57e049fSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18:![0-9]+]]
2346b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store double [[TMP0]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
2347a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
23482edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
23492edafe83SMatt Arsenault//
2350a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_modf(
2351a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2352a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
2353a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
2354a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = call contract noundef double @__ocml_modf_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
2355a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18:![0-9]+]]
2356a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store double [[TMP0]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
2357a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
2358a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
2359a0709e22SYaxun (Sam) Liu//
23602edafe83SMatt Arsenaultextern "C" __device__ double test_modf(double x, double* y) {
23612edafe83SMatt Arsenault  return modf(x, y);
23622edafe83SMatt Arsenault}
23632edafe83SMatt Arsenault
2364369d8148SAlex MacLean// DEFAULT-LABEL: @test_nanf(
2365369d8148SAlex MacLean// DEFAULT-NEXT:  entry:
2366369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP0:%.*]] = load i8, ptr [[TAG:%.*]], align 1, !tbaa [[TBAA4]]
2367369d8148SAlex MacLean// DEFAULT-NEXT:    [[CMP_I_I:%.*]] = icmp eq i8 [[TMP0]], 48
2368369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[CMP_I_I]], label [[IF_THEN_I_I:%.*]], label [[WHILE_COND_I14_I_I:%.*]]
2369369d8148SAlex MacLean// DEFAULT:       if.then.i.i:
2370*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[TAG]], i64 1
2371369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP1:%.*]] = load i8, ptr [[INCDEC_PTR_I_I]], align 1, !tbaa [[TBAA4]]
2372369d8148SAlex MacLean// DEFAULT-NEXT:    switch i8 [[TMP1]], label [[WHILE_COND_I_I_I:%.*]] [
2373369d8148SAlex MacLean// DEFAULT-NEXT:      i8 120, label [[WHILE_COND_I30_I_I_PREHEADER:%.*]]
2374369d8148SAlex MacLean// DEFAULT-NEXT:      i8 88, label [[WHILE_COND_I30_I_I_PREHEADER]]
2375369d8148SAlex MacLean// DEFAULT-NEXT:    ]
2376369d8148SAlex MacLean// DEFAULT:       while.cond.i30.i.i.preheader:
2377369d8148SAlex MacLean// DEFAULT-NEXT:    br label [[WHILE_COND_I30_I_I:%.*]]
2378369d8148SAlex MacLean// DEFAULT:       while.cond.i30.i.i:
2379369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_0_I31_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I37_I_I:%.*]], [[CLEANUP_I36_I_I:%.*]] ], [ [[INCDEC_PTR_I_I]], [[WHILE_COND_I30_I_I_PREHEADER]] ]
2380369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_0_I32_I_I:%.*]] = phi i64 [ [[__R_2_I_I_I:%.*]], [[CLEANUP_I36_I_I]] ], [ 0, [[WHILE_COND_I30_I_I_PREHEADER]] ]
2381369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP2:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I31_I_I]], align 1, !tbaa [[TBAA4]]
2382369d8148SAlex MacLean// DEFAULT-NEXT:    [[CMP_NOT_I33_I_I:%.*]] = icmp eq i8 [[TMP2]], 0
2383369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[CMP_NOT_I33_I_I]], label [[_ZL4NANFPKC_EXIT:%.*]], label [[WHILE_BODY_I34_I_I:%.*]]
2384369d8148SAlex MacLean// DEFAULT:       while.body.i34.i.i:
2385369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP3:%.*]] = add i8 [[TMP2]], -48
2386369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND_I35_I_I:%.*]] = icmp ult i8 [[TMP3]], 10
2387369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I35_I_I]], label [[IF_END31_I_I_I:%.*]], label [[IF_ELSE_I_I_I:%.*]]
2388369d8148SAlex MacLean// DEFAULT:       if.else.i.i.i:
2389369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP4:%.*]] = add i8 [[TMP2]], -97
2390369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND33_I_I_I:%.*]] = icmp ult i8 [[TMP4]], 6
2391369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND33_I_I_I]], label [[IF_END31_I_I_I]], label [[IF_ELSE17_I_I_I:%.*]]
2392369d8148SAlex MacLean// DEFAULT:       if.else17.i.i.i:
2393369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP5:%.*]] = add i8 [[TMP2]], -65
2394369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND34_I_I_I:%.*]] = icmp ult i8 [[TMP5]], 6
2395369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND34_I_I_I]], label [[IF_END31_I_I_I]], label [[CLEANUP_I36_I_I]]
2396369d8148SAlex MacLean// DEFAULT:       if.end31.i.i.i:
2397369d8148SAlex MacLean// DEFAULT-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I34_I_I]] ], [ -87, [[IF_ELSE_I_I_I]] ], [ -55, [[IF_ELSE17_I_I_I]] ]
2398369d8148SAlex MacLean// DEFAULT-NEXT:    [[MUL24_I_I_I:%.*]] = shl i64 [[__R_0_I32_I_I]], 4
2399369d8148SAlex MacLean// DEFAULT-NEXT:    [[CONV25_I_I_I:%.*]] = zext nneg i8 [[TMP2]] to i64
2400369d8148SAlex MacLean// DEFAULT-NEXT:    [[ADD26_I_I_I:%.*]] = add i64 [[MUL24_I_I_I]], [[DOTSINK]]
2401369d8148SAlex MacLean// DEFAULT-NEXT:    [[ADD28_I_I_I:%.*]] = add i64 [[ADD26_I_I_I]], [[CONV25_I_I_I]]
2402*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I40_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I31_I_I]], i64 1
2403369d8148SAlex MacLean// DEFAULT-NEXT:    br label [[CLEANUP_I36_I_I]]
2404369d8148SAlex MacLean// DEFAULT:       cleanup.i36.i.i:
2405369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_1_I37_I_I]] = phi ptr [ [[INCDEC_PTR_I40_I_I]], [[IF_END31_I_I_I]] ], [ [[__TAGP_ADDR_0_I31_I_I]], [[IF_ELSE17_I_I_I]] ]
2406369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_2_I_I_I]] = phi i64 [ [[ADD28_I_I_I]], [[IF_END31_I_I_I]] ], [ [[__R_0_I32_I_I]], [[IF_ELSE17_I_I_I]] ]
2407369d8148SAlex MacLean// DEFAULT-NEXT:    [[COND_I_I_I:%.*]] = phi i1 [ true, [[IF_END31_I_I_I]] ], [ false, [[IF_ELSE17_I_I_I]] ]
2408369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[COND_I_I_I]], label [[WHILE_COND_I30_I_I]], label [[_ZL4NANFPKC_EXIT]], !llvm.loop [[LOOP11]]
2409369d8148SAlex MacLean// DEFAULT:       while.cond.i.i.i:
2410369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_0_I_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I_I_I:%.*]], [[CLEANUP_I_I_I:%.*]] ], [ [[INCDEC_PTR_I_I]], [[IF_THEN_I_I]] ]
2411369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_0_I_I_I:%.*]] = phi i64 [ [[__R_1_I_I_I:%.*]], [[CLEANUP_I_I_I]] ], [ 0, [[IF_THEN_I_I]] ]
2412369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP6:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I_I_I]], align 1, !tbaa [[TBAA4]]
2413369d8148SAlex MacLean// DEFAULT-NEXT:    [[CMP_NOT_I_I_I:%.*]] = icmp eq i8 [[TMP6]], 0
2414369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[CMP_NOT_I_I_I]], label [[_ZL4NANFPKC_EXIT]], label [[WHILE_BODY_I_I_I:%.*]]
2415369d8148SAlex MacLean// DEFAULT:       while.body.i.i.i:
2416369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP7:%.*]] = and i8 [[TMP6]], -8
2417369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND_I_I_I:%.*]] = icmp eq i8 [[TMP7]], 48
2418369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I_I_I]], label [[IF_THEN_I_I_I:%.*]], label [[CLEANUP_I_I_I]]
2419369d8148SAlex MacLean// DEFAULT:       if.then.i.i.i:
2420369d8148SAlex MacLean// DEFAULT-NEXT:    [[MUL_I_I_I:%.*]] = shl i64 [[__R_0_I_I_I]], 3
2421369d8148SAlex MacLean// DEFAULT-NEXT:    [[CONV5_I_I_I:%.*]] = zext nneg i8 [[TMP6]] to i64
2422369d8148SAlex MacLean// DEFAULT-NEXT:    [[ADD_I_I_I:%.*]] = add i64 [[MUL_I_I_I]], -48
2423369d8148SAlex MacLean// DEFAULT-NEXT:    [[SUB_I_I_I:%.*]] = add i64 [[ADD_I_I_I]], [[CONV5_I_I_I]]
2424*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I_I_I]], i64 1
2425369d8148SAlex MacLean// DEFAULT-NEXT:    br label [[CLEANUP_I_I_I]]
2426369d8148SAlex MacLean// DEFAULT:       cleanup.i.i.i:
2427369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_1_I_I_I]] = phi ptr [ [[INCDEC_PTR_I_I_I]], [[IF_THEN_I_I_I]] ], [ [[__TAGP_ADDR_0_I_I_I]], [[WHILE_BODY_I_I_I]] ]
2428369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_1_I_I_I]] = phi i64 [ [[SUB_I_I_I]], [[IF_THEN_I_I_I]] ], [ [[__R_0_I_I_I]], [[WHILE_BODY_I_I_I]] ]
2429369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I_I_I]], label [[WHILE_COND_I_I_I]], label [[_ZL4NANFPKC_EXIT]], !llvm.loop [[LOOP7]]
2430369d8148SAlex MacLean// DEFAULT:       while.cond.i14.i.i:
2431369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_0_I15_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I21_I_I:%.*]], [[CLEANUP_I20_I_I:%.*]] ], [ [[TAG]], [[ENTRY:%.*]] ]
2432369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_0_I16_I_I:%.*]] = phi i64 [ [[__R_1_I22_I_I:%.*]], [[CLEANUP_I20_I_I]] ], [ 0, [[ENTRY]] ]
2433369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP8:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I15_I_I]], align 1, !tbaa [[TBAA4]]
2434369d8148SAlex MacLean// DEFAULT-NEXT:    [[CMP_NOT_I17_I_I:%.*]] = icmp eq i8 [[TMP8]], 0
2435369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[CMP_NOT_I17_I_I]], label [[_ZL4NANFPKC_EXIT]], label [[WHILE_BODY_I18_I_I:%.*]]
2436369d8148SAlex MacLean// DEFAULT:       while.body.i18.i.i:
2437369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP9:%.*]] = add i8 [[TMP8]], -48
2438369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND_I19_I_I:%.*]] = icmp ult i8 [[TMP9]], 10
2439369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[IF_THEN_I24_I_I:%.*]], label [[CLEANUP_I20_I_I]]
2440369d8148SAlex MacLean// DEFAULT:       if.then.i24.i.i:
2441369d8148SAlex MacLean// DEFAULT-NEXT:    [[MUL_I25_I_I:%.*]] = mul i64 [[__R_0_I16_I_I]], 10
2442369d8148SAlex MacLean// DEFAULT-NEXT:    [[CONV5_I26_I_I:%.*]] = zext nneg i8 [[TMP8]] to i64
2443369d8148SAlex MacLean// DEFAULT-NEXT:    [[ADD_I27_I_I:%.*]] = add i64 [[MUL_I25_I_I]], -48
2444369d8148SAlex MacLean// DEFAULT-NEXT:    [[SUB_I28_I_I:%.*]] = add i64 [[ADD_I27_I_I]], [[CONV5_I26_I_I]]
2445*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I29_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I15_I_I]], i64 1
2446369d8148SAlex MacLean// DEFAULT-NEXT:    br label [[CLEANUP_I20_I_I]]
2447369d8148SAlex MacLean// DEFAULT:       cleanup.i20.i.i:
2448369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_1_I21_I_I]] = phi ptr [ [[INCDEC_PTR_I29_I_I]], [[IF_THEN_I24_I_I]] ], [ [[__TAGP_ADDR_0_I15_I_I]], [[WHILE_BODY_I18_I_I]] ]
2449369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_1_I22_I_I]] = phi i64 [ [[SUB_I28_I_I]], [[IF_THEN_I24_I_I]] ], [ [[__R_0_I16_I_I]], [[WHILE_BODY_I18_I_I]] ]
2450369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[WHILE_COND_I14_I_I]], label [[_ZL4NANFPKC_EXIT]], !llvm.loop [[LOOP10]]
2451369d8148SAlex MacLean// DEFAULT:       _ZL4nanfPKc.exit:
2452369d8148SAlex MacLean// DEFAULT-NEXT:    [[RETVAL_0_I_I:%.*]] = phi i64 [ 0, [[CLEANUP_I_I_I]] ], [ [[__R_0_I_I_I]], [[WHILE_COND_I_I_I]] ], [ 0, [[CLEANUP_I36_I_I]] ], [ [[__R_0_I32_I_I]], [[WHILE_COND_I30_I_I]] ], [ 0, [[CLEANUP_I20_I_I]] ], [ [[__R_0_I16_I_I]], [[WHILE_COND_I14_I_I]] ]
2453369d8148SAlex MacLean// DEFAULT-NEXT:    [[CONV_I:%.*]] = trunc i64 [[RETVAL_0_I_I]] to i32
2454369d8148SAlex MacLean// DEFAULT-NEXT:    [[BF_VALUE_I:%.*]] = and i32 [[CONV_I]], 4194303
2455369d8148SAlex MacLean// DEFAULT-NEXT:    [[BF_SET9_I:%.*]] = or disjoint i32 [[BF_VALUE_I]], 2143289344
2456369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP10:%.*]] = bitcast i32 [[BF_SET9_I]] to float
2457369d8148SAlex MacLean// DEFAULT-NEXT:    ret float [[TMP10]]
2458369d8148SAlex MacLean//
2459369d8148SAlex MacLean// FINITEONLY-LABEL: @test_nanf(
2460369d8148SAlex MacLean// FINITEONLY-NEXT:  entry:
2461369d8148SAlex MacLean// FINITEONLY-NEXT:    ret float poison
2462369d8148SAlex MacLean//
2463369d8148SAlex MacLean// APPROX-LABEL: @test_nanf(
2464369d8148SAlex MacLean// APPROX-NEXT:  entry:
2465369d8148SAlex MacLean// APPROX-NEXT:    [[TMP0:%.*]] = load i8, ptr [[TAG:%.*]], align 1, !tbaa [[TBAA4]]
2466369d8148SAlex MacLean// APPROX-NEXT:    [[CMP_I_I:%.*]] = icmp eq i8 [[TMP0]], 48
2467369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[CMP_I_I]], label [[IF_THEN_I_I:%.*]], label [[WHILE_COND_I14_I_I:%.*]]
2468369d8148SAlex MacLean// APPROX:       if.then.i.i:
2469*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[TAG]], i64 1
2470369d8148SAlex MacLean// APPROX-NEXT:    [[TMP1:%.*]] = load i8, ptr [[INCDEC_PTR_I_I]], align 1, !tbaa [[TBAA4]]
2471369d8148SAlex MacLean// APPROX-NEXT:    switch i8 [[TMP1]], label [[WHILE_COND_I_I_I:%.*]] [
2472369d8148SAlex MacLean// APPROX-NEXT:      i8 120, label [[WHILE_COND_I30_I_I_PREHEADER:%.*]]
2473369d8148SAlex MacLean// APPROX-NEXT:      i8 88, label [[WHILE_COND_I30_I_I_PREHEADER]]
2474369d8148SAlex MacLean// APPROX-NEXT:    ]
2475369d8148SAlex MacLean// APPROX:       while.cond.i30.i.i.preheader:
2476369d8148SAlex MacLean// APPROX-NEXT:    br label [[WHILE_COND_I30_I_I:%.*]]
2477369d8148SAlex MacLean// APPROX:       while.cond.i30.i.i:
2478369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_0_I31_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I37_I_I:%.*]], [[CLEANUP_I36_I_I:%.*]] ], [ [[INCDEC_PTR_I_I]], [[WHILE_COND_I30_I_I_PREHEADER]] ]
2479369d8148SAlex MacLean// APPROX-NEXT:    [[__R_0_I32_I_I:%.*]] = phi i64 [ [[__R_2_I_I_I:%.*]], [[CLEANUP_I36_I_I]] ], [ 0, [[WHILE_COND_I30_I_I_PREHEADER]] ]
2480369d8148SAlex MacLean// APPROX-NEXT:    [[TMP2:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I31_I_I]], align 1, !tbaa [[TBAA4]]
2481369d8148SAlex MacLean// APPROX-NEXT:    [[CMP_NOT_I33_I_I:%.*]] = icmp eq i8 [[TMP2]], 0
2482369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[CMP_NOT_I33_I_I]], label [[_ZL4NANFPKC_EXIT:%.*]], label [[WHILE_BODY_I34_I_I:%.*]]
2483369d8148SAlex MacLean// APPROX:       while.body.i34.i.i:
2484369d8148SAlex MacLean// APPROX-NEXT:    [[TMP3:%.*]] = add i8 [[TMP2]], -48
2485369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND_I35_I_I:%.*]] = icmp ult i8 [[TMP3]], 10
2486369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I35_I_I]], label [[IF_END31_I_I_I:%.*]], label [[IF_ELSE_I_I_I:%.*]]
2487369d8148SAlex MacLean// APPROX:       if.else.i.i.i:
2488369d8148SAlex MacLean// APPROX-NEXT:    [[TMP4:%.*]] = add i8 [[TMP2]], -97
2489369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND33_I_I_I:%.*]] = icmp ult i8 [[TMP4]], 6
2490369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND33_I_I_I]], label [[IF_END31_I_I_I]], label [[IF_ELSE17_I_I_I:%.*]]
2491369d8148SAlex MacLean// APPROX:       if.else17.i.i.i:
2492369d8148SAlex MacLean// APPROX-NEXT:    [[TMP5:%.*]] = add i8 [[TMP2]], -65
2493369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND34_I_I_I:%.*]] = icmp ult i8 [[TMP5]], 6
2494369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND34_I_I_I]], label [[IF_END31_I_I_I]], label [[CLEANUP_I36_I_I]]
2495369d8148SAlex MacLean// APPROX:       if.end31.i.i.i:
2496369d8148SAlex MacLean// APPROX-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I34_I_I]] ], [ -87, [[IF_ELSE_I_I_I]] ], [ -55, [[IF_ELSE17_I_I_I]] ]
2497369d8148SAlex MacLean// APPROX-NEXT:    [[MUL24_I_I_I:%.*]] = shl i64 [[__R_0_I32_I_I]], 4
2498369d8148SAlex MacLean// APPROX-NEXT:    [[CONV25_I_I_I:%.*]] = zext nneg i8 [[TMP2]] to i64
2499369d8148SAlex MacLean// APPROX-NEXT:    [[ADD26_I_I_I:%.*]] = add i64 [[MUL24_I_I_I]], [[DOTSINK]]
2500369d8148SAlex MacLean// APPROX-NEXT:    [[ADD28_I_I_I:%.*]] = add i64 [[ADD26_I_I_I]], [[CONV25_I_I_I]]
2501*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I40_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I31_I_I]], i64 1
2502369d8148SAlex MacLean// APPROX-NEXT:    br label [[CLEANUP_I36_I_I]]
2503369d8148SAlex MacLean// APPROX:       cleanup.i36.i.i:
2504369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_1_I37_I_I]] = phi ptr [ [[INCDEC_PTR_I40_I_I]], [[IF_END31_I_I_I]] ], [ [[__TAGP_ADDR_0_I31_I_I]], [[IF_ELSE17_I_I_I]] ]
2505369d8148SAlex MacLean// APPROX-NEXT:    [[__R_2_I_I_I]] = phi i64 [ [[ADD28_I_I_I]], [[IF_END31_I_I_I]] ], [ [[__R_0_I32_I_I]], [[IF_ELSE17_I_I_I]] ]
2506369d8148SAlex MacLean// APPROX-NEXT:    [[COND_I_I_I:%.*]] = phi i1 [ true, [[IF_END31_I_I_I]] ], [ false, [[IF_ELSE17_I_I_I]] ]
2507369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[COND_I_I_I]], label [[WHILE_COND_I30_I_I]], label [[_ZL4NANFPKC_EXIT]], !llvm.loop [[LOOP11]]
2508369d8148SAlex MacLean// APPROX:       while.cond.i.i.i:
2509369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_0_I_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I_I_I:%.*]], [[CLEANUP_I_I_I:%.*]] ], [ [[INCDEC_PTR_I_I]], [[IF_THEN_I_I]] ]
2510369d8148SAlex MacLean// APPROX-NEXT:    [[__R_0_I_I_I:%.*]] = phi i64 [ [[__R_1_I_I_I:%.*]], [[CLEANUP_I_I_I]] ], [ 0, [[IF_THEN_I_I]] ]
2511369d8148SAlex MacLean// APPROX-NEXT:    [[TMP6:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I_I_I]], align 1, !tbaa [[TBAA4]]
2512369d8148SAlex MacLean// APPROX-NEXT:    [[CMP_NOT_I_I_I:%.*]] = icmp eq i8 [[TMP6]], 0
2513369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[CMP_NOT_I_I_I]], label [[_ZL4NANFPKC_EXIT]], label [[WHILE_BODY_I_I_I:%.*]]
2514369d8148SAlex MacLean// APPROX:       while.body.i.i.i:
2515369d8148SAlex MacLean// APPROX-NEXT:    [[TMP7:%.*]] = and i8 [[TMP6]], -8
2516369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND_I_I_I:%.*]] = icmp eq i8 [[TMP7]], 48
2517369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I_I_I]], label [[IF_THEN_I_I_I:%.*]], label [[CLEANUP_I_I_I]]
2518369d8148SAlex MacLean// APPROX:       if.then.i.i.i:
2519369d8148SAlex MacLean// APPROX-NEXT:    [[MUL_I_I_I:%.*]] = shl i64 [[__R_0_I_I_I]], 3
2520369d8148SAlex MacLean// APPROX-NEXT:    [[CONV5_I_I_I:%.*]] = zext nneg i8 [[TMP6]] to i64
2521369d8148SAlex MacLean// APPROX-NEXT:    [[ADD_I_I_I:%.*]] = add i64 [[MUL_I_I_I]], -48
2522369d8148SAlex MacLean// APPROX-NEXT:    [[SUB_I_I_I:%.*]] = add i64 [[ADD_I_I_I]], [[CONV5_I_I_I]]
2523*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I_I_I]], i64 1
2524369d8148SAlex MacLean// APPROX-NEXT:    br label [[CLEANUP_I_I_I]]
2525369d8148SAlex MacLean// APPROX:       cleanup.i.i.i:
2526369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_1_I_I_I]] = phi ptr [ [[INCDEC_PTR_I_I_I]], [[IF_THEN_I_I_I]] ], [ [[__TAGP_ADDR_0_I_I_I]], [[WHILE_BODY_I_I_I]] ]
2527369d8148SAlex MacLean// APPROX-NEXT:    [[__R_1_I_I_I]] = phi i64 [ [[SUB_I_I_I]], [[IF_THEN_I_I_I]] ], [ [[__R_0_I_I_I]], [[WHILE_BODY_I_I_I]] ]
2528369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I_I_I]], label [[WHILE_COND_I_I_I]], label [[_ZL4NANFPKC_EXIT]], !llvm.loop [[LOOP7]]
2529369d8148SAlex MacLean// APPROX:       while.cond.i14.i.i:
2530369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_0_I15_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I21_I_I:%.*]], [[CLEANUP_I20_I_I:%.*]] ], [ [[TAG]], [[ENTRY:%.*]] ]
2531369d8148SAlex MacLean// APPROX-NEXT:    [[__R_0_I16_I_I:%.*]] = phi i64 [ [[__R_1_I22_I_I:%.*]], [[CLEANUP_I20_I_I]] ], [ 0, [[ENTRY]] ]
2532369d8148SAlex MacLean// APPROX-NEXT:    [[TMP8:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I15_I_I]], align 1, !tbaa [[TBAA4]]
2533369d8148SAlex MacLean// APPROX-NEXT:    [[CMP_NOT_I17_I_I:%.*]] = icmp eq i8 [[TMP8]], 0
2534369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[CMP_NOT_I17_I_I]], label [[_ZL4NANFPKC_EXIT]], label [[WHILE_BODY_I18_I_I:%.*]]
2535369d8148SAlex MacLean// APPROX:       while.body.i18.i.i:
2536369d8148SAlex MacLean// APPROX-NEXT:    [[TMP9:%.*]] = add i8 [[TMP8]], -48
2537369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND_I19_I_I:%.*]] = icmp ult i8 [[TMP9]], 10
2538369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[IF_THEN_I24_I_I:%.*]], label [[CLEANUP_I20_I_I]]
2539369d8148SAlex MacLean// APPROX:       if.then.i24.i.i:
2540369d8148SAlex MacLean// APPROX-NEXT:    [[MUL_I25_I_I:%.*]] = mul i64 [[__R_0_I16_I_I]], 10
2541369d8148SAlex MacLean// APPROX-NEXT:    [[CONV5_I26_I_I:%.*]] = zext nneg i8 [[TMP8]] to i64
2542369d8148SAlex MacLean// APPROX-NEXT:    [[ADD_I27_I_I:%.*]] = add i64 [[MUL_I25_I_I]], -48
2543369d8148SAlex MacLean// APPROX-NEXT:    [[SUB_I28_I_I:%.*]] = add i64 [[ADD_I27_I_I]], [[CONV5_I26_I_I]]
2544*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I29_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I15_I_I]], i64 1
2545369d8148SAlex MacLean// APPROX-NEXT:    br label [[CLEANUP_I20_I_I]]
2546369d8148SAlex MacLean// APPROX:       cleanup.i20.i.i:
2547369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_1_I21_I_I]] = phi ptr [ [[INCDEC_PTR_I29_I_I]], [[IF_THEN_I24_I_I]] ], [ [[__TAGP_ADDR_0_I15_I_I]], [[WHILE_BODY_I18_I_I]] ]
2548369d8148SAlex MacLean// APPROX-NEXT:    [[__R_1_I22_I_I]] = phi i64 [ [[SUB_I28_I_I]], [[IF_THEN_I24_I_I]] ], [ [[__R_0_I16_I_I]], [[WHILE_BODY_I18_I_I]] ]
2549369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[WHILE_COND_I14_I_I]], label [[_ZL4NANFPKC_EXIT]], !llvm.loop [[LOOP10]]
2550369d8148SAlex MacLean// APPROX:       _ZL4nanfPKc.exit:
2551369d8148SAlex MacLean// APPROX-NEXT:    [[RETVAL_0_I_I:%.*]] = phi i64 [ 0, [[CLEANUP_I_I_I]] ], [ [[__R_0_I_I_I]], [[WHILE_COND_I_I_I]] ], [ 0, [[CLEANUP_I36_I_I]] ], [ [[__R_0_I32_I_I]], [[WHILE_COND_I30_I_I]] ], [ 0, [[CLEANUP_I20_I_I]] ], [ [[__R_0_I16_I_I]], [[WHILE_COND_I14_I_I]] ]
2552369d8148SAlex MacLean// APPROX-NEXT:    [[CONV_I:%.*]] = trunc i64 [[RETVAL_0_I_I]] to i32
2553369d8148SAlex MacLean// APPROX-NEXT:    [[BF_VALUE_I:%.*]] = and i32 [[CONV_I]], 4194303
2554369d8148SAlex MacLean// APPROX-NEXT:    [[BF_SET9_I:%.*]] = or disjoint i32 [[BF_VALUE_I]], 2143289344
2555369d8148SAlex MacLean// APPROX-NEXT:    [[TMP10:%.*]] = bitcast i32 [[BF_SET9_I]] to float
2556369d8148SAlex MacLean// APPROX-NEXT:    ret float [[TMP10]]
25572edafe83SMatt Arsenault//
25582edafe83SMatt Arsenaultextern "C" __device__ float test_nanf(const char *tag) {
25592edafe83SMatt Arsenault  return nanf(tag);
25602edafe83SMatt Arsenault}
25612edafe83SMatt Arsenault
2562369d8148SAlex MacLean// DEFAULT-LABEL: @test_nan(
2563369d8148SAlex MacLean// DEFAULT-NEXT:  entry:
2564369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP0:%.*]] = load i8, ptr [[TAG:%.*]], align 1, !tbaa [[TBAA4]]
2565369d8148SAlex MacLean// DEFAULT-NEXT:    [[CMP_I_I:%.*]] = icmp eq i8 [[TMP0]], 48
2566369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[CMP_I_I]], label [[IF_THEN_I_I:%.*]], label [[WHILE_COND_I14_I_I:%.*]]
2567369d8148SAlex MacLean// DEFAULT:       if.then.i.i:
2568*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[TAG]], i64 1
2569369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP1:%.*]] = load i8, ptr [[INCDEC_PTR_I_I]], align 1, !tbaa [[TBAA4]]
2570369d8148SAlex MacLean// DEFAULT-NEXT:    switch i8 [[TMP1]], label [[WHILE_COND_I_I_I:%.*]] [
2571369d8148SAlex MacLean// DEFAULT-NEXT:      i8 120, label [[WHILE_COND_I30_I_I_PREHEADER:%.*]]
2572369d8148SAlex MacLean// DEFAULT-NEXT:      i8 88, label [[WHILE_COND_I30_I_I_PREHEADER]]
2573369d8148SAlex MacLean// DEFAULT-NEXT:    ]
2574369d8148SAlex MacLean// DEFAULT:       while.cond.i30.i.i.preheader:
2575369d8148SAlex MacLean// DEFAULT-NEXT:    br label [[WHILE_COND_I30_I_I:%.*]]
2576369d8148SAlex MacLean// DEFAULT:       while.cond.i30.i.i:
2577369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_0_I31_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I37_I_I:%.*]], [[CLEANUP_I36_I_I:%.*]] ], [ [[INCDEC_PTR_I_I]], [[WHILE_COND_I30_I_I_PREHEADER]] ]
2578369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_0_I32_I_I:%.*]] = phi i64 [ [[__R_2_I_I_I:%.*]], [[CLEANUP_I36_I_I]] ], [ 0, [[WHILE_COND_I30_I_I_PREHEADER]] ]
2579369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP2:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I31_I_I]], align 1, !tbaa [[TBAA4]]
2580369d8148SAlex MacLean// DEFAULT-NEXT:    [[CMP_NOT_I33_I_I:%.*]] = icmp eq i8 [[TMP2]], 0
2581369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[CMP_NOT_I33_I_I]], label [[_ZL3NANPKC_EXIT:%.*]], label [[WHILE_BODY_I34_I_I:%.*]]
2582369d8148SAlex MacLean// DEFAULT:       while.body.i34.i.i:
2583369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP3:%.*]] = add i8 [[TMP2]], -48
2584369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND_I35_I_I:%.*]] = icmp ult i8 [[TMP3]], 10
2585369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I35_I_I]], label [[IF_END31_I_I_I:%.*]], label [[IF_ELSE_I_I_I:%.*]]
2586369d8148SAlex MacLean// DEFAULT:       if.else.i.i.i:
2587369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP4:%.*]] = add i8 [[TMP2]], -97
2588369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND33_I_I_I:%.*]] = icmp ult i8 [[TMP4]], 6
2589369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND33_I_I_I]], label [[IF_END31_I_I_I]], label [[IF_ELSE17_I_I_I:%.*]]
2590369d8148SAlex MacLean// DEFAULT:       if.else17.i.i.i:
2591369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP5:%.*]] = add i8 [[TMP2]], -65
2592369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND34_I_I_I:%.*]] = icmp ult i8 [[TMP5]], 6
2593369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND34_I_I_I]], label [[IF_END31_I_I_I]], label [[CLEANUP_I36_I_I]]
2594369d8148SAlex MacLean// DEFAULT:       if.end31.i.i.i:
2595369d8148SAlex MacLean// DEFAULT-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I34_I_I]] ], [ -87, [[IF_ELSE_I_I_I]] ], [ -55, [[IF_ELSE17_I_I_I]] ]
2596369d8148SAlex MacLean// DEFAULT-NEXT:    [[MUL24_I_I_I:%.*]] = shl i64 [[__R_0_I32_I_I]], 4
2597369d8148SAlex MacLean// DEFAULT-NEXT:    [[CONV25_I_I_I:%.*]] = zext nneg i8 [[TMP2]] to i64
2598369d8148SAlex MacLean// DEFAULT-NEXT:    [[ADD26_I_I_I:%.*]] = add i64 [[MUL24_I_I_I]], [[DOTSINK]]
2599369d8148SAlex MacLean// DEFAULT-NEXT:    [[ADD28_I_I_I:%.*]] = add i64 [[ADD26_I_I_I]], [[CONV25_I_I_I]]
2600*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I40_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I31_I_I]], i64 1
2601369d8148SAlex MacLean// DEFAULT-NEXT:    br label [[CLEANUP_I36_I_I]]
2602369d8148SAlex MacLean// DEFAULT:       cleanup.i36.i.i:
2603369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_1_I37_I_I]] = phi ptr [ [[INCDEC_PTR_I40_I_I]], [[IF_END31_I_I_I]] ], [ [[__TAGP_ADDR_0_I31_I_I]], [[IF_ELSE17_I_I_I]] ]
2604369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_2_I_I_I]] = phi i64 [ [[ADD28_I_I_I]], [[IF_END31_I_I_I]] ], [ [[__R_0_I32_I_I]], [[IF_ELSE17_I_I_I]] ]
2605369d8148SAlex MacLean// DEFAULT-NEXT:    [[COND_I_I_I:%.*]] = phi i1 [ true, [[IF_END31_I_I_I]] ], [ false, [[IF_ELSE17_I_I_I]] ]
2606369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[COND_I_I_I]], label [[WHILE_COND_I30_I_I]], label [[_ZL3NANPKC_EXIT]], !llvm.loop [[LOOP11]]
2607369d8148SAlex MacLean// DEFAULT:       while.cond.i.i.i:
2608369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_0_I_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I_I_I:%.*]], [[CLEANUP_I_I_I:%.*]] ], [ [[INCDEC_PTR_I_I]], [[IF_THEN_I_I]] ]
2609369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_0_I_I_I:%.*]] = phi i64 [ [[__R_1_I_I_I:%.*]], [[CLEANUP_I_I_I]] ], [ 0, [[IF_THEN_I_I]] ]
2610369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP6:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I_I_I]], align 1, !tbaa [[TBAA4]]
2611369d8148SAlex MacLean// DEFAULT-NEXT:    [[CMP_NOT_I_I_I:%.*]] = icmp eq i8 [[TMP6]], 0
2612369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[CMP_NOT_I_I_I]], label [[_ZL3NANPKC_EXIT]], label [[WHILE_BODY_I_I_I:%.*]]
2613369d8148SAlex MacLean// DEFAULT:       while.body.i.i.i:
2614369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP7:%.*]] = and i8 [[TMP6]], -8
2615369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND_I_I_I:%.*]] = icmp eq i8 [[TMP7]], 48
2616369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I_I_I]], label [[IF_THEN_I_I_I:%.*]], label [[CLEANUP_I_I_I]]
2617369d8148SAlex MacLean// DEFAULT:       if.then.i.i.i:
2618369d8148SAlex MacLean// DEFAULT-NEXT:    [[MUL_I_I_I:%.*]] = shl i64 [[__R_0_I_I_I]], 3
2619369d8148SAlex MacLean// DEFAULT-NEXT:    [[CONV5_I_I_I:%.*]] = zext nneg i8 [[TMP6]] to i64
2620369d8148SAlex MacLean// DEFAULT-NEXT:    [[ADD_I_I_I:%.*]] = add i64 [[MUL_I_I_I]], -48
2621369d8148SAlex MacLean// DEFAULT-NEXT:    [[SUB_I_I_I:%.*]] = add i64 [[ADD_I_I_I]], [[CONV5_I_I_I]]
2622*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I_I_I]], i64 1
2623369d8148SAlex MacLean// DEFAULT-NEXT:    br label [[CLEANUP_I_I_I]]
2624369d8148SAlex MacLean// DEFAULT:       cleanup.i.i.i:
2625369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_1_I_I_I]] = phi ptr [ [[INCDEC_PTR_I_I_I]], [[IF_THEN_I_I_I]] ], [ [[__TAGP_ADDR_0_I_I_I]], [[WHILE_BODY_I_I_I]] ]
2626369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_1_I_I_I]] = phi i64 [ [[SUB_I_I_I]], [[IF_THEN_I_I_I]] ], [ [[__R_0_I_I_I]], [[WHILE_BODY_I_I_I]] ]
2627369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I_I_I]], label [[WHILE_COND_I_I_I]], label [[_ZL3NANPKC_EXIT]], !llvm.loop [[LOOP7]]
2628369d8148SAlex MacLean// DEFAULT:       while.cond.i14.i.i:
2629369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_0_I15_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I21_I_I:%.*]], [[CLEANUP_I20_I_I:%.*]] ], [ [[TAG]], [[ENTRY:%.*]] ]
2630369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_0_I16_I_I:%.*]] = phi i64 [ [[__R_1_I22_I_I:%.*]], [[CLEANUP_I20_I_I]] ], [ 0, [[ENTRY]] ]
2631369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP8:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I15_I_I]], align 1, !tbaa [[TBAA4]]
2632369d8148SAlex MacLean// DEFAULT-NEXT:    [[CMP_NOT_I17_I_I:%.*]] = icmp eq i8 [[TMP8]], 0
2633369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[CMP_NOT_I17_I_I]], label [[_ZL3NANPKC_EXIT]], label [[WHILE_BODY_I18_I_I:%.*]]
2634369d8148SAlex MacLean// DEFAULT:       while.body.i18.i.i:
2635369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP9:%.*]] = add i8 [[TMP8]], -48
2636369d8148SAlex MacLean// DEFAULT-NEXT:    [[OR_COND_I19_I_I:%.*]] = icmp ult i8 [[TMP9]], 10
2637369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[IF_THEN_I24_I_I:%.*]], label [[CLEANUP_I20_I_I]]
2638369d8148SAlex MacLean// DEFAULT:       if.then.i24.i.i:
2639369d8148SAlex MacLean// DEFAULT-NEXT:    [[MUL_I25_I_I:%.*]] = mul i64 [[__R_0_I16_I_I]], 10
2640369d8148SAlex MacLean// DEFAULT-NEXT:    [[CONV5_I26_I_I:%.*]] = zext nneg i8 [[TMP8]] to i64
2641369d8148SAlex MacLean// DEFAULT-NEXT:    [[ADD_I27_I_I:%.*]] = add i64 [[MUL_I25_I_I]], -48
2642369d8148SAlex MacLean// DEFAULT-NEXT:    [[SUB_I28_I_I:%.*]] = add i64 [[ADD_I27_I_I]], [[CONV5_I26_I_I]]
2643*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I29_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I15_I_I]], i64 1
2644369d8148SAlex MacLean// DEFAULT-NEXT:    br label [[CLEANUP_I20_I_I]]
2645369d8148SAlex MacLean// DEFAULT:       cleanup.i20.i.i:
2646369d8148SAlex MacLean// DEFAULT-NEXT:    [[__TAGP_ADDR_1_I21_I_I]] = phi ptr [ [[INCDEC_PTR_I29_I_I]], [[IF_THEN_I24_I_I]] ], [ [[__TAGP_ADDR_0_I15_I_I]], [[WHILE_BODY_I18_I_I]] ]
2647369d8148SAlex MacLean// DEFAULT-NEXT:    [[__R_1_I22_I_I]] = phi i64 [ [[SUB_I28_I_I]], [[IF_THEN_I24_I_I]] ], [ [[__R_0_I16_I_I]], [[WHILE_BODY_I18_I_I]] ]
2648369d8148SAlex MacLean// DEFAULT-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[WHILE_COND_I14_I_I]], label [[_ZL3NANPKC_EXIT]], !llvm.loop [[LOOP10]]
2649369d8148SAlex MacLean// DEFAULT:       _ZL3nanPKc.exit:
2650369d8148SAlex MacLean// DEFAULT-NEXT:    [[RETVAL_0_I_I:%.*]] = phi i64 [ 0, [[CLEANUP_I_I_I]] ], [ [[__R_0_I_I_I]], [[WHILE_COND_I_I_I]] ], [ 0, [[CLEANUP_I36_I_I]] ], [ [[__R_0_I32_I_I]], [[WHILE_COND_I30_I_I]] ], [ 0, [[CLEANUP_I20_I_I]] ], [ [[__R_0_I16_I_I]], [[WHILE_COND_I14_I_I]] ]
2651369d8148SAlex MacLean// DEFAULT-NEXT:    [[BF_VALUE_I:%.*]] = and i64 [[RETVAL_0_I_I]], 2251799813685247
2652369d8148SAlex MacLean// DEFAULT-NEXT:    [[BF_SET9_I:%.*]] = or disjoint i64 [[BF_VALUE_I]], 9221120237041090560
2653369d8148SAlex MacLean// DEFAULT-NEXT:    [[TMP10:%.*]] = bitcast i64 [[BF_SET9_I]] to double
2654369d8148SAlex MacLean// DEFAULT-NEXT:    ret double [[TMP10]]
2655369d8148SAlex MacLean//
2656369d8148SAlex MacLean// FINITEONLY-LABEL: @test_nan(
2657369d8148SAlex MacLean// FINITEONLY-NEXT:  entry:
2658369d8148SAlex MacLean// FINITEONLY-NEXT:    ret double poison
2659369d8148SAlex MacLean//
2660369d8148SAlex MacLean// APPROX-LABEL: @test_nan(
2661369d8148SAlex MacLean// APPROX-NEXT:  entry:
2662369d8148SAlex MacLean// APPROX-NEXT:    [[TMP0:%.*]] = load i8, ptr [[TAG:%.*]], align 1, !tbaa [[TBAA4]]
2663369d8148SAlex MacLean// APPROX-NEXT:    [[CMP_I_I:%.*]] = icmp eq i8 [[TMP0]], 48
2664369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[CMP_I_I]], label [[IF_THEN_I_I:%.*]], label [[WHILE_COND_I14_I_I:%.*]]
2665369d8148SAlex MacLean// APPROX:       if.then.i.i:
2666*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[TAG]], i64 1
2667369d8148SAlex MacLean// APPROX-NEXT:    [[TMP1:%.*]] = load i8, ptr [[INCDEC_PTR_I_I]], align 1, !tbaa [[TBAA4]]
2668369d8148SAlex MacLean// APPROX-NEXT:    switch i8 [[TMP1]], label [[WHILE_COND_I_I_I:%.*]] [
2669369d8148SAlex MacLean// APPROX-NEXT:      i8 120, label [[WHILE_COND_I30_I_I_PREHEADER:%.*]]
2670369d8148SAlex MacLean// APPROX-NEXT:      i8 88, label [[WHILE_COND_I30_I_I_PREHEADER]]
2671369d8148SAlex MacLean// APPROX-NEXT:    ]
2672369d8148SAlex MacLean// APPROX:       while.cond.i30.i.i.preheader:
2673369d8148SAlex MacLean// APPROX-NEXT:    br label [[WHILE_COND_I30_I_I:%.*]]
2674369d8148SAlex MacLean// APPROX:       while.cond.i30.i.i:
2675369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_0_I31_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I37_I_I:%.*]], [[CLEANUP_I36_I_I:%.*]] ], [ [[INCDEC_PTR_I_I]], [[WHILE_COND_I30_I_I_PREHEADER]] ]
2676369d8148SAlex MacLean// APPROX-NEXT:    [[__R_0_I32_I_I:%.*]] = phi i64 [ [[__R_2_I_I_I:%.*]], [[CLEANUP_I36_I_I]] ], [ 0, [[WHILE_COND_I30_I_I_PREHEADER]] ]
2677369d8148SAlex MacLean// APPROX-NEXT:    [[TMP2:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I31_I_I]], align 1, !tbaa [[TBAA4]]
2678369d8148SAlex MacLean// APPROX-NEXT:    [[CMP_NOT_I33_I_I:%.*]] = icmp eq i8 [[TMP2]], 0
2679369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[CMP_NOT_I33_I_I]], label [[_ZL3NANPKC_EXIT:%.*]], label [[WHILE_BODY_I34_I_I:%.*]]
2680369d8148SAlex MacLean// APPROX:       while.body.i34.i.i:
2681369d8148SAlex MacLean// APPROX-NEXT:    [[TMP3:%.*]] = add i8 [[TMP2]], -48
2682369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND_I35_I_I:%.*]] = icmp ult i8 [[TMP3]], 10
2683369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I35_I_I]], label [[IF_END31_I_I_I:%.*]], label [[IF_ELSE_I_I_I:%.*]]
2684369d8148SAlex MacLean// APPROX:       if.else.i.i.i:
2685369d8148SAlex MacLean// APPROX-NEXT:    [[TMP4:%.*]] = add i8 [[TMP2]], -97
2686369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND33_I_I_I:%.*]] = icmp ult i8 [[TMP4]], 6
2687369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND33_I_I_I]], label [[IF_END31_I_I_I]], label [[IF_ELSE17_I_I_I:%.*]]
2688369d8148SAlex MacLean// APPROX:       if.else17.i.i.i:
2689369d8148SAlex MacLean// APPROX-NEXT:    [[TMP5:%.*]] = add i8 [[TMP2]], -65
2690369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND34_I_I_I:%.*]] = icmp ult i8 [[TMP5]], 6
2691369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND34_I_I_I]], label [[IF_END31_I_I_I]], label [[CLEANUP_I36_I_I]]
2692369d8148SAlex MacLean// APPROX:       if.end31.i.i.i:
2693369d8148SAlex MacLean// APPROX-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I34_I_I]] ], [ -87, [[IF_ELSE_I_I_I]] ], [ -55, [[IF_ELSE17_I_I_I]] ]
2694369d8148SAlex MacLean// APPROX-NEXT:    [[MUL24_I_I_I:%.*]] = shl i64 [[__R_0_I32_I_I]], 4
2695369d8148SAlex MacLean// APPROX-NEXT:    [[CONV25_I_I_I:%.*]] = zext nneg i8 [[TMP2]] to i64
2696369d8148SAlex MacLean// APPROX-NEXT:    [[ADD26_I_I_I:%.*]] = add i64 [[MUL24_I_I_I]], [[DOTSINK]]
2697369d8148SAlex MacLean// APPROX-NEXT:    [[ADD28_I_I_I:%.*]] = add i64 [[ADD26_I_I_I]], [[CONV25_I_I_I]]
2698*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I40_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I31_I_I]], i64 1
2699369d8148SAlex MacLean// APPROX-NEXT:    br label [[CLEANUP_I36_I_I]]
2700369d8148SAlex MacLean// APPROX:       cleanup.i36.i.i:
2701369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_1_I37_I_I]] = phi ptr [ [[INCDEC_PTR_I40_I_I]], [[IF_END31_I_I_I]] ], [ [[__TAGP_ADDR_0_I31_I_I]], [[IF_ELSE17_I_I_I]] ]
2702369d8148SAlex MacLean// APPROX-NEXT:    [[__R_2_I_I_I]] = phi i64 [ [[ADD28_I_I_I]], [[IF_END31_I_I_I]] ], [ [[__R_0_I32_I_I]], [[IF_ELSE17_I_I_I]] ]
2703369d8148SAlex MacLean// APPROX-NEXT:    [[COND_I_I_I:%.*]] = phi i1 [ true, [[IF_END31_I_I_I]] ], [ false, [[IF_ELSE17_I_I_I]] ]
2704369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[COND_I_I_I]], label [[WHILE_COND_I30_I_I]], label [[_ZL3NANPKC_EXIT]], !llvm.loop [[LOOP11]]
2705369d8148SAlex MacLean// APPROX:       while.cond.i.i.i:
2706369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_0_I_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I_I_I:%.*]], [[CLEANUP_I_I_I:%.*]] ], [ [[INCDEC_PTR_I_I]], [[IF_THEN_I_I]] ]
2707369d8148SAlex MacLean// APPROX-NEXT:    [[__R_0_I_I_I:%.*]] = phi i64 [ [[__R_1_I_I_I:%.*]], [[CLEANUP_I_I_I]] ], [ 0, [[IF_THEN_I_I]] ]
2708369d8148SAlex MacLean// APPROX-NEXT:    [[TMP6:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I_I_I]], align 1, !tbaa [[TBAA4]]
2709369d8148SAlex MacLean// APPROX-NEXT:    [[CMP_NOT_I_I_I:%.*]] = icmp eq i8 [[TMP6]], 0
2710369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[CMP_NOT_I_I_I]], label [[_ZL3NANPKC_EXIT]], label [[WHILE_BODY_I_I_I:%.*]]
2711369d8148SAlex MacLean// APPROX:       while.body.i.i.i:
2712369d8148SAlex MacLean// APPROX-NEXT:    [[TMP7:%.*]] = and i8 [[TMP6]], -8
2713369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND_I_I_I:%.*]] = icmp eq i8 [[TMP7]], 48
2714369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I_I_I]], label [[IF_THEN_I_I_I:%.*]], label [[CLEANUP_I_I_I]]
2715369d8148SAlex MacLean// APPROX:       if.then.i.i.i:
2716369d8148SAlex MacLean// APPROX-NEXT:    [[MUL_I_I_I:%.*]] = shl i64 [[__R_0_I_I_I]], 3
2717369d8148SAlex MacLean// APPROX-NEXT:    [[CONV5_I_I_I:%.*]] = zext nneg i8 [[TMP6]] to i64
2718369d8148SAlex MacLean// APPROX-NEXT:    [[ADD_I_I_I:%.*]] = add i64 [[MUL_I_I_I]], -48
2719369d8148SAlex MacLean// APPROX-NEXT:    [[SUB_I_I_I:%.*]] = add i64 [[ADD_I_I_I]], [[CONV5_I_I_I]]
2720*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I_I_I]], i64 1
2721369d8148SAlex MacLean// APPROX-NEXT:    br label [[CLEANUP_I_I_I]]
2722369d8148SAlex MacLean// APPROX:       cleanup.i.i.i:
2723369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_1_I_I_I]] = phi ptr [ [[INCDEC_PTR_I_I_I]], [[IF_THEN_I_I_I]] ], [ [[__TAGP_ADDR_0_I_I_I]], [[WHILE_BODY_I_I_I]] ]
2724369d8148SAlex MacLean// APPROX-NEXT:    [[__R_1_I_I_I]] = phi i64 [ [[SUB_I_I_I]], [[IF_THEN_I_I_I]] ], [ [[__R_0_I_I_I]], [[WHILE_BODY_I_I_I]] ]
2725369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I_I_I]], label [[WHILE_COND_I_I_I]], label [[_ZL3NANPKC_EXIT]], !llvm.loop [[LOOP7]]
2726369d8148SAlex MacLean// APPROX:       while.cond.i14.i.i:
2727369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_0_I15_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I21_I_I:%.*]], [[CLEANUP_I20_I_I:%.*]] ], [ [[TAG]], [[ENTRY:%.*]] ]
2728369d8148SAlex MacLean// APPROX-NEXT:    [[__R_0_I16_I_I:%.*]] = phi i64 [ [[__R_1_I22_I_I:%.*]], [[CLEANUP_I20_I_I]] ], [ 0, [[ENTRY]] ]
2729369d8148SAlex MacLean// APPROX-NEXT:    [[TMP8:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I15_I_I]], align 1, !tbaa [[TBAA4]]
2730369d8148SAlex MacLean// APPROX-NEXT:    [[CMP_NOT_I17_I_I:%.*]] = icmp eq i8 [[TMP8]], 0
2731369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[CMP_NOT_I17_I_I]], label [[_ZL3NANPKC_EXIT]], label [[WHILE_BODY_I18_I_I:%.*]]
2732369d8148SAlex MacLean// APPROX:       while.body.i18.i.i:
2733369d8148SAlex MacLean// APPROX-NEXT:    [[TMP9:%.*]] = add i8 [[TMP8]], -48
2734369d8148SAlex MacLean// APPROX-NEXT:    [[OR_COND_I19_I_I:%.*]] = icmp ult i8 [[TMP9]], 10
2735369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[IF_THEN_I24_I_I:%.*]], label [[CLEANUP_I20_I_I]]
2736369d8148SAlex MacLean// APPROX:       if.then.i24.i.i:
2737369d8148SAlex MacLean// APPROX-NEXT:    [[MUL_I25_I_I:%.*]] = mul i64 [[__R_0_I16_I_I]], 10
2738369d8148SAlex MacLean// APPROX-NEXT:    [[CONV5_I26_I_I:%.*]] = zext nneg i8 [[TMP8]] to i64
2739369d8148SAlex MacLean// APPROX-NEXT:    [[ADD_I27_I_I:%.*]] = add i64 [[MUL_I25_I_I]], -48
2740369d8148SAlex MacLean// APPROX-NEXT:    [[SUB_I28_I_I:%.*]] = add i64 [[ADD_I27_I_I]], [[CONV5_I26_I_I]]
2741*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I29_I_I:%.*]] = getelementptr inbounds nuw i8, ptr [[__TAGP_ADDR_0_I15_I_I]], i64 1
2742369d8148SAlex MacLean// APPROX-NEXT:    br label [[CLEANUP_I20_I_I]]
2743369d8148SAlex MacLean// APPROX:       cleanup.i20.i.i:
2744369d8148SAlex MacLean// APPROX-NEXT:    [[__TAGP_ADDR_1_I21_I_I]] = phi ptr [ [[INCDEC_PTR_I29_I_I]], [[IF_THEN_I24_I_I]] ], [ [[__TAGP_ADDR_0_I15_I_I]], [[WHILE_BODY_I18_I_I]] ]
2745369d8148SAlex MacLean// APPROX-NEXT:    [[__R_1_I22_I_I]] = phi i64 [ [[SUB_I28_I_I]], [[IF_THEN_I24_I_I]] ], [ [[__R_0_I16_I_I]], [[WHILE_BODY_I18_I_I]] ]
2746369d8148SAlex MacLean// APPROX-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[WHILE_COND_I14_I_I]], label [[_ZL3NANPKC_EXIT]], !llvm.loop [[LOOP10]]
2747369d8148SAlex MacLean// APPROX:       _ZL3nanPKc.exit:
2748369d8148SAlex MacLean// APPROX-NEXT:    [[RETVAL_0_I_I:%.*]] = phi i64 [ 0, [[CLEANUP_I_I_I]] ], [ [[__R_0_I_I_I]], [[WHILE_COND_I_I_I]] ], [ 0, [[CLEANUP_I36_I_I]] ], [ [[__R_0_I32_I_I]], [[WHILE_COND_I30_I_I]] ], [ 0, [[CLEANUP_I20_I_I]] ], [ [[__R_0_I16_I_I]], [[WHILE_COND_I14_I_I]] ]
2749369d8148SAlex MacLean// APPROX-NEXT:    [[BF_VALUE_I:%.*]] = and i64 [[RETVAL_0_I_I]], 2251799813685247
2750369d8148SAlex MacLean// APPROX-NEXT:    [[BF_SET9_I:%.*]] = or disjoint i64 [[BF_VALUE_I]], 9221120237041090560
2751369d8148SAlex MacLean// APPROX-NEXT:    [[TMP10:%.*]] = bitcast i64 [[BF_SET9_I]] to double
2752369d8148SAlex MacLean// APPROX-NEXT:    ret double [[TMP10]]
27532edafe83SMatt Arsenault//
27542edafe83SMatt Arsenaultextern "C" __device__ double test_nan(const char *tag) {
27552edafe83SMatt Arsenault  return nan(tag);
27562edafe83SMatt Arsenault}
27572edafe83SMatt Arsenault
27589dd2c593SMatt Arsenault// DEFAULT-LABEL: @test_nanf_emptystr(
27599dd2c593SMatt Arsenault// DEFAULT-NEXT:  entry:
27609dd2c593SMatt Arsenault// DEFAULT-NEXT:    ret float 0x7FF8000000000000
27619dd2c593SMatt Arsenault//
27629dd2c593SMatt Arsenault// FINITEONLY-LABEL: @test_nanf_emptystr(
27639dd2c593SMatt Arsenault// FINITEONLY-NEXT:  entry:
27649dd2c593SMatt Arsenault// FINITEONLY-NEXT:    ret float poison
27659dd2c593SMatt Arsenault//
27669dd2c593SMatt Arsenault// APPROX-LABEL: @test_nanf_emptystr(
27679dd2c593SMatt Arsenault// APPROX-NEXT:  entry:
27689dd2c593SMatt Arsenault// APPROX-NEXT:    ret float 0x7FF8000000000000
27692edafe83SMatt Arsenault//
27702edafe83SMatt Arsenaultextern "C" __device__ float test_nanf_emptystr() {
27712edafe83SMatt Arsenault  return nanf("");
27722edafe83SMatt Arsenault}
27732edafe83SMatt Arsenault
27749dd2c593SMatt Arsenault// DEFAULT-LABEL: @test_nan_emptystr(
27759dd2c593SMatt Arsenault// DEFAULT-NEXT:  entry:
27769dd2c593SMatt Arsenault// DEFAULT-NEXT:    ret double 0x7FF8000000000000
27779dd2c593SMatt Arsenault//
27789dd2c593SMatt Arsenault// FINITEONLY-LABEL: @test_nan_emptystr(
27799dd2c593SMatt Arsenault// FINITEONLY-NEXT:  entry:
27809dd2c593SMatt Arsenault// FINITEONLY-NEXT:    ret double poison
27819dd2c593SMatt Arsenault//
27829dd2c593SMatt Arsenault// APPROX-LABEL: @test_nan_emptystr(
27839dd2c593SMatt Arsenault// APPROX-NEXT:  entry:
27849dd2c593SMatt Arsenault// APPROX-NEXT:    ret double 0x7FF8000000000000
27852edafe83SMatt Arsenault//
27862edafe83SMatt Arsenaultextern "C" __device__ double test_nan_emptystr() {
27872edafe83SMatt Arsenault  return nan("");
27882edafe83SMatt Arsenault}
27892edafe83SMatt Arsenault
27909dd2c593SMatt Arsenault// DEFAULT-LABEL: @test_nanf_fill(
27919dd2c593SMatt Arsenault// DEFAULT-NEXT:  entry:
27929dd2c593SMatt Arsenault// DEFAULT-NEXT:    ret float 0x7FF8000000000000
27939dd2c593SMatt Arsenault//
27949dd2c593SMatt Arsenault// FINITEONLY-LABEL: @test_nanf_fill(
27959dd2c593SMatt Arsenault// FINITEONLY-NEXT:  entry:
27969dd2c593SMatt Arsenault// FINITEONLY-NEXT:    ret float poison
27979dd2c593SMatt Arsenault//
27989dd2c593SMatt Arsenault// APPROX-LABEL: @test_nanf_fill(
27999dd2c593SMatt Arsenault// APPROX-NEXT:  entry:
28009dd2c593SMatt Arsenault// APPROX-NEXT:    ret float 0x7FF8000000000000
28012edafe83SMatt Arsenault//
28022edafe83SMatt Arsenaultextern "C" __device__ float test_nanf_fill() {
28032edafe83SMatt Arsenault  return nanf("0x456");
28042edafe83SMatt Arsenault}
28052edafe83SMatt Arsenault
28069dd2c593SMatt Arsenault// DEFAULT-LABEL: @test_nan_fill(
28079dd2c593SMatt Arsenault// DEFAULT-NEXT:  entry:
28089dd2c593SMatt Arsenault// DEFAULT-NEXT:    ret double 0x7FF8000000000000
28099dd2c593SMatt Arsenault//
28109dd2c593SMatt Arsenault// FINITEONLY-LABEL: @test_nan_fill(
28119dd2c593SMatt Arsenault// FINITEONLY-NEXT:  entry:
28129dd2c593SMatt Arsenault// FINITEONLY-NEXT:    ret double poison
28139dd2c593SMatt Arsenault//
28149dd2c593SMatt Arsenault// APPROX-LABEL: @test_nan_fill(
28159dd2c593SMatt Arsenault// APPROX-NEXT:  entry:
28169dd2c593SMatt Arsenault// APPROX-NEXT:    ret double 0x7FF8000000000000
28172edafe83SMatt Arsenault//
28182edafe83SMatt Arsenaultextern "C" __device__ double test_nan_fill() {
28192edafe83SMatt Arsenault  return nan("0x123");
28202edafe83SMatt Arsenault}
28212edafe83SMatt Arsenault
28222edafe83SMatt Arsenault// DEFAULT-LABEL: @test_nearbyintf(
28232edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
28242da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.nearbyint.f32(float [[X:%.*]])
2825e7ab6982SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
28262edafe83SMatt Arsenault//
28272edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_nearbyintf(
28282edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
28292da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.nearbyint.f32(float [[X:%.*]])
2830e7ab6982SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
28312edafe83SMatt Arsenault//
2832a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_nearbyintf(
2833a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
28342da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.nearbyint.f32(float [[X:%.*]])
2835a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
2836a0709e22SYaxun (Sam) Liu//
28372edafe83SMatt Arsenaultextern "C" __device__ float test_nearbyintf(float x) {
28382edafe83SMatt Arsenault  return nearbyintf(x);
28392edafe83SMatt Arsenault}
28402edafe83SMatt Arsenault
28412edafe83SMatt Arsenault// DEFAULT-LABEL: @test_nearbyint(
28422edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
28432da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.nearbyint.f64(double [[X:%.*]])
2844e7ab6982SMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
28452edafe83SMatt Arsenault//
28462edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_nearbyint(
28472edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
28482da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.nearbyint.f64(double [[X:%.*]])
2849e7ab6982SMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
28502edafe83SMatt Arsenault//
2851a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_nearbyint(
2852a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
28532da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.nearbyint.f64(double [[X:%.*]])
2854a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
2855a0709e22SYaxun (Sam) Liu//
28562edafe83SMatt Arsenaultextern "C" __device__ double test_nearbyint(double x) {
28572edafe83SMatt Arsenault  return nearbyint(x);
28582edafe83SMatt Arsenault}
28592edafe83SMatt Arsenault
28602edafe83SMatt Arsenault// DEFAULT-LABEL: @test_nextafterf(
28612edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2862a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_nextafter_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
28632edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
28642edafe83SMatt Arsenault//
28652edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_nextafterf(
28662edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2867a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_nextafter_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
28682edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
28692edafe83SMatt Arsenault//
2870a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_nextafterf(
2871a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2872a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_nextafter_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
2873a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
2874a0709e22SYaxun (Sam) Liu//
28752edafe83SMatt Arsenaultextern "C" __device__ float test_nextafterf(float x, float y) {
28762edafe83SMatt Arsenault  return nextafterf(x, y);
28772edafe83SMatt Arsenault}
28782edafe83SMatt Arsenault
28792edafe83SMatt Arsenault// DEFAULT-LABEL: @test_nextafter(
28802edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2881a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_nextafter_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
28822edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
28832edafe83SMatt Arsenault//
28842edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_nextafter(
28852edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2886a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_nextafter_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
28872edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
28882edafe83SMatt Arsenault//
2889a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_nextafter(
2890a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2891a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_nextafter_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
2892a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
2893a0709e22SYaxun (Sam) Liu//
28942edafe83SMatt Arsenaultextern "C" __device__ double test_nextafter(double x, double y) {
28952edafe83SMatt Arsenault  return nextafter(x, y);
28962edafe83SMatt Arsenault}
28972edafe83SMatt Arsenault
28982edafe83SMatt Arsenault// DEFAULT-LABEL: @test_norm3df(
28992edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2900a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_len3_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]]) #[[ATTR12]]
29012edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
29022edafe83SMatt Arsenault//
29032edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_norm3df(
29042edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2905a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_len3_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]], float noundef nofpclass(nan inf) [[Z:%.*]]) #[[ATTR12]]
29062edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
29072edafe83SMatt Arsenault//
2908a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_norm3df(
2909a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2910a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_len3_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]]) #[[ATTR12]]
2911a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
2912a0709e22SYaxun (Sam) Liu//
29132edafe83SMatt Arsenaultextern "C" __device__ float test_norm3df(float x, float y, float z) {
29142edafe83SMatt Arsenault  return norm3df(x, y, z);
29152edafe83SMatt Arsenault}
29162edafe83SMatt Arsenault
29172edafe83SMatt Arsenault// DEFAULT-LABEL: @test_norm3d(
29182edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2919a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_len3_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]]) #[[ATTR12]]
29202edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
29212edafe83SMatt Arsenault//
29222edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_norm3d(
29232edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2924a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_len3_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]], double noundef nofpclass(nan inf) [[Z:%.*]]) #[[ATTR12]]
29252edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
29262edafe83SMatt Arsenault//
2927a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_norm3d(
2928a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2929a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_len3_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]]) #[[ATTR12]]
2930a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
2931a0709e22SYaxun (Sam) Liu//
29322edafe83SMatt Arsenaultextern "C" __device__ double test_norm3d(double x, double y, double z) {
29332edafe83SMatt Arsenault  return norm3d(x, y, z);
29342edafe83SMatt Arsenault}
29352edafe83SMatt Arsenault
29362edafe83SMatt Arsenault// DEFAULT-LABEL: @test_norm4df(
29372edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2938a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_len4_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]], float noundef [[W:%.*]]) #[[ATTR12]]
29392edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
29402edafe83SMatt Arsenault//
29412edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_norm4df(
29422edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2943a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_len4_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]], float noundef nofpclass(nan inf) [[Z:%.*]], float noundef nofpclass(nan inf) [[W:%.*]]) #[[ATTR12]]
29442edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
29452edafe83SMatt Arsenault//
2946a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_norm4df(
2947a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2948a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_len4_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]], float noundef [[W:%.*]]) #[[ATTR12]]
2949a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
2950a0709e22SYaxun (Sam) Liu//
29512edafe83SMatt Arsenaultextern "C" __device__ float test_norm4df(float x, float y, float z, float w) {
29522edafe83SMatt Arsenault  return norm4df(x, y, z, w);
29532edafe83SMatt Arsenault}
29542edafe83SMatt Arsenault
29552edafe83SMatt Arsenault// DEFAULT-LABEL: @test_norm4d(
29562edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2957a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_len4_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]], double noundef [[W:%.*]]) #[[ATTR12]]
29582edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
29592edafe83SMatt Arsenault//
29602edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_norm4d(
29612edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2962a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_len4_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]], double noundef nofpclass(nan inf) [[Z:%.*]], double noundef nofpclass(nan inf) [[W:%.*]]) #[[ATTR12]]
29632edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
29642edafe83SMatt Arsenault//
2965a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_norm4d(
2966a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2967a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_len4_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]], double noundef [[W:%.*]]) #[[ATTR12]]
2968a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
2969a0709e22SYaxun (Sam) Liu//
29702edafe83SMatt Arsenaultextern "C" __device__ double test_norm4d(double x, double y, double z, double w) {
29712edafe83SMatt Arsenault  return norm4d(x, y, z, w);
29722edafe83SMatt Arsenault}
29732edafe83SMatt Arsenault
29742edafe83SMatt Arsenault// DEFAULT-LABEL: @test_normcdff(
29752edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2976a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_ncdf_f32(float noundef [[X:%.*]]) #[[ATTR13]]
29772edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
29782edafe83SMatt Arsenault//
29792edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_normcdff(
29802edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
2981a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_ncdf_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
29822edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
29832edafe83SMatt Arsenault//
2984a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_normcdff(
2985a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
2986a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_ncdf_f32(float noundef [[X:%.*]]) #[[ATTR13]]
2987a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
2988a0709e22SYaxun (Sam) Liu//
29892edafe83SMatt Arsenaultextern "C" __device__ float test_normcdff(float x) {
29902edafe83SMatt Arsenault  return normcdff(x);
29912edafe83SMatt Arsenault}
29922edafe83SMatt Arsenault
29932edafe83SMatt Arsenault// DEFAULT-LABEL: @test_normcdf(
29942edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
2995a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_ncdf_f64(double noundef [[X:%.*]]) #[[ATTR13]]
29962edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
29972edafe83SMatt Arsenault//
29982edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_normcdf(
29992edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3000a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_ncdf_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
30012edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
30022edafe83SMatt Arsenault//
3003a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_normcdf(
3004a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3005a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_ncdf_f64(double noundef [[X:%.*]]) #[[ATTR13]]
3006a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3007a0709e22SYaxun (Sam) Liu//
30082edafe83SMatt Arsenaultextern "C" __device__ double test_normcdf(double x) {
30092edafe83SMatt Arsenault  return normcdf(x);
30102edafe83SMatt Arsenault}
30112edafe83SMatt Arsenault
30122edafe83SMatt Arsenault// DEFAULT-LABEL: @test_normcdfinvf(
30132edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3014a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_ncdfinv_f32(float noundef [[X:%.*]]) #[[ATTR13]]
30152edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
30162edafe83SMatt Arsenault//
30172edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_normcdfinvf(
30182edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3019a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_ncdfinv_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
30202edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
30212edafe83SMatt Arsenault//
3022a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_normcdfinvf(
3023a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3024a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_ncdfinv_f32(float noundef [[X:%.*]]) #[[ATTR13]]
3025a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3026a0709e22SYaxun (Sam) Liu//
30272edafe83SMatt Arsenaultextern "C" __device__ float test_normcdfinvf(float x) {
30282edafe83SMatt Arsenault  return normcdfinvf(x);
30292edafe83SMatt Arsenault}
30302edafe83SMatt Arsenault
30312edafe83SMatt Arsenault// DEFAULT-LABEL: @test_normcdfinv(
30322edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3033a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_ncdfinv_f64(double noundef [[X:%.*]]) #[[ATTR13]]
30342edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
30352edafe83SMatt Arsenault//
30362edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_normcdfinv(
30372edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3038a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_ncdfinv_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
30392edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
30402edafe83SMatt Arsenault//
3041a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_normcdfinv(
3042a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3043a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_ncdfinv_f64(double noundef [[X:%.*]]) #[[ATTR13]]
3044a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3045a0709e22SYaxun (Sam) Liu//
30462edafe83SMatt Arsenaultextern "C" __device__ double test_normcdfinv(double x) {
30472edafe83SMatt Arsenault  return normcdfinv(x);
30482edafe83SMatt Arsenault}
30492edafe83SMatt Arsenault
30502edafe83SMatt Arsenault// DEFAULT-LABEL: @test_normf(
30512edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
30521a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
30531a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5NORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
30542edafe83SMatt Arsenault// DEFAULT:       while.body.i:
30551a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
30561a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
30571a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
30581a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
30591a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
30602edafe83SMatt Arsenault// DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[TMP0]], [[TMP0]]
30611a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[ADD_I]] = fadd contract float [[__R_0_I4]], [[MUL_I]]
3062*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 4
30632edafe83SMatt Arsenault// DEFAULT-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3064b57e049fSMatt Arsenault// DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5NORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP20:![0-9]+]]
30652edafe83SMatt Arsenault// DEFAULT:       _ZL5normfiPKf.exit:
30661a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
30671a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TMP1:%.*]] = tail call contract noundef float @llvm.sqrt.f32(float [[__R_0_I_LCSSA]])
3068bca12556SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP1]]
30692edafe83SMatt Arsenault//
30702edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_normf(
30712edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
30721a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
30731a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5NORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
30742edafe83SMatt Arsenault// FINITEONLY:       while.body.i:
30751a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
30761a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
30771a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
30781a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
30791a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
30802edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[TMP0]], [[TMP0]]
30811a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[ADD_I]] = fadd nnan ninf contract float [[__R_0_I4]], [[MUL_I]]
3082*7eca38ceSHari Limaye// FINITEONLY-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 4
30832edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3084b57e049fSMatt Arsenault// FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5NORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP20:![0-9]+]]
30852edafe83SMatt Arsenault// FINITEONLY:       _ZL5normfiPKf.exit:
30861a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
30871a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TMP1:%.*]] = tail call nnan ninf contract noundef float @llvm.sqrt.f32(float [[__R_0_I_LCSSA]])
3088bca12556SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP1]]
30892edafe83SMatt Arsenault//
3090a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_normf(
3091a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
30921a2e77cfSAmara Emerson// APPROX-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
30931a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5NORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3094a0709e22SYaxun (Sam) Liu// APPROX:       while.body.i:
30951a2e77cfSAmara Emerson// APPROX-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
30961a2e77cfSAmara Emerson// APPROX-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
30971a2e77cfSAmara Emerson// APPROX-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
30981a2e77cfSAmara Emerson// APPROX-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
30991a2e77cfSAmara Emerson// APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
3100a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[TMP0]], [[TMP0]]
31011a2e77cfSAmara Emerson// APPROX-NEXT:    [[ADD_I]] = fadd contract float [[__R_0_I4]], [[MUL_I]]
3102*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 4
3103a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3104a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5NORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP20:![0-9]+]]
3105a0709e22SYaxun (Sam) Liu// APPROX:       _ZL5normfiPKf.exit:
31061a2e77cfSAmara Emerson// APPROX-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
31071a2e77cfSAmara Emerson// APPROX-NEXT:    [[TMP1:%.*]] = tail call contract noundef float @llvm.sqrt.f32(float [[__R_0_I_LCSSA]])
3108bca12556SMatt Arsenault// APPROX-NEXT:    ret float [[TMP1]]
3109a0709e22SYaxun (Sam) Liu//
31102edafe83SMatt Arsenaultextern "C" __device__ float test_normf(int x, const float *y) {
31112edafe83SMatt Arsenault  return normf(x, y);
31122edafe83SMatt Arsenault}
31132edafe83SMatt Arsenault
31142edafe83SMatt Arsenault// DEFAULT-LABEL: @test_norm(
31152edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
31161a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
31171a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL4NORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
31182edafe83SMatt Arsenault// DEFAULT:       while.body.i:
31191a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
31201a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
31211a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
31221a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
31231a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
31242edafe83SMatt Arsenault// DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract double [[TMP0]], [[TMP0]]
31251a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[ADD_I]] = fadd contract double [[__R_0_I4]], [[MUL_I]]
3126*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 8
31272edafe83SMatt Arsenault// DEFAULT-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3128b57e049fSMatt Arsenault// DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL4NORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP21:![0-9]+]]
31292edafe83SMatt Arsenault// DEFAULT:       _ZL4normiPKd.exit:
31301a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
31311a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TMP1:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[__R_0_I_LCSSA]])
313263dbe7e8SMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP1]]
31332edafe83SMatt Arsenault//
31342edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_norm(
31352edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
31361a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
31371a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL4NORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
31382edafe83SMatt Arsenault// FINITEONLY:       while.body.i:
31391a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
31401a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
31411a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
31421a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
31431a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
31442edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract double [[TMP0]], [[TMP0]]
31451a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[ADD_I]] = fadd nnan ninf contract double [[__R_0_I4]], [[MUL_I]]
3146*7eca38ceSHari Limaye// FINITEONLY-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 8
31472edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3148b57e049fSMatt Arsenault// FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL4NORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP21:![0-9]+]]
31492edafe83SMatt Arsenault// FINITEONLY:       _ZL4normiPKd.exit:
31501a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
31511a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TMP1:%.*]] = tail call nnan ninf contract noundef double @llvm.sqrt.f64(double [[__R_0_I_LCSSA]])
315263dbe7e8SMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP1]]
31532edafe83SMatt Arsenault//
3154a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_norm(
3155a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
31561a2e77cfSAmara Emerson// APPROX-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
31571a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL4NORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3158a0709e22SYaxun (Sam) Liu// APPROX:       while.body.i:
31591a2e77cfSAmara Emerson// APPROX-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
31601a2e77cfSAmara Emerson// APPROX-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
31611a2e77cfSAmara Emerson// APPROX-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
31621a2e77cfSAmara Emerson// APPROX-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
31631a2e77cfSAmara Emerson// APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
3164a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract double [[TMP0]], [[TMP0]]
31651a2e77cfSAmara Emerson// APPROX-NEXT:    [[ADD_I]] = fadd contract double [[__R_0_I4]], [[MUL_I]]
3166*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 8
3167a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3168a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL4NORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP21:![0-9]+]]
3169a0709e22SYaxun (Sam) Liu// APPROX:       _ZL4normiPKd.exit:
31701a2e77cfSAmara Emerson// APPROX-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
31711a2e77cfSAmara Emerson// APPROX-NEXT:    [[TMP1:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[__R_0_I_LCSSA]])
317263dbe7e8SMatt Arsenault// APPROX-NEXT:    ret double [[TMP1]]
3173a0709e22SYaxun (Sam) Liu//
31742edafe83SMatt Arsenaultextern "C" __device__ double test_norm(int x, const double *y) {
31752edafe83SMatt Arsenault  return norm(x, y);
31762edafe83SMatt Arsenault}
31772edafe83SMatt Arsenault
31782edafe83SMatt Arsenault// DEFAULT-LABEL: @test_powf(
31792edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3180a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pow_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR13]]
31812edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
31822edafe83SMatt Arsenault//
31832edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_powf(
31842edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3185a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_pow_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR13]]
31862edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
31872edafe83SMatt Arsenault//
3188a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_powf(
3189a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3190a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pow_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR13]]
3191a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3192a0709e22SYaxun (Sam) Liu//
31932edafe83SMatt Arsenaultextern "C" __device__ float test_powf(float x, float y) {
31942edafe83SMatt Arsenault  return powf(x, y);
31952edafe83SMatt Arsenault}
31962edafe83SMatt Arsenault
31972edafe83SMatt Arsenault// DEFAULT-LABEL: @test_pow(
31982edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3199a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_pow_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR13]]
32002edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
32012edafe83SMatt Arsenault//
32022edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_pow(
32032edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3204a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_pow_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR13]]
32052edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
32062edafe83SMatt Arsenault//
3207a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_pow(
3208a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3209a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_pow_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR13]]
3210a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3211a0709e22SYaxun (Sam) Liu//
32122edafe83SMatt Arsenaultextern "C" __device__ double test_pow(double x, double y) {
32132edafe83SMatt Arsenault  return pow(x, y);
32142edafe83SMatt Arsenault}
32152edafe83SMatt Arsenault
32162edafe83SMatt Arsenault// DEFAULT-LABEL: @test_powif(
32172edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3218a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pown_f32(float noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR13]]
32192edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
32202edafe83SMatt Arsenault//
32212edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_powif(
32222edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3223a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_pown_f32(float noundef nofpclass(nan inf) [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR13]]
32242edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
32252edafe83SMatt Arsenault//
3226a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_powif(
3227a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3228a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pown_f32(float noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR13]]
3229a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3230a0709e22SYaxun (Sam) Liu//
32312edafe83SMatt Arsenaultextern "C" __device__ float test_powif(float x, int y) {
32322edafe83SMatt Arsenault  return powif(x, y);
32332edafe83SMatt Arsenault}
32342edafe83SMatt Arsenault
32352edafe83SMatt Arsenault// DEFAULT-LABEL: @test_powi(
32362edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3237a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_pown_f64(double noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR13]]
32382edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
32392edafe83SMatt Arsenault//
32402edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_powi(
32412edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3242a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_pown_f64(double noundef nofpclass(nan inf) [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR13]]
32432edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
32442edafe83SMatt Arsenault//
3245a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_powi(
3246a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3247a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_pown_f64(double noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR13]]
3248a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3249a0709e22SYaxun (Sam) Liu//
32502edafe83SMatt Arsenaultextern "C" __device__ double test_powi(double x, int y) {
32512edafe83SMatt Arsenault  return powi(x, y);
32522edafe83SMatt Arsenault}
32532edafe83SMatt Arsenault
32542edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rcbrtf(
32552edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3256a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rcbrt_f32(float noundef [[X:%.*]]) #[[ATTR13]]
32572edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
32582edafe83SMatt Arsenault//
32592edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rcbrtf(
32602edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3261a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_rcbrt_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
32622edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
32632edafe83SMatt Arsenault//
3264a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rcbrtf(
3265a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3266a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rcbrt_f32(float noundef [[X:%.*]]) #[[ATTR13]]
3267a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3268a0709e22SYaxun (Sam) Liu//
32692edafe83SMatt Arsenaultextern "C" __device__ float test_rcbrtf(float x) {
32702edafe83SMatt Arsenault  return rcbrtf(x);
32712edafe83SMatt Arsenault}
32722edafe83SMatt Arsenault
32732edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rcbrt(
32742edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3275a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rcbrt_f64(double noundef [[X:%.*]]) #[[ATTR13]]
32762edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
32772edafe83SMatt Arsenault//
32782edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rcbrt(
32792edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3280a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_rcbrt_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
32812edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
32822edafe83SMatt Arsenault//
3283a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rcbrt(
3284a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3285a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rcbrt_f64(double noundef [[X:%.*]]) #[[ATTR13]]
3286a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3287a0709e22SYaxun (Sam) Liu//
32882edafe83SMatt Arsenaultextern "C" __device__ double test_rcbrt(double x) {
32892edafe83SMatt Arsenault  return rcbrt(x);
32902edafe83SMatt Arsenault}
32912edafe83SMatt Arsenault
32922edafe83SMatt Arsenault// DEFAULT-LABEL: @test_remainderf(
32932edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3294a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_remainder_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
32952edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
32962edafe83SMatt Arsenault//
32972edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_remainderf(
32982edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3299a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_remainder_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
33002edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
33012edafe83SMatt Arsenault//
3302a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_remainderf(
3303a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3304a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_remainder_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
3305a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3306a0709e22SYaxun (Sam) Liu//
33072edafe83SMatt Arsenaultextern "C" __device__ float test_remainderf(float x, float y) {
33082edafe83SMatt Arsenault  return remainderf(x, y);
33092edafe83SMatt Arsenault}
33102edafe83SMatt Arsenault
33112edafe83SMatt Arsenault// DEFAULT-LABEL: @test_remainder(
33122edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3313a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_remainder_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
33142edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
33152edafe83SMatt Arsenault//
33162edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_remainder(
33172edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3318a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_remainder_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
33192edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
33202edafe83SMatt Arsenault//
3321a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_remainder(
3322a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3323a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_remainder_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
3324a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3325a0709e22SYaxun (Sam) Liu//
33262edafe83SMatt Arsenaultextern "C" __device__ double test_remainder(double x, double y) {
33272edafe83SMatt Arsenault  return remainder(x, y);
33282edafe83SMatt Arsenault}
33292edafe83SMatt Arsenault
33302edafe83SMatt Arsenault// DEFAULT-LABEL: @test_remquof(
33312edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
33322edafe83SMatt Arsenault// DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3333a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3334a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract noundef float @__ocml_remquo_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3335b57e049fSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3336b57e049fSMatt Arsenault// DEFAULT-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3337a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
33382edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
33392edafe83SMatt Arsenault//
33402edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_remquof(
33412edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
33422edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3343a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3344a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_remquo_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3345b57e049fSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3346b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3347a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
33482edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
33492edafe83SMatt Arsenault//
3350a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_remquof(
3351a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3352a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3353a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3354a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = call contract noundef float @__ocml_remquo_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3355a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3356a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3357a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3358a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3359a0709e22SYaxun (Sam) Liu//
33602edafe83SMatt Arsenaultextern "C" __device__ float test_remquof(float x, float y, int* z) {
33612edafe83SMatt Arsenault  return remquof(x, y, z);
33622edafe83SMatt Arsenault}
33632edafe83SMatt Arsenault
33642edafe83SMatt Arsenault// DEFAULT-LABEL: @test_remquo(
33652edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
33662edafe83SMatt Arsenault// DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3367a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3368a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract noundef double @__ocml_remquo_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3369b57e049fSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3370b57e049fSMatt Arsenault// DEFAULT-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3371a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
33722edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
33732edafe83SMatt Arsenault//
33742edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_remquo(
33752edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
33762edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3377a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3378a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_remquo_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3379b57e049fSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3380b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3381a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
33822edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
33832edafe83SMatt Arsenault//
3384a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_remquo(
3385a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3386a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3387a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3388a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = call contract noundef double @__ocml_remquo_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3389a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3390a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3391a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3392a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3393a0709e22SYaxun (Sam) Liu//
33942edafe83SMatt Arsenaultextern "C" __device__ double test_remquo(double x, double y, int* z) {
33952edafe83SMatt Arsenault  return remquo(x, y, z);
33962edafe83SMatt Arsenault}
33972edafe83SMatt Arsenault
33982edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rhypotf(
33992edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3400a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rhypot_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
34012edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
34022edafe83SMatt Arsenault//
34032edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rhypotf(
34042edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3405a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_rhypot_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
34062edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
34072edafe83SMatt Arsenault//
3408a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rhypotf(
3409a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3410a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rhypot_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR12]]
3411a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3412a0709e22SYaxun (Sam) Liu//
34132edafe83SMatt Arsenaultextern "C" __device__ float test_rhypotf(float x, float y) {
34142edafe83SMatt Arsenault  return rhypotf(x, y);
34152edafe83SMatt Arsenault}
34162edafe83SMatt Arsenault
34172edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rhypot(
34182edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3419a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rhypot_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
34202edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
34212edafe83SMatt Arsenault//
34222edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rhypot(
34232edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3424a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_rhypot_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR12]]
34252edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
34262edafe83SMatt Arsenault//
3427a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rhypot(
3428a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3429a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rhypot_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR12]]
3430a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3431a0709e22SYaxun (Sam) Liu//
34322edafe83SMatt Arsenaultextern "C" __device__ double test_rhypot(double x, double y) {
34332edafe83SMatt Arsenault  return rhypot(x, y);
34342edafe83SMatt Arsenault}
34352edafe83SMatt Arsenault
34362edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rintf(
34372edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
34382da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.rint.f32(float [[X:%.*]])
343971be91ebSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
34402edafe83SMatt Arsenault//
34412edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rintf(
34422edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
34432da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.rint.f32(float [[X:%.*]])
344471be91ebSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
34452edafe83SMatt Arsenault//
3446a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rintf(
3447a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
34482da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.rint.f32(float [[X:%.*]])
3449a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
3450a0709e22SYaxun (Sam) Liu//
34512edafe83SMatt Arsenaultextern "C" __device__ float test_rintf(float x) {
34522edafe83SMatt Arsenault  return rintf(x);
34532edafe83SMatt Arsenault}
34542edafe83SMatt Arsenault
34552edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rint(
34562edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
34572da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.rint.f64(double [[X:%.*]])
345871be91ebSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
34592edafe83SMatt Arsenault//
34602edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rint(
34612edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
34622da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.rint.f64(double [[X:%.*]])
346371be91ebSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
34642edafe83SMatt Arsenault//
3465a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rint(
3466a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
34672da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.rint.f64(double [[X:%.*]])
3468a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
3469a0709e22SYaxun (Sam) Liu//
34702edafe83SMatt Arsenaultextern "C" __device__ double test_rint(double x) {
34712edafe83SMatt Arsenault  return rint(x);
34722edafe83SMatt Arsenault}
34732edafe83SMatt Arsenault
34742edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rnormf(
34752edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
34761a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
34771a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL6RNORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
34782edafe83SMatt Arsenault// DEFAULT:       while.body.i:
34791a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
34801a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
34811a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
34821a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
34831a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
34842edafe83SMatt Arsenault// DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[TMP0]], [[TMP0]]
34851a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[ADD_I]] = fadd contract float [[__R_0_I4]], [[MUL_I]]
3486*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 4
34872edafe83SMatt Arsenault// DEFAULT-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3488b57e049fSMatt Arsenault// DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL6RNORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP22:![0-9]+]]
34892edafe83SMatt Arsenault// DEFAULT:       _ZL6rnormfiPKf.exit:
34901a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3491a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rsqrt_f32(float noundef [[__R_0_I_LCSSA]]) #[[ATTR13]]
34922edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
34932edafe83SMatt Arsenault//
34942edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rnormf(
34952edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
34961a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
34971a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL6RNORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
34982edafe83SMatt Arsenault// FINITEONLY:       while.body.i:
34991a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
35001a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
35011a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
35021a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
35031a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
35042edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[TMP0]], [[TMP0]]
35051a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[ADD_I]] = fadd nnan ninf contract float [[__R_0_I4]], [[MUL_I]]
3506*7eca38ceSHari Limaye// FINITEONLY-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 4
35072edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3508b57e049fSMatt Arsenault// FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL6RNORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP22:![0-9]+]]
35092edafe83SMatt Arsenault// FINITEONLY:       _ZL6rnormfiPKf.exit:
35101a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3511a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_rsqrt_f32(float noundef nofpclass(nan inf) [[__R_0_I_LCSSA]]) #[[ATTR13]]
35122edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
35132edafe83SMatt Arsenault//
3514a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rnormf(
3515a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
35161a2e77cfSAmara Emerson// APPROX-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
35171a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL6RNORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3518a0709e22SYaxun (Sam) Liu// APPROX:       while.body.i:
35191a2e77cfSAmara Emerson// APPROX-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
35201a2e77cfSAmara Emerson// APPROX-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
35211a2e77cfSAmara Emerson// APPROX-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
35221a2e77cfSAmara Emerson// APPROX-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
35231a2e77cfSAmara Emerson// APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
3524a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[TMP0]], [[TMP0]]
35251a2e77cfSAmara Emerson// APPROX-NEXT:    [[ADD_I]] = fadd contract float [[__R_0_I4]], [[MUL_I]]
3526*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 4
3527a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3528a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL6RNORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP22:![0-9]+]]
3529a0709e22SYaxun (Sam) Liu// APPROX:       _ZL6rnormfiPKf.exit:
35301a2e77cfSAmara Emerson// APPROX-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3531a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rsqrt_f32(float noundef [[__R_0_I_LCSSA]]) #[[ATTR13]]
3532a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3533a0709e22SYaxun (Sam) Liu//
35342edafe83SMatt Arsenaultextern "C" __device__ float test_rnormf(int x, const float* y) {
35352edafe83SMatt Arsenault  return rnormf(x, y);
35362edafe83SMatt Arsenault}
35372edafe83SMatt Arsenault
35382edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rnorm(
35392edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
35401a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
35411a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5RNORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
35422edafe83SMatt Arsenault// DEFAULT:       while.body.i:
35431a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
35441a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
35451a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
35461a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
35471a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
35482edafe83SMatt Arsenault// DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract double [[TMP0]], [[TMP0]]
35491a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[ADD_I]] = fadd contract double [[__R_0_I4]], [[MUL_I]]
3550*7eca38ceSHari Limaye// DEFAULT-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 8
35512edafe83SMatt Arsenault// DEFAULT-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3552b57e049fSMatt Arsenault// DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5RNORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP23:![0-9]+]]
35532edafe83SMatt Arsenault// DEFAULT:       _ZL5rnormiPKd.exit:
35541a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3555a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rsqrt_f64(double noundef [[__R_0_I_LCSSA]]) #[[ATTR13]]
35562edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
35572edafe83SMatt Arsenault//
35582edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rnorm(
35592edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
35601a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
35611a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5RNORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
35622edafe83SMatt Arsenault// FINITEONLY:       while.body.i:
35631a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
35641a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
35651a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
35661a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
35671a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
35682edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract double [[TMP0]], [[TMP0]]
35691a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[ADD_I]] = fadd nnan ninf contract double [[__R_0_I4]], [[MUL_I]]
3570*7eca38ceSHari Limaye// FINITEONLY-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 8
35712edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3572b57e049fSMatt Arsenault// FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5RNORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP23:![0-9]+]]
35732edafe83SMatt Arsenault// FINITEONLY:       _ZL5rnormiPKd.exit:
35741a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3575a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_rsqrt_f64(double noundef nofpclass(nan inf) [[__R_0_I_LCSSA]]) #[[ATTR13]]
35762edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
35772edafe83SMatt Arsenault//
3578a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rnorm(
3579a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
35801a2e77cfSAmara Emerson// APPROX-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
35811a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5RNORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3582a0709e22SYaxun (Sam) Liu// APPROX:       while.body.i:
35831a2e77cfSAmara Emerson// APPROX-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
35841a2e77cfSAmara Emerson// APPROX-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
35851a2e77cfSAmara Emerson// APPROX-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
35861a2e77cfSAmara Emerson// APPROX-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
35871a2e77cfSAmara Emerson// APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
3588a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract double [[TMP0]], [[TMP0]]
35891a2e77cfSAmara Emerson// APPROX-NEXT:    [[ADD_I]] = fadd contract double [[__R_0_I4]], [[MUL_I]]
3590*7eca38ceSHari Limaye// APPROX-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds nuw i8, ptr [[__A_ADDR_0_I3]], i64 8
3591a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3592a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5RNORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP23:![0-9]+]]
3593a0709e22SYaxun (Sam) Liu// APPROX:       _ZL5rnormiPKd.exit:
35941a2e77cfSAmara Emerson// APPROX-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3595a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rsqrt_f64(double noundef [[__R_0_I_LCSSA]]) #[[ATTR13]]
3596a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3597a0709e22SYaxun (Sam) Liu//
35982edafe83SMatt Arsenaultextern "C" __device__ double test_rnorm(int x, const double* y) {
35992edafe83SMatt Arsenault  return rnorm(x, y);
36002edafe83SMatt Arsenault}
36012edafe83SMatt Arsenault
36022edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rnorm3df(
36032edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3604a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rlen3_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]]) #[[ATTR12]]
36052edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
36062edafe83SMatt Arsenault//
36072edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rnorm3df(
36082edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3609a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_rlen3_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]], float noundef nofpclass(nan inf) [[Z:%.*]]) #[[ATTR12]]
36102edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
36112edafe83SMatt Arsenault//
3612a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rnorm3df(
3613a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3614a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rlen3_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]]) #[[ATTR12]]
3615a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3616a0709e22SYaxun (Sam) Liu//
36172edafe83SMatt Arsenaultextern "C" __device__ float test_rnorm3df(float x, float y, float z) {
36182edafe83SMatt Arsenault  return rnorm3df(x, y, z);
36192edafe83SMatt Arsenault}
36202edafe83SMatt Arsenault
36212edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rnorm3d(
36222edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3623a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rlen3_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]]) #[[ATTR12]]
36242edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
36252edafe83SMatt Arsenault//
36262edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rnorm3d(
36272edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3628a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_rlen3_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]], double noundef nofpclass(nan inf) [[Z:%.*]]) #[[ATTR12]]
36292edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
36302edafe83SMatt Arsenault//
3631a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rnorm3d(
3632a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3633a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rlen3_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]]) #[[ATTR12]]
3634a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3635a0709e22SYaxun (Sam) Liu//
36362edafe83SMatt Arsenaultextern "C" __device__ double test_rnorm3d(double x, double y, double z) {
36372edafe83SMatt Arsenault  return rnorm3d(x, y, z);
36382edafe83SMatt Arsenault}
36392edafe83SMatt Arsenault
36402edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rnorm4df(
36412edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3642a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rlen4_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]], float noundef [[W:%.*]]) #[[ATTR12]]
36432edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
36442edafe83SMatt Arsenault//
36452edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rnorm4df(
36462edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3647a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_rlen4_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]], float noundef nofpclass(nan inf) [[Z:%.*]], float noundef nofpclass(nan inf) [[W:%.*]]) #[[ATTR12]]
36482edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
36492edafe83SMatt Arsenault//
3650a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rnorm4df(
3651a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3652a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rlen4_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]], float noundef [[W:%.*]]) #[[ATTR12]]
3653a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3654a0709e22SYaxun (Sam) Liu//
36552edafe83SMatt Arsenaultextern "C" __device__ float test_rnorm4df(float x, float y, float z, float w) {
36562edafe83SMatt Arsenault  return rnorm4df(x, y, z, w);
36572edafe83SMatt Arsenault}
36582edafe83SMatt Arsenault
36592edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rnorm4d(
36602edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3661a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rlen4_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]], double noundef [[W:%.*]]) #[[ATTR12]]
36622edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
36632edafe83SMatt Arsenault//
36642edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rnorm4d(
36652edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3666a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_rlen4_f64(double noundef nofpclass(nan inf) [[X:%.*]], double noundef nofpclass(nan inf) [[Y:%.*]], double noundef nofpclass(nan inf) [[Z:%.*]], double noundef nofpclass(nan inf) [[W:%.*]]) #[[ATTR12]]
36672edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
36682edafe83SMatt Arsenault//
3669a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rnorm4d(
3670a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3671a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rlen4_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]], double noundef [[W:%.*]]) #[[ATTR12]]
3672a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3673a0709e22SYaxun (Sam) Liu//
36742edafe83SMatt Arsenaultextern "C" __device__ double test_rnorm4d(double x, double y, double z, double w) {
36752edafe83SMatt Arsenault  return rnorm4d(x, y, z, w);
36762edafe83SMatt Arsenault}
36772edafe83SMatt Arsenault
36782edafe83SMatt Arsenault// DEFAULT-LABEL: @test_roundf(
36792edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
36802da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.round.f32(float [[X:%.*]])
36819a317516SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
36822edafe83SMatt Arsenault//
36832edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_roundf(
36842edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
36852da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.round.f32(float [[X:%.*]])
36869a317516SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
36872edafe83SMatt Arsenault//
3688a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_roundf(
3689a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
36902da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.round.f32(float [[X:%.*]])
3691a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
3692a0709e22SYaxun (Sam) Liu//
36932edafe83SMatt Arsenaultextern "C" __device__ float test_roundf(float x) {
36942edafe83SMatt Arsenault  return roundf(x);
36952edafe83SMatt Arsenault}
36962edafe83SMatt Arsenault
36972edafe83SMatt Arsenault// DEFAULT-LABEL: @test_round(
36982edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
36992da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.round.f64(double [[X:%.*]])
37009a317516SMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
37012edafe83SMatt Arsenault//
37022edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_round(
37032edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
37042da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.round.f64(double [[X:%.*]])
37059a317516SMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
37062edafe83SMatt Arsenault//
3707a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_round(
3708a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
37092da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.round.f64(double [[X:%.*]])
3710a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
3711a0709e22SYaxun (Sam) Liu//
37122edafe83SMatt Arsenaultextern "C" __device__ double test_round(double x) {
37132edafe83SMatt Arsenault  return round(x);
37142edafe83SMatt Arsenault}
37152edafe83SMatt Arsenault
37162edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rsqrtf(
37172edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3718a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rsqrt_f32(float noundef [[X:%.*]]) #[[ATTR13]]
37192edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
37202edafe83SMatt Arsenault//
37212edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rsqrtf(
37222edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3723a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_rsqrt_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
37242edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
37252edafe83SMatt Arsenault//
3726a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rsqrtf(
3727a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3728a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rsqrt_f32(float noundef [[X:%.*]]) #[[ATTR13]]
3729a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
3730a0709e22SYaxun (Sam) Liu//
37312edafe83SMatt Arsenaultextern "C" __device__ float test_rsqrtf(float x) {
37322edafe83SMatt Arsenault  return rsqrtf(x);
37332edafe83SMatt Arsenault}
37342edafe83SMatt Arsenault
37352edafe83SMatt Arsenault// DEFAULT-LABEL: @test_rsqrt(
37362edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
3737a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rsqrt_f64(double noundef [[X:%.*]]) #[[ATTR13]]
37382edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
37392edafe83SMatt Arsenault//
37402edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_rsqrt(
37412edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
3742a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_rsqrt_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
37432edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
37442edafe83SMatt Arsenault//
3745a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_rsqrt(
3746a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3747a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rsqrt_f64(double noundef [[X:%.*]]) #[[ATTR13]]
3748a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
3749a0709e22SYaxun (Sam) Liu//
37502edafe83SMatt Arsenaultextern "C" __device__ double test_rsqrt(double x) {
37512edafe83SMatt Arsenault  return rsqrt(x);
37522edafe83SMatt Arsenault}
37532edafe83SMatt Arsenault
37542edafe83SMatt Arsenault// DEFAULT-LABEL: @test_scalblnf(
37552edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
37562edafe83SMatt Arsenault// DEFAULT-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
37572edafe83SMatt Arsenault// DEFAULT-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
37582edafe83SMatt Arsenault// DEFAULT:       cond.true.i:
37592edafe83SMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3760c448e1daSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[CONV_I]])
37612edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT:%.*]]
37622edafe83SMatt Arsenault// DEFAULT:       cond.false.i:
3763a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract float @__ocml_scalb_f32(float noundef [[X]], float noundef 0x43E0000000000000) #[[ATTR12]]
37642edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT]]
37652edafe83SMatt Arsenault// DEFAULT:       _ZL8scalblnffl.exit:
3766c448e1daSMatt Arsenault// DEFAULT-NEXT:    [[COND_I:%.*]] = phi contract float [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
37672edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[COND_I]]
37682edafe83SMatt Arsenault//
37692edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_scalblnf(
37702edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
37712edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
37722edafe83SMatt Arsenault// FINITEONLY-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
37732edafe83SMatt Arsenault// FINITEONLY:       cond.true.i:
37742edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3775c448e1daSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[CONV_I]])
37762edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT:%.*]]
37772edafe83SMatt Arsenault// FINITEONLY:       cond.false.i:
3778a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract nofpclass(nan inf) float @__ocml_scalb_f32(float noundef nofpclass(nan inf) [[X]], float noundef nofpclass(nan inf) 0x43E0000000000000) #[[ATTR12]]
37792edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT]]
37802edafe83SMatt Arsenault// FINITEONLY:       _ZL8scalblnffl.exit:
3781c448e1daSMatt Arsenault// FINITEONLY-NEXT:    [[COND_I:%.*]] = phi nnan ninf contract float [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
37822edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[COND_I]]
37832edafe83SMatt Arsenault//
3784a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_scalblnf(
3785a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3786a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
3787a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
3788a0709e22SYaxun (Sam) Liu// APPROX:       cond.true.i:
3789a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3790a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[CONV_I]])
3791a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT:%.*]]
3792a0709e22SYaxun (Sam) Liu// APPROX:       cond.false.i:
3793a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract float @__ocml_scalb_f32(float noundef [[X]], float noundef 0x43E0000000000000) #[[ATTR12]]
3794a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT]]
3795a0709e22SYaxun (Sam) Liu// APPROX:       _ZL8scalblnffl.exit:
3796a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[COND_I:%.*]] = phi contract float [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
3797a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[COND_I]]
3798a0709e22SYaxun (Sam) Liu//
37992edafe83SMatt Arsenaultextern "C" __device__ float test_scalblnf(float x, long int y) {
38002edafe83SMatt Arsenault  return scalblnf(x, y);
38012edafe83SMatt Arsenault}
38022edafe83SMatt Arsenault
38032edafe83SMatt Arsenault// DEFAULT-LABEL: @test_scalbln(
38042edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
38052edafe83SMatt Arsenault// DEFAULT-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
38062edafe83SMatt Arsenault// DEFAULT-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
38072edafe83SMatt Arsenault// DEFAULT:       cond.true.i:
38082edafe83SMatt Arsenault// DEFAULT-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3809c448e1daSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[CONV_I]])
38102edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL7SCALBLNDL_EXIT:%.*]]
38112edafe83SMatt Arsenault// DEFAULT:       cond.false.i:
3812a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract double @__ocml_scalb_f64(double noundef [[X]], double noundef 0x43E0000000000000) #[[ATTR12]]
38132edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL7SCALBLNDL_EXIT]]
38142edafe83SMatt Arsenault// DEFAULT:       _ZL7scalblndl.exit:
3815c448e1daSMatt Arsenault// DEFAULT-NEXT:    [[COND_I:%.*]] = phi contract double [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
38162edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[COND_I]]
38172edafe83SMatt Arsenault//
38182edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_scalbln(
38192edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
38202edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
38212edafe83SMatt Arsenault// FINITEONLY-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
38222edafe83SMatt Arsenault// FINITEONLY:       cond.true.i:
38232edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3824c448e1daSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[CONV_I]])
38252edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL7SCALBLNDL_EXIT:%.*]]
38262edafe83SMatt Arsenault// FINITEONLY:       cond.false.i:
3827a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract nofpclass(nan inf) double @__ocml_scalb_f64(double noundef nofpclass(nan inf) [[X]], double noundef nofpclass(nan inf) 0x43E0000000000000) #[[ATTR12]]
38282edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL7SCALBLNDL_EXIT]]
38292edafe83SMatt Arsenault// FINITEONLY:       _ZL7scalblndl.exit:
3830c448e1daSMatt Arsenault// FINITEONLY-NEXT:    [[COND_I:%.*]] = phi nnan ninf contract double [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
38312edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[COND_I]]
38322edafe83SMatt Arsenault//
3833a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_scalbln(
3834a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3835a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
3836a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
3837a0709e22SYaxun (Sam) Liu// APPROX:       cond.true.i:
3838a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3839a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[CONV_I]])
3840a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL7SCALBLNDL_EXIT:%.*]]
3841a0709e22SYaxun (Sam) Liu// APPROX:       cond.false.i:
3842a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract double @__ocml_scalb_f64(double noundef [[X]], double noundef 0x43E0000000000000) #[[ATTR12]]
3843a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL7SCALBLNDL_EXIT]]
3844a0709e22SYaxun (Sam) Liu// APPROX:       _ZL7scalblndl.exit:
3845a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[COND_I:%.*]] = phi contract double [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
3846a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[COND_I]]
3847a0709e22SYaxun (Sam) Liu//
38482edafe83SMatt Arsenaultextern "C" __device__ double test_scalbln(double x, long int y) {
38492edafe83SMatt Arsenault  return scalbln(x, y);
38502edafe83SMatt Arsenault}
38512edafe83SMatt Arsenault
38522edafe83SMatt Arsenault// DEFAULT-LABEL: @test_scalbnf(
38532edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
38542da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
3855c448e1daSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
38562edafe83SMatt Arsenault//
38572edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_scalbnf(
38582edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
38592da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
3860c448e1daSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
38612edafe83SMatt Arsenault//
3862a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_scalbnf(
3863a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
38642da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
3865a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
3866a0709e22SYaxun (Sam) Liu//
38672edafe83SMatt Arsenaultextern "C" __device__ float test_scalbnf(float x, int y) {
38682edafe83SMatt Arsenault  return scalbnf(x, y);
38692edafe83SMatt Arsenault}
38702edafe83SMatt Arsenault
38712edafe83SMatt Arsenault// DEFAULT-LABEL: @test_scalbn(
38722edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
38732da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
3874c448e1daSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
38752edafe83SMatt Arsenault//
38762edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_scalbn(
38772edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
38782da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
3879c448e1daSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
38802edafe83SMatt Arsenault//
3881a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_scalbn(
3882a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
38832da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
3884a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
3885a0709e22SYaxun (Sam) Liu//
38862edafe83SMatt Arsenaultextern "C" __device__ double test_scalbn(double x, int y) {
38872edafe83SMatt Arsenault  return scalbn(x, y);
38882edafe83SMatt Arsenault}
38892edafe83SMatt Arsenault
3890b51ae6d3SMatt Arsenault// CHECK-LABEL: @test___signbitf(
3891b51ae6d3SMatt Arsenault// CHECK-NEXT:  entry:
3892b51ae6d3SMatt Arsenault// CHECK-NEXT:    [[TMP0:%.*]] = bitcast float [[X:%.*]] to i32
3893b51ae6d3SMatt Arsenault// CHECK-NEXT:    [[DOTLOBIT:%.*]] = lshr i32 [[TMP0]], 31
3894b51ae6d3SMatt Arsenault// CHECK-NEXT:    ret i32 [[DOTLOBIT]]
38952edafe83SMatt Arsenault//
38962edafe83SMatt Arsenaultextern "C" __device__ BOOL_TYPE test___signbitf(float x) {
38972edafe83SMatt Arsenault  return __signbitf(x);
38982edafe83SMatt Arsenault}
38992edafe83SMatt Arsenault
3900b51ae6d3SMatt Arsenault// CHECK-LABEL: @test___signbit(
3901b51ae6d3SMatt Arsenault// CHECK-NEXT:  entry:
3902b51ae6d3SMatt Arsenault// CHECK-NEXT:    [[TMP0:%.*]] = bitcast double [[X:%.*]] to i64
3903b51ae6d3SMatt Arsenault// CHECK-NEXT:    [[DOTLOBIT:%.*]] = lshr i64 [[TMP0]], 63
3904b1094776SYingwei Zheng// CHECK-NEXT:    [[CONV:%.*]] = trunc nuw nsw i64 [[DOTLOBIT]] to i32
3905b51ae6d3SMatt Arsenault// CHECK-NEXT:    ret i32 [[CONV]]
39062edafe83SMatt Arsenault//
39072edafe83SMatt Arsenaultextern "C" __device__ BOOL_TYPE test___signbit(double x) {
39082edafe83SMatt Arsenault  return __signbit(x);
39092edafe83SMatt Arsenault}
39102edafe83SMatt Arsenault
39112edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sincosf(
39122edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
39132edafe83SMatt Arsenault// DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3914a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3915a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract float @__ocml_sincos_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3916b57e049fSMatt Arsenault// DEFAULT-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3917b57e049fSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3918b57e049fSMatt Arsenault// DEFAULT-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3919a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
39202edafe83SMatt Arsenault// DEFAULT-NEXT:    ret void
39212edafe83SMatt Arsenault//
39222edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sincosf(
39232edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
39242edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3925a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3926a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = call nnan ninf contract nofpclass(nan inf) float @__ocml_sincos_f32(float noundef nofpclass(nan inf) [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3927b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3928b57e049fSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3929b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3930a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
39312edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret void
39322edafe83SMatt Arsenault//
3933a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sincosf(
3934a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3935e1788243SYaxun (Sam) Liu// APPROX-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3936a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3937a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = call contract float @__ocml_sincos_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3938e1788243SYaxun (Sam) Liu// APPROX-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3939e1788243SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3940e1788243SYaxun (Sam) Liu// APPROX-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3941a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3942a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret void
3943a0709e22SYaxun (Sam) Liu//
39442edafe83SMatt Arsenaultextern "C" __device__ void test_sincosf(float x, float *y, float *z) {
39452edafe83SMatt Arsenault  sincosf(x, y, z);
39462edafe83SMatt Arsenault}
39472edafe83SMatt Arsenault
39482edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sincos(
39492edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
39502edafe83SMatt Arsenault// DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
3951a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3952a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract double @__ocml_sincos_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3953b57e049fSMatt Arsenault// DEFAULT-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
3954b57e049fSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
3955b57e049fSMatt Arsenault// DEFAULT-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
3956a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
39572edafe83SMatt Arsenault// DEFAULT-NEXT:    ret void
39582edafe83SMatt Arsenault//
39592edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sincos(
39602edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
39612edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
3962a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3963a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = call nnan ninf contract nofpclass(nan inf) double @__ocml_sincos_f64(double noundef nofpclass(nan inf) [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3964b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
3965b57e049fSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
3966b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
3967a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
39682edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret void
39692edafe83SMatt Arsenault//
3970a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sincos(
3971a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
3972a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
3973a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3974a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = call contract double @__ocml_sincos_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3975a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
3976a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
3977a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
3978a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3979a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret void
3980a0709e22SYaxun (Sam) Liu//
39812edafe83SMatt Arsenaultextern "C" __device__ void test_sincos(double x, double *y, double *z) {
39822edafe83SMatt Arsenault  sincos(x, y, z);
39832edafe83SMatt Arsenault}
39842edafe83SMatt Arsenault
39852edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sincospif(
39862edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
39872edafe83SMatt Arsenault// DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3988a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
3989a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract float @__ocml_sincospi_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
3990b57e049fSMatt Arsenault// DEFAULT-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3991b57e049fSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3992b57e049fSMatt Arsenault// DEFAULT-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3993a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
39942edafe83SMatt Arsenault// DEFAULT-NEXT:    ret void
39952edafe83SMatt Arsenault//
39962edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sincospif(
39972edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
39982edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3999a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
4000a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = call nnan ninf contract nofpclass(nan inf) float @__ocml_sincospi_f32(float noundef nofpclass(nan inf) [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
4001b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
4002b57e049fSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
4003b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
4004a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
40052edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret void
40062edafe83SMatt Arsenault//
4007a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sincospif(
4008a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4009a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
4010a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
4011a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = call contract float @__ocml_sincospi_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
4012a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
4013a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
4014a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
4015a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
4016a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret void
4017a0709e22SYaxun (Sam) Liu//
40182edafe83SMatt Arsenaultextern "C" __device__ void test_sincospif(float x, float *y, float *z) {
40192edafe83SMatt Arsenault  sincospif(x, y, z);
40202edafe83SMatt Arsenault}
40212edafe83SMatt Arsenault
40222edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sincospi(
40232edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
40242edafe83SMatt Arsenault// DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
4025a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
4026a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract double @__ocml_sincospi_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
4027b57e049fSMatt Arsenault// DEFAULT-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
4028b57e049fSMatt Arsenault// DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
4029b57e049fSMatt Arsenault// DEFAULT-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
4030a24b0c35SMatt Arsenault// DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
40312edafe83SMatt Arsenault// DEFAULT-NEXT:    ret void
40322edafe83SMatt Arsenault//
40332edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sincospi(
40342edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
40352edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
4036a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
4037a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = call nnan ninf contract nofpclass(nan inf) double @__ocml_sincospi_f64(double noundef nofpclass(nan inf) [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
4038b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
4039b57e049fSMatt Arsenault// FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
4040b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
4041a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
40422edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret void
40432edafe83SMatt Arsenault//
4044a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sincospi(
4045a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4046a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
4047a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
4048a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = call contract double @__ocml_sincospi_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR14]]
4049a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
4050a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
4051a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
4052a24b0c35SMatt Arsenault// APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR15]]
4053a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret void
4054a0709e22SYaxun (Sam) Liu//
40552edafe83SMatt Arsenaultextern "C" __device__ void test_sincospi(double x, double *y, double *z) {
40562edafe83SMatt Arsenault  sincospi(x, y, z);
40572edafe83SMatt Arsenault}
40582edafe83SMatt Arsenault
40592edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sinf(
40602edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4061a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_sin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
40622edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
40632edafe83SMatt Arsenault//
40642edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sinf(
40652edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4066a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_sin_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
40672edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
40682edafe83SMatt Arsenault//
4069a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sinf(
4070a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4071a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I1:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
40721a2e77cfSAmara Emerson// APPROX-NEXT:    ret float [[CALL_I1]]
4073a0709e22SYaxun (Sam) Liu//
40742edafe83SMatt Arsenaultextern "C" __device__ float test_sinf(float x) {
40752edafe83SMatt Arsenault  return sinf(x);
40762edafe83SMatt Arsenault}
40772edafe83SMatt Arsenault
40782edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sin(
40792edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4080a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_sin_f64(double noundef [[X:%.*]]) #[[ATTR14]]
40812edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
40822edafe83SMatt Arsenault//
40832edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sin(
40842edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4085a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_sin_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
40862edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
40872edafe83SMatt Arsenault//
4088a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sin(
4089a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4090a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_sin_f64(double noundef [[X:%.*]]) #[[ATTR14]]
4091a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
4092a0709e22SYaxun (Sam) Liu//
40932edafe83SMatt Arsenaultextern "C" __device__ double test_sin(double x) {
40942edafe83SMatt Arsenault  return sin(x);
40952edafe83SMatt Arsenault}
40962edafe83SMatt Arsenault
40972edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sinpif(
40982edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4099a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_sinpi_f32(float noundef [[X:%.*]]) #[[ATTR14]]
41002edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
41012edafe83SMatt Arsenault//
41022edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sinpif(
41032edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4104a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_sinpi_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
41052edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
41062edafe83SMatt Arsenault//
4107a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sinpif(
4108a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4109a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_sinpi_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4110a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4111a0709e22SYaxun (Sam) Liu//
41122edafe83SMatt Arsenaultextern "C" __device__ float test_sinpif(float x) {
41132edafe83SMatt Arsenault  return sinpif(x);
41142edafe83SMatt Arsenault}
41152edafe83SMatt Arsenault
41162edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sinpi(
41172edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4118a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_sinpi_f64(double noundef [[X:%.*]]) #[[ATTR14]]
41192edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
41202edafe83SMatt Arsenault//
41212edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sinpi(
41222edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4123a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_sinpi_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
41242edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
41252edafe83SMatt Arsenault//
4126a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sinpi(
4127a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4128a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_sinpi_f64(double noundef [[X:%.*]]) #[[ATTR14]]
4129a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
4130a0709e22SYaxun (Sam) Liu//
41312edafe83SMatt Arsenaultextern "C" __device__ double test_sinpi(double x) {
41322edafe83SMatt Arsenault  return sinpi(x);
41332edafe83SMatt Arsenault}
41342edafe83SMatt Arsenault
41352edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sqrtf(
41362edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
41372da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.sqrt.f32(float [[X:%.*]])
4138bca12556SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
41392edafe83SMatt Arsenault//
41402edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sqrtf(
41412edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
41422da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.sqrt.f32(float [[X:%.*]])
4143bca12556SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
41442edafe83SMatt Arsenault//
4145a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sqrtf(
4146a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
41472da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.sqrt.f32(float [[X:%.*]])
4148bca12556SMatt Arsenault// APPROX-NEXT:    ret float [[TMP0]]
4149a0709e22SYaxun (Sam) Liu//
41502edafe83SMatt Arsenaultextern "C" __device__ float test_sqrtf(float x) {
41512edafe83SMatt Arsenault  return sqrtf(x);
41522edafe83SMatt Arsenault}
41532edafe83SMatt Arsenault
41542edafe83SMatt Arsenault// DEFAULT-LABEL: @test_sqrt(
41552edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
41562da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
415763dbe7e8SMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
41582edafe83SMatt Arsenault//
41592edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_sqrt(
41602edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
41612da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
416263dbe7e8SMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
41632edafe83SMatt Arsenault//
4164a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_sqrt(
4165a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
41662da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
416763dbe7e8SMatt Arsenault// APPROX-NEXT:    ret double [[TMP0]]
4168a0709e22SYaxun (Sam) Liu//
41692edafe83SMatt Arsenaultextern "C" __device__ double test_sqrt(double x) {
41702edafe83SMatt Arsenault  return sqrt(x);
41712edafe83SMatt Arsenault}
41722edafe83SMatt Arsenault
41732edafe83SMatt Arsenault// DEFAULT-LABEL: @test_tanf(
41742edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4175a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tan_f32(float noundef [[X:%.*]]) #[[ATTR14]]
41762edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
41772edafe83SMatt Arsenault//
41782edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_tanf(
41792edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4180a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_tan_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
41812edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
41822edafe83SMatt Arsenault//
4183a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_tanf(
4184a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4185a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tan_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4186a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4187a0709e22SYaxun (Sam) Liu//
41882edafe83SMatt Arsenaultextern "C" __device__ float test_tanf(float x) {
41892edafe83SMatt Arsenault  return tanf(x);
41902edafe83SMatt Arsenault}
41912edafe83SMatt Arsenault
41922edafe83SMatt Arsenault// DEFAULT-LABEL: @test_tan(
41932edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4194a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tan_f64(double noundef [[X:%.*]]) #[[ATTR14]]
41952edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
41962edafe83SMatt Arsenault//
41972edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_tan(
41982edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4199a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_tan_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
42002edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
42012edafe83SMatt Arsenault//
4202a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_tan(
4203a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4204a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tan_f64(double noundef [[X:%.*]]) #[[ATTR14]]
4205a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
4206a0709e22SYaxun (Sam) Liu//
42072edafe83SMatt Arsenaultextern "C" __device__ double test_tan(double x) {
42082edafe83SMatt Arsenault  return tan(x);
42092edafe83SMatt Arsenault}
42102edafe83SMatt Arsenault
42112edafe83SMatt Arsenault// DEFAULT-LABEL: @test_tanhf(
42122edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4213a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tanh_f32(float noundef [[X:%.*]]) #[[ATTR13]]
42142edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
42152edafe83SMatt Arsenault//
42162edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_tanhf(
42172edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4218a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_tanh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
42192edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
42202edafe83SMatt Arsenault//
4221a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_tanhf(
4222a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4223a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tanh_f32(float noundef [[X:%.*]]) #[[ATTR13]]
4224a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4225a0709e22SYaxun (Sam) Liu//
42262edafe83SMatt Arsenaultextern "C" __device__ float test_tanhf(float x) {
42272edafe83SMatt Arsenault  return tanhf(x);
42282edafe83SMatt Arsenault}
42292edafe83SMatt Arsenault
42302edafe83SMatt Arsenault// DEFAULT-LABEL: @test_tanh(
42312edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4232a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tanh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
42332edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
42342edafe83SMatt Arsenault//
42352edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_tanh(
42362edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4237a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_tanh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR13]]
42382edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
42392edafe83SMatt Arsenault//
4240a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_tanh(
4241a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4242a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tanh_f64(double noundef [[X:%.*]]) #[[ATTR13]]
4243a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
4244a0709e22SYaxun (Sam) Liu//
42452edafe83SMatt Arsenaultextern "C" __device__ double test_tanh(double x) {
42462edafe83SMatt Arsenault  return tanh(x);
42472edafe83SMatt Arsenault}
42482edafe83SMatt Arsenault
42492edafe83SMatt Arsenault// DEFAULT-LABEL: @test_tgammaf(
42502edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4251a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tgamma_f32(float noundef [[X:%.*]]) #[[ATTR14]]
42522edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
42532edafe83SMatt Arsenault//
42542edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_tgammaf(
42552edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4256a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_tgamma_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
42572edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
42582edafe83SMatt Arsenault//
4259a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_tgammaf(
4260a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4261a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tgamma_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4262a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4263a0709e22SYaxun (Sam) Liu//
42642edafe83SMatt Arsenaultextern "C" __device__ float test_tgammaf(float x) {
42652edafe83SMatt Arsenault  return tgammaf(x);
42662edafe83SMatt Arsenault}
42672edafe83SMatt Arsenault
42682edafe83SMatt Arsenault// DEFAULT-LABEL: @test_tgamma(
42692edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4270a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tgamma_f64(double noundef [[X:%.*]]) #[[ATTR14]]
42712edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
42722edafe83SMatt Arsenault//
42732edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_tgamma(
42742edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4275a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_tgamma_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
42762edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
42772edafe83SMatt Arsenault//
4278a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_tgamma(
4279a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4280a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tgamma_f64(double noundef [[X:%.*]]) #[[ATTR14]]
4281a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
4282a0709e22SYaxun (Sam) Liu//
42832edafe83SMatt Arsenaultextern "C" __device__ double test_tgamma(double x) {
42842edafe83SMatt Arsenault  return tgamma(x);
42852edafe83SMatt Arsenault}
42862edafe83SMatt Arsenault
42872edafe83SMatt Arsenault// DEFAULT-LABEL: @test_truncf(
42882edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
42892da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.trunc.f32(float [[X:%.*]])
4290d7feba74SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
42912edafe83SMatt Arsenault//
42922edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_truncf(
42932edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
42942da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.trunc.f32(float [[X:%.*]])
4295d7feba74SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
42962edafe83SMatt Arsenault//
4297a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_truncf(
4298a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
42992da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.trunc.f32(float [[X:%.*]])
4300a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
4301a0709e22SYaxun (Sam) Liu//
43022edafe83SMatt Arsenaultextern "C" __device__ float test_truncf(float x) {
43032edafe83SMatt Arsenault  return truncf(x);
43042edafe83SMatt Arsenault}
43052edafe83SMatt Arsenault
43062edafe83SMatt Arsenault// DEFAULT-LABEL: @test_trunc(
43072edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
43082da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.trunc.f64(double [[X:%.*]])
4309d7feba74SMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
43102edafe83SMatt Arsenault//
43112edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_trunc(
43122edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
43132da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.trunc.f64(double [[X:%.*]])
4314d7feba74SMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
43152edafe83SMatt Arsenault//
4316a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_trunc(
4317a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
43182da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.trunc.f64(double [[X:%.*]])
4319a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
4320a0709e22SYaxun (Sam) Liu//
43212edafe83SMatt Arsenaultextern "C" __device__ double test_trunc(double x) {
43222edafe83SMatt Arsenault  return trunc(x);
43232edafe83SMatt Arsenault}
43242edafe83SMatt Arsenault
43252edafe83SMatt Arsenault// DEFAULT-LABEL: @test_y0f(
43262edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4327a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[X:%.*]]) #[[ATTR14]]
43282edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
43292edafe83SMatt Arsenault//
43302edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_y0f(
43312edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4332a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y0_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
43332edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
43342edafe83SMatt Arsenault//
4335a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_y0f(
4336a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4337a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4338a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4339a0709e22SYaxun (Sam) Liu//
43402edafe83SMatt Arsenaultextern "C" __device__ float test_y0f(float x) {
43412edafe83SMatt Arsenault  return y0f(x);
43422edafe83SMatt Arsenault}
43432edafe83SMatt Arsenault
43442edafe83SMatt Arsenault// DEFAULT-LABEL: @test_y0(
43452edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4346a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[X:%.*]]) #[[ATTR14]]
43472edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
43482edafe83SMatt Arsenault//
43492edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_y0(
43502edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4351a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y0_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
43522edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
43532edafe83SMatt Arsenault//
4354a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_y0(
4355a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4356a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[X:%.*]]) #[[ATTR14]]
4357a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
4358a0709e22SYaxun (Sam) Liu//
43592edafe83SMatt Arsenaultextern "C" __device__ double test_y0(double x) {
43602edafe83SMatt Arsenault  return y0(x);
43612edafe83SMatt Arsenault}
43622edafe83SMatt Arsenault
43632edafe83SMatt Arsenault// DEFAULT-LABEL: @test_y1f(
43642edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4365a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[X:%.*]]) #[[ATTR14]]
43662edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
43672edafe83SMatt Arsenault//
43682edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_y1f(
43692edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4370a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y1_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
43712edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
43722edafe83SMatt Arsenault//
4373a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_y1f(
4374a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4375a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4376a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4377a0709e22SYaxun (Sam) Liu//
43782edafe83SMatt Arsenaultextern "C" __device__ float test_y1f(float x) {
43792edafe83SMatt Arsenault  return y1f(x);
43802edafe83SMatt Arsenault}
43812edafe83SMatt Arsenault
43822edafe83SMatt Arsenault// DEFAULT-LABEL: @test_y1(
43832edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4384a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[X:%.*]]) #[[ATTR14]]
43852edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[CALL_I]]
43862edafe83SMatt Arsenault//
43872edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_y1(
43882edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4389a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y1_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
43902edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[CALL_I]]
43912edafe83SMatt Arsenault//
4392a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_y1(
4393a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4394a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[X:%.*]]) #[[ATTR14]]
4395a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[CALL_I]]
4396a0709e22SYaxun (Sam) Liu//
43972edafe83SMatt Arsenaultextern "C" __device__ double test_y1(double x) {
43982edafe83SMatt Arsenault  return y1(x);
43992edafe83SMatt Arsenault}
44002edafe83SMatt Arsenault
44012edafe83SMatt Arsenault// DEFAULT-LABEL: @test_ynf(
44022edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
44032edafe83SMatt Arsenault// DEFAULT-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
44042edafe83SMatt Arsenault// DEFAULT-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
44052edafe83SMatt Arsenault// DEFAULT-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
44062edafe83SMatt Arsenault// DEFAULT-NEXT:    ]
44072edafe83SMatt Arsenault// DEFAULT:       if.then.i:
4408a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[Y:%.*]]) #[[ATTR14]]
44092edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL3YNFIF_EXIT:%.*]]
44102edafe83SMatt Arsenault// DEFAULT:       if.then2.i:
4411a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[Y]]) #[[ATTR14]]
44122edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL3YNFIF_EXIT]]
44132edafe83SMatt Arsenault// DEFAULT:       if.end4.i:
4414a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[Y]]) #[[ATTR14]]
4415a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[Y]]) #[[ATTR14]]
44161a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
44171a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3YNFIF_EXIT]]
44182edafe83SMatt Arsenault// DEFAULT:       for.body.i:
44191a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
44201a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
44211a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
44221a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4423b6bd41dbSNoah Goldstein// DEFAULT-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to float
44242edafe83SMatt Arsenault// DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[CONV_I]], [[Y]]
44251a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[MUL8_I:%.*]] = fmul contract float [[__X1_0_I3]], [[DIV_I]]
44261a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[SUB_I]] = fsub contract float [[MUL8_I]], [[__X0_0_I2]]
44271a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
44281a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
44291a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3YNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP24:![0-9]+]]
44302edafe83SMatt Arsenault// DEFAULT:       _ZL3ynfif.exit:
44311a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[RETVAL_0_I:%.*]] = phi float [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
44322edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[RETVAL_0_I]]
44332edafe83SMatt Arsenault//
44342edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_ynf(
44352edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
44362edafe83SMatt Arsenault// FINITEONLY-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
44372edafe83SMatt Arsenault// FINITEONLY-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
44382edafe83SMatt Arsenault// FINITEONLY-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
44392edafe83SMatt Arsenault// FINITEONLY-NEXT:    ]
44402edafe83SMatt Arsenault// FINITEONLY:       if.then.i:
4441a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I20_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y0_f32(float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR14]]
44422edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL3YNFIF_EXIT:%.*]]
44432edafe83SMatt Arsenault// FINITEONLY:       if.then2.i:
4444a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I22_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y1_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
44452edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL3YNFIF_EXIT]]
44462edafe83SMatt Arsenault// FINITEONLY:       if.end4.i:
4447a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y0_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
4448a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I21_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y1_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
44491a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
44501a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3YNFIF_EXIT]]
44512edafe83SMatt Arsenault// FINITEONLY:       for.body.i:
44521a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
44531a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
44541a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
44551a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4456b6bd41dbSNoah Goldstein// FINITEONLY-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to float
44572edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float [[CONV_I]], [[Y]]
44581a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[MUL8_I:%.*]] = fmul nnan ninf contract float [[__X1_0_I3]], [[DIV_I]]
44591a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[SUB_I]] = fsub nnan ninf contract float [[MUL8_I]], [[__X0_0_I2]]
44601a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
44611a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
44621a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3YNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP24:![0-9]+]]
44632edafe83SMatt Arsenault// FINITEONLY:       _ZL3ynfif.exit:
44641a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[RETVAL_0_I:%.*]] = phi float [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
44652edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[RETVAL_0_I]]
44662edafe83SMatt Arsenault//
4467a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_ynf(
4468a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4469a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
4470a0709e22SYaxun (Sam) Liu// APPROX-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
4471a0709e22SYaxun (Sam) Liu// APPROX-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
4472a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ]
4473a0709e22SYaxun (Sam) Liu// APPROX:       if.then.i:
4474a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[Y:%.*]]) #[[ATTR14]]
4475a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL3YNFIF_EXIT:%.*]]
4476a0709e22SYaxun (Sam) Liu// APPROX:       if.then2.i:
4477a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[Y]]) #[[ATTR14]]
4478a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL3YNFIF_EXIT]]
4479a0709e22SYaxun (Sam) Liu// APPROX:       if.end4.i:
4480a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[Y]]) #[[ATTR14]]
4481a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[Y]]) #[[ATTR14]]
44821a2e77cfSAmara Emerson// APPROX-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
44831a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3YNFIF_EXIT]]
4484a0709e22SYaxun (Sam) Liu// APPROX:       for.body.i:
44851a2e77cfSAmara Emerson// APPROX-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
44861a2e77cfSAmara Emerson// APPROX-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
44871a2e77cfSAmara Emerson// APPROX-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
44881a2e77cfSAmara Emerson// APPROX-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4489b6bd41dbSNoah Goldstein// APPROX-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to float
4490a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[CONV_I]], [[Y]]
44911a2e77cfSAmara Emerson// APPROX-NEXT:    [[MUL8_I:%.*]] = fmul contract float [[__X1_0_I3]], [[DIV_I]]
44921a2e77cfSAmara Emerson// APPROX-NEXT:    [[SUB_I]] = fsub contract float [[MUL8_I]], [[__X0_0_I2]]
44931a2e77cfSAmara Emerson// APPROX-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
44941a2e77cfSAmara Emerson// APPROX-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
44951a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3YNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP24:![0-9]+]]
4496a0709e22SYaxun (Sam) Liu// APPROX:       _ZL3ynfif.exit:
44971a2e77cfSAmara Emerson// APPROX-NEXT:    [[RETVAL_0_I:%.*]] = phi float [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
4498a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[RETVAL_0_I]]
4499a0709e22SYaxun (Sam) Liu//
45002edafe83SMatt Arsenaultextern "C" __device__ float test_ynf(int x, float y) {
45012edafe83SMatt Arsenault  return ynf(x, y);
45022edafe83SMatt Arsenault}
45032edafe83SMatt Arsenault
45042edafe83SMatt Arsenault// DEFAULT-LABEL: @test_yn(
45052edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
45062edafe83SMatt Arsenault// DEFAULT-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
45072edafe83SMatt Arsenault// DEFAULT-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
45082edafe83SMatt Arsenault// DEFAULT-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
45092edafe83SMatt Arsenault// DEFAULT-NEXT:    ]
45102edafe83SMatt Arsenault// DEFAULT:       if.then.i:
4511a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[Y:%.*]]) #[[ATTR14]]
45122edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL2YNID_EXIT:%.*]]
45132edafe83SMatt Arsenault// DEFAULT:       if.then2.i:
4514a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[Y]]) #[[ATTR14]]
45152edafe83SMatt Arsenault// DEFAULT-NEXT:    br label [[_ZL2YNID_EXIT]]
45162edafe83SMatt Arsenault// DEFAULT:       if.end4.i:
4517a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[Y]]) #[[ATTR14]]
4518a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[Y]]) #[[ATTR14]]
45191a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
45201a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2YNID_EXIT]]
45212edafe83SMatt Arsenault// DEFAULT:       for.body.i:
45221a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
45231a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
45241a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
45251a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4526b6bd41dbSNoah Goldstein// DEFAULT-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to double
45272edafe83SMatt Arsenault// DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[CONV_I]], [[Y]]
45281a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[MUL8_I:%.*]] = fmul contract double [[__X1_0_I3]], [[DIV_I]]
45291a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[SUB_I]] = fsub contract double [[MUL8_I]], [[__X0_0_I2]]
45301a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
45311a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
45321a2e77cfSAmara Emerson// DEFAULT-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2YNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP25:![0-9]+]]
45332edafe83SMatt Arsenault// DEFAULT:       _ZL2ynid.exit:
45341a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[RETVAL_0_I:%.*]] = phi double [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
45352edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[RETVAL_0_I]]
45362edafe83SMatt Arsenault//
45372edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_yn(
45382edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
45392edafe83SMatt Arsenault// FINITEONLY-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
45402edafe83SMatt Arsenault// FINITEONLY-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
45412edafe83SMatt Arsenault// FINITEONLY-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
45422edafe83SMatt Arsenault// FINITEONLY-NEXT:    ]
45432edafe83SMatt Arsenault// FINITEONLY:       if.then.i:
4544a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I20_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y0_f64(double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR14]]
45452edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL2YNID_EXIT:%.*]]
45462edafe83SMatt Arsenault// FINITEONLY:       if.then2.i:
4547a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I22_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y1_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
45482edafe83SMatt Arsenault// FINITEONLY-NEXT:    br label [[_ZL2YNID_EXIT]]
45492edafe83SMatt Arsenault// FINITEONLY:       if.end4.i:
4550a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y0_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
4551a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I21_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y1_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR14]]
45521a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
45531a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2YNID_EXIT]]
45542edafe83SMatt Arsenault// FINITEONLY:       for.body.i:
45551a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
45561a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
45571a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
45581a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4559b6bd41dbSNoah Goldstein// FINITEONLY-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to double
45602edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract double [[CONV_I]], [[Y]]
45611a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[MUL8_I:%.*]] = fmul nnan ninf contract double [[__X1_0_I3]], [[DIV_I]]
45621a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[SUB_I]] = fsub nnan ninf contract double [[MUL8_I]], [[__X0_0_I2]]
45631a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
45641a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
45651a2e77cfSAmara Emerson// FINITEONLY-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2YNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP25:![0-9]+]]
45662edafe83SMatt Arsenault// FINITEONLY:       _ZL2ynid.exit:
45671a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[RETVAL_0_I:%.*]] = phi double [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
45682edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[RETVAL_0_I]]
45692edafe83SMatt Arsenault//
4570a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_yn(
4571a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4572a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
4573a0709e22SYaxun (Sam) Liu// APPROX-NEXT:      i32 0, label [[IF_THEN_I:%.*]]
4574a0709e22SYaxun (Sam) Liu// APPROX-NEXT:      i32 1, label [[IF_THEN2_I:%.*]]
4575a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ]
4576a0709e22SYaxun (Sam) Liu// APPROX:       if.then.i:
4577a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[Y:%.*]]) #[[ATTR14]]
4578a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL2YNID_EXIT:%.*]]
4579a0709e22SYaxun (Sam) Liu// APPROX:       if.then2.i:
4580a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[Y]]) #[[ATTR14]]
4581a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    br label [[_ZL2YNID_EXIT]]
4582a0709e22SYaxun (Sam) Liu// APPROX:       if.end4.i:
4583a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[Y]]) #[[ATTR14]]
4584a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[Y]]) #[[ATTR14]]
45851a2e77cfSAmara Emerson// APPROX-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
45861a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2YNID_EXIT]]
4587a0709e22SYaxun (Sam) Liu// APPROX:       for.body.i:
45881a2e77cfSAmara Emerson// APPROX-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
45891a2e77cfSAmara Emerson// APPROX-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
45901a2e77cfSAmara Emerson// APPROX-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
45911a2e77cfSAmara Emerson// APPROX-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4592b6bd41dbSNoah Goldstein// APPROX-NEXT:    [[CONV_I:%.*]] = uitofp nneg i32 [[MUL_I]] to double
4593a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[CONV_I]], [[Y]]
45941a2e77cfSAmara Emerson// APPROX-NEXT:    [[MUL8_I:%.*]] = fmul contract double [[__X1_0_I3]], [[DIV_I]]
45951a2e77cfSAmara Emerson// APPROX-NEXT:    [[SUB_I]] = fsub contract double [[MUL8_I]], [[__X0_0_I2]]
45961a2e77cfSAmara Emerson// APPROX-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
45971a2e77cfSAmara Emerson// APPROX-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
45981a2e77cfSAmara Emerson// APPROX-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2YNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP25:![0-9]+]]
4599a0709e22SYaxun (Sam) Liu// APPROX:       _ZL2ynid.exit:
46001a2e77cfSAmara Emerson// APPROX-NEXT:    [[RETVAL_0_I:%.*]] = phi double [ [[CALL_I20_I]], [[IF_THEN_I]] ], [ [[CALL_I22_I]], [[IF_THEN2_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ], [ [[SUB_I]], [[FOR_BODY_I]] ]
4601a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[RETVAL_0_I]]
4602a0709e22SYaxun (Sam) Liu//
46032edafe83SMatt Arsenaultextern "C" __device__ double test_yn(int x, double y) {
46042edafe83SMatt Arsenault  return yn(x, y);
46052edafe83SMatt Arsenault}
46062edafe83SMatt Arsenault
46072edafe83SMatt Arsenault// DEFAULT-LABEL: @test___cosf(
46082edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4609a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X:%.*]]) #[[ATTR14]]
46102edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
46112edafe83SMatt Arsenault//
46122edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___cosf(
46132edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4614a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_native_cos_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
46152edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
46162edafe83SMatt Arsenault//
4617a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___cosf(
4618a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4619a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4620a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4621a0709e22SYaxun (Sam) Liu//
46222edafe83SMatt Arsenaultextern "C" __device__ float test___cosf(float x) {
46232edafe83SMatt Arsenault  return __cosf(x);
46242edafe83SMatt Arsenault}
46252edafe83SMatt Arsenault
46262edafe83SMatt Arsenault// DEFAULT-LABEL: @test___exp10f(
46272edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4628a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], 0x400A934F00000000
46292da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4630a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    ret float [[TMP0]]
46312edafe83SMatt Arsenault//
46322edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___exp10f(
46332edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4634a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[X:%.*]], 0x400A934F00000000
46352da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4636a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    ret float [[TMP0]]
4637a0709e22SYaxun (Sam) Liu//
4638a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___exp10f(
4639a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4640a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], 0x400A934F00000000
46412da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4642a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
46432edafe83SMatt Arsenault//
46442edafe83SMatt Arsenaultextern "C" __device__ float test___exp10f(float x) {
46452edafe83SMatt Arsenault  return __exp10f(x);
46462edafe83SMatt Arsenault}
46472edafe83SMatt Arsenault
46482edafe83SMatt Arsenault// DEFAULT-LABEL: @test___expf(
46492edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4650a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], 0x3FF7154760000000
46512da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4652a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    ret float [[TMP0]]
46532edafe83SMatt Arsenault//
46542edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___expf(
46552edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4656a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[X:%.*]], 0x3FF7154760000000
46572da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4658a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    ret float [[TMP0]]
4659a0709e22SYaxun (Sam) Liu//
4660a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___expf(
4661a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4662a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], 0x3FF7154760000000
46632da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4664a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
46652edafe83SMatt Arsenault//
46662edafe83SMatt Arsenaultextern "C" __device__ float test___expf(float x) {
46672edafe83SMatt Arsenault  return __expf(x);
46682edafe83SMatt Arsenault}
46692edafe83SMatt Arsenault
46702edafe83SMatt Arsenault// DEFAULT-LABEL: @test___fadd_rn(
46712edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
46722edafe83SMatt Arsenault// DEFAULT-NEXT:    [[ADD_I:%.*]] = fadd contract float [[X:%.*]], [[Y:%.*]]
46732edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[ADD_I]]
46742edafe83SMatt Arsenault//
46752edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___fadd_rn(
46762edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
46772edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[ADD_I:%.*]] = fadd nnan ninf contract float [[X:%.*]], [[Y:%.*]]
46782edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[ADD_I]]
46792edafe83SMatt Arsenault//
4680a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___fadd_rn(
4681a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4682a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[ADD_I:%.*]] = fadd contract float [[X:%.*]], [[Y:%.*]]
4683a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[ADD_I]]
4684a0709e22SYaxun (Sam) Liu//
46852edafe83SMatt Arsenaultextern "C" __device__ float test___fadd_rn(float x, float y) {
46862edafe83SMatt Arsenault  return __fadd_rn(x, y);
46872edafe83SMatt Arsenault}
46882edafe83SMatt Arsenault
46892edafe83SMatt Arsenault// DEFAULT-LABEL: @test___fdividef(
46902edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
46912edafe83SMatt Arsenault// DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[X:%.*]], [[Y:%.*]]
46922edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[DIV_I]]
46932edafe83SMatt Arsenault//
46942edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___fdividef(
46952edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
46962edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float [[X:%.*]], [[Y:%.*]]
46972edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[DIV_I]]
46982edafe83SMatt Arsenault//
4699a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___fdividef(
4700a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4701a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[X:%.*]], [[Y:%.*]]
4702a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[DIV_I]]
4703a0709e22SYaxun (Sam) Liu//
47042edafe83SMatt Arsenaultextern "C" __device__ float test___fdividef(float x, float y) {
47052edafe83SMatt Arsenault  return __fdividef(x, y);
47062edafe83SMatt Arsenault}
47072edafe83SMatt Arsenault
47082edafe83SMatt Arsenault// DEFAULT-LABEL: @test__fmaf_rn(
47092edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
47102da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
471143fd46fdSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
47122edafe83SMatt Arsenault//
47132edafe83SMatt Arsenault// FINITEONLY-LABEL: @test__fmaf_rn(
47142edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
47152da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
471643fd46fdSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
47172edafe83SMatt Arsenault//
4718a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test__fmaf_rn(
4719a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
47202da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
4721a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
4722a0709e22SYaxun (Sam) Liu//
47232edafe83SMatt Arsenaultextern "C" __device__ float test__fmaf_rn(float x, float y, float z) {
47242edafe83SMatt Arsenault  return __fmaf_rn(x, y, z);
47252edafe83SMatt Arsenault}
47262edafe83SMatt Arsenault
47272edafe83SMatt Arsenault// DEFAULT-LABEL: @test___fmul_rn(
47282edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
47292edafe83SMatt Arsenault// DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], [[Y:%.*]]
47302edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[MUL_I]]
47312edafe83SMatt Arsenault//
47322edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___fmul_rn(
47332edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
47342edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[X:%.*]], [[Y:%.*]]
47352edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[MUL_I]]
47362edafe83SMatt Arsenault//
4737a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___fmul_rn(
4738a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4739a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], [[Y:%.*]]
4740a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[MUL_I]]
4741a0709e22SYaxun (Sam) Liu//
47422edafe83SMatt Arsenaultextern "C" __device__ float test___fmul_rn(float x, float y) {
47432edafe83SMatt Arsenault  return __fmul_rn(x, y);
47442edafe83SMatt Arsenault}
47452edafe83SMatt Arsenault
47462edafe83SMatt Arsenault// DEFAULT-LABEL: @test___frcp_rn(
47472edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
47482edafe83SMatt Arsenault// DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float 1.000000e+00, [[X:%.*]]
47492edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[DIV_I]]
47502edafe83SMatt Arsenault//
47512edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___frcp_rn(
47522edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
47532edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float 1.000000e+00, [[X:%.*]]
47542edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[DIV_I]]
47552edafe83SMatt Arsenault//
4756a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___frcp_rn(
4757a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4758a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float 1.000000e+00, [[X:%.*]]
4759a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[DIV_I]]
4760a0709e22SYaxun (Sam) Liu//
47612edafe83SMatt Arsenaultextern "C" __device__ float test___frcp_rn(float x) {
47622edafe83SMatt Arsenault  return __frcp_rn(x);
47632edafe83SMatt Arsenault}
47642edafe83SMatt Arsenault
47659e031156SMatt Arsenault// DEFAULT-LABEL: @test___frsqrt_rn(
47669e031156SMatt Arsenault// DEFAULT-NEXT:  entry:
47672da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.rsq.f32(float [[X:%.*]])
47689e031156SMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
47699e031156SMatt Arsenault//
47709e031156SMatt Arsenault// FINITEONLY-LABEL: @test___frsqrt_rn(
47719e031156SMatt Arsenault// FINITEONLY-NEXT:  entry:
47722da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.amdgcn.rsq.f32(float [[X:%.*]])
47739e031156SMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
47749e031156SMatt Arsenault//
4775a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___frsqrt_rn(
4776a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
47772da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.rsq.f32(float [[X:%.*]])
4778a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
4779a0709e22SYaxun (Sam) Liu//
47809e031156SMatt Arsenaultextern "C" __device__ float test___frsqrt_rn(float x) {
47819e031156SMatt Arsenault  return __frsqrt_rn(x);
47829e031156SMatt Arsenault}
47839e031156SMatt Arsenault
47842edafe83SMatt Arsenault// DEFAULT-LABEL: @test___fsqrt_rn(
47852edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4786a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_sqrt_f32(float noundef [[X:%.*]]) #[[ATTR12]]
47872edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
47882edafe83SMatt Arsenault//
47892edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___fsqrt_rn(
47902edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4791a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_native_sqrt_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR12]]
47922edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
47932edafe83SMatt Arsenault//
4794a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___fsqrt_rn(
4795a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4796a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_sqrt_f32(float noundef [[X:%.*]]) #[[ATTR12]]
4797a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4798a0709e22SYaxun (Sam) Liu//
47992edafe83SMatt Arsenaultextern "C" __device__ float test___fsqrt_rn(float x) {
48002edafe83SMatt Arsenault  return __fsqrt_rn(x);
48012edafe83SMatt Arsenault}
48022edafe83SMatt Arsenault
48032edafe83SMatt Arsenault// DEFAULT-LABEL: @test___fsub_rn(
48042edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
48052edafe83SMatt Arsenault// DEFAULT-NEXT:    [[SUB_I:%.*]] = fsub contract float [[X:%.*]], [[Y:%.*]]
48062edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[SUB_I]]
48072edafe83SMatt Arsenault//
48082edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___fsub_rn(
48092edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
48102edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[SUB_I:%.*]] = fsub nnan ninf contract float [[X:%.*]], [[Y:%.*]]
48112edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[SUB_I]]
48122edafe83SMatt Arsenault//
4813a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___fsub_rn(
4814a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4815a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[SUB_I:%.*]] = fsub contract float [[X:%.*]], [[Y:%.*]]
4816a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[SUB_I]]
4817a0709e22SYaxun (Sam) Liu//
48182edafe83SMatt Arsenaultextern "C" __device__ float test___fsub_rn(float x, float y) {
48192edafe83SMatt Arsenault  return __fsub_rn(x, y);
48202edafe83SMatt Arsenault}
48212edafe83SMatt Arsenault
48222edafe83SMatt Arsenault// DEFAULT-LABEL: @test___log10f(
48232edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
48242da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log10.f32(float [[X:%.*]])
4825a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    ret float [[TMP0]]
48262edafe83SMatt Arsenault//
48272edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___log10f(
48282edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
48292da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.log10.f32(float [[X:%.*]])
4830a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    ret float [[TMP0]]
4831a0709e22SYaxun (Sam) Liu//
4832a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___log10f(
4833a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
48342da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log10.f32(float [[X:%.*]])
4835a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
48362edafe83SMatt Arsenault//
48372edafe83SMatt Arsenaultextern "C" __device__ float test___log10f(float x) {
48382edafe83SMatt Arsenault  return __log10f(x);
48392edafe83SMatt Arsenault}
48402edafe83SMatt Arsenault
48412edafe83SMatt Arsenault// DEFAULT-LABEL: @test___log2f(
48422edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
48432da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.log.f32(float [[X:%.*]])
4844a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    ret float [[TMP0]]
48452edafe83SMatt Arsenault//
48462edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___log2f(
48472edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
48482da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.amdgcn.log.f32(float [[X:%.*]])
4849a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    ret float [[TMP0]]
4850a0709e22SYaxun (Sam) Liu//
4851a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___log2f(
4852a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
48532da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.log.f32(float [[X:%.*]])
4854a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
48552edafe83SMatt Arsenault//
48562edafe83SMatt Arsenaultextern "C" __device__ float test___log2f(float x) {
48572edafe83SMatt Arsenault  return __log2f(x);
48582edafe83SMatt Arsenault}
48592edafe83SMatt Arsenault
48602edafe83SMatt Arsenault// DEFAULT-LABEL: @test___logf(
48612edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
48622da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log.f32(float [[X:%.*]])
4863a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    ret float [[TMP0]]
48642edafe83SMatt Arsenault//
48652edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___logf(
48662edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
48672da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.log.f32(float [[X:%.*]])
4868a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    ret float [[TMP0]]
4869a0709e22SYaxun (Sam) Liu//
4870a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___logf(
4871a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
48722da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log.f32(float [[X:%.*]])
4873a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
48742edafe83SMatt Arsenault//
48752edafe83SMatt Arsenaultextern "C" __device__ float test___logf(float x) {
48762edafe83SMatt Arsenault  return __logf(x);
48772edafe83SMatt Arsenault}
48782edafe83SMatt Arsenault
48792edafe83SMatt Arsenault// DEFAULT-LABEL: @test___powf(
48802edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4881a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pow_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR13]]
48822edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
48832edafe83SMatt Arsenault//
48842edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___powf(
48852edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4886a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_pow_f32(float noundef nofpclass(nan inf) [[X:%.*]], float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR13]]
48872edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
48882edafe83SMatt Arsenault//
4889a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___powf(
4890a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4891a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pow_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR13]]
4892a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4893a0709e22SYaxun (Sam) Liu//
48942edafe83SMatt Arsenaultextern "C" __device__ float test___powf(float x, float y) {
48952edafe83SMatt Arsenault  return __powf(x, y);
48962edafe83SMatt Arsenault}
48972edafe83SMatt Arsenault
48982edafe83SMatt Arsenault// DEFAULT-LABEL: @test___saturatef(
48992edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
49002edafe83SMatt Arsenault// DEFAULT-NEXT:    [[CMP_I:%.*]] = fcmp contract olt float [[X:%.*]], 0.000000e+00
49012edafe83SMatt Arsenault// DEFAULT-NEXT:    [[CMP1_I:%.*]] = fcmp contract ogt float [[X]], 1.000000e+00
49022edafe83SMatt Arsenault// DEFAULT-NEXT:    [[COND_I:%.*]] = select contract i1 [[CMP1_I]], float 1.000000e+00, float [[X]]
49032edafe83SMatt Arsenault// DEFAULT-NEXT:    [[COND5_I:%.*]] = select contract i1 [[CMP_I]], float 0.000000e+00, float [[COND_I]]
49042edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[COND5_I]]
49052edafe83SMatt Arsenault//
49062edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___saturatef(
49072edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
49082edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[CMP_I:%.*]] = fcmp nnan ninf contract olt float [[X:%.*]], 0.000000e+00
49092edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[CMP1_I:%.*]] = fcmp nnan ninf contract ogt float [[X]], 1.000000e+00
49102edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[COND_I:%.*]] = select nnan ninf contract i1 [[CMP1_I]], float 1.000000e+00, float [[X]]
49112edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[COND5_I:%.*]] = select nnan ninf contract i1 [[CMP_I]], float 0.000000e+00, float [[COND_I]]
49122edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[COND5_I]]
49132edafe83SMatt Arsenault//
4914a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___saturatef(
4915a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4916a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CMP_I:%.*]] = fcmp contract olt float [[X:%.*]], 0.000000e+00
4917a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[CMP1_I:%.*]] = fcmp contract ogt float [[X]], 1.000000e+00
4918a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[COND_I:%.*]] = select contract i1 [[CMP1_I]], float 1.000000e+00, float [[X]]
4919a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[COND5_I:%.*]] = select contract i1 [[CMP_I]], float 0.000000e+00, float [[COND_I]]
4920a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[COND5_I]]
4921a0709e22SYaxun (Sam) Liu//
49222edafe83SMatt Arsenaultextern "C" __device__ float test___saturatef(float x) {
49232edafe83SMatt Arsenault  return __saturatef(x);
49242edafe83SMatt Arsenault}
49252edafe83SMatt Arsenault
49262edafe83SMatt Arsenault// DEFAULT-LABEL: @test___sincosf(
49272edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4928a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4929b57e049fSMatt Arsenault// DEFAULT-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
4930a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL1_I:%.*]] = tail call contract float @__ocml_native_cos_f32(float noundef [[X]]) #[[ATTR14]]
4931b57e049fSMatt Arsenault// DEFAULT-NEXT:    store float [[CALL1_I]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
49322edafe83SMatt Arsenault// DEFAULT-NEXT:    ret void
49332edafe83SMatt Arsenault//
49342edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___sincosf(
49352edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4936a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract nofpclass(nan inf) float @__ocml_native_sin_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
4937b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
4938a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL1_I:%.*]] = tail call nnan ninf contract nofpclass(nan inf) float @__ocml_native_cos_f32(float noundef nofpclass(nan inf) [[X]]) #[[ATTR14]]
4939b57e049fSMatt Arsenault// FINITEONLY-NEXT:    store float [[CALL1_I]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
49402edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret void
49412edafe83SMatt Arsenault//
4942a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___sincosf(
4943a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4944a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4945a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
4946a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL1_I:%.*]] = tail call contract float @__ocml_native_cos_f32(float noundef [[X]]) #[[ATTR14]]
4947a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    store float [[CALL1_I]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
4948a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret void
4949a0709e22SYaxun (Sam) Liu//
49502edafe83SMatt Arsenaultextern "C" __device__ void test___sincosf(float x, float *y, float *z) {
49512edafe83SMatt Arsenault  __sincosf(x, y, z);
49522edafe83SMatt Arsenault}
49532edafe83SMatt Arsenault
49542edafe83SMatt Arsenault// DEFAULT-LABEL: @test___sinf(
49552edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4956a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
49572edafe83SMatt Arsenault// DEFAULT-NEXT:    ret float [[CALL_I]]
49582edafe83SMatt Arsenault//
49592edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___sinf(
49602edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4961a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_native_sin_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
49622edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret float [[CALL_I]]
49632edafe83SMatt Arsenault//
4964a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___sinf(
4965a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4966a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4967a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[CALL_I]]
4968a0709e22SYaxun (Sam) Liu//
49692edafe83SMatt Arsenaultextern "C" __device__ float test___sinf(float x) {
49702edafe83SMatt Arsenault  return __sinf(x);
49712edafe83SMatt Arsenault}
49722edafe83SMatt Arsenault
49732edafe83SMatt Arsenault// DEFAULT-LABEL: @test___tanf(
49742edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
4975a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I3_I:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4976a24b0c35SMatt Arsenault// DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X]]) #[[ATTR14]]
49771a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.amdgcn.rcp.f32(float [[CALL_I_I]])
49781a2e77cfSAmara Emerson// DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[CALL_I3_I]], [[TMP0]]
4979a0709e22SYaxun (Sam) Liu// DEFAULT-NEXT:    ret float [[MUL_I]]
49802edafe83SMatt Arsenault//
49812edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___tanf(
49822edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
4983a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I3_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_native_sin_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
4984a24b0c35SMatt Arsenault// FINITEONLY-NEXT:    [[CALL_I_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_native_cos_f32(float noundef nofpclass(nan inf) [[X]]) #[[ATTR14]]
49851a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.amdgcn.rcp.f32(float [[CALL_I_I]])
49861a2e77cfSAmara Emerson// FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[CALL_I3_I]], [[TMP0]]
4987a0709e22SYaxun (Sam) Liu// FINITEONLY-NEXT:    ret float [[MUL_I]]
4988a0709e22SYaxun (Sam) Liu//
4989a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___tanf(
4990a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
4991a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I3_I:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4992a24b0c35SMatt Arsenault// APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X]]) #[[ATTR14]]
49931a2e77cfSAmara Emerson// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.amdgcn.rcp.f32(float [[CALL_I_I]])
49941a2e77cfSAmara Emerson// APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[CALL_I3_I]], [[TMP0]]
4995a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[MUL_I]]
49962edafe83SMatt Arsenault//
49972edafe83SMatt Arsenaultextern "C" __device__ float test___tanf(float x) {
49982edafe83SMatt Arsenault  return __tanf(x);
49992edafe83SMatt Arsenault}
50002edafe83SMatt Arsenault
50012edafe83SMatt Arsenault// DEFAULT-LABEL: @test___dadd_rn(
50022edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
50032edafe83SMatt Arsenault// DEFAULT-NEXT:    [[ADD_I:%.*]] = fadd contract double [[X:%.*]], [[Y:%.*]]
50042edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[ADD_I]]
50052edafe83SMatt Arsenault//
50062edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___dadd_rn(
50072edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
50082edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[ADD_I:%.*]] = fadd nnan ninf contract double [[X:%.*]], [[Y:%.*]]
50092edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[ADD_I]]
50102edafe83SMatt Arsenault//
5011a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___dadd_rn(
5012a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
5013a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[ADD_I:%.*]] = fadd contract double [[X:%.*]], [[Y:%.*]]
5014a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[ADD_I]]
5015a0709e22SYaxun (Sam) Liu//
50162edafe83SMatt Arsenaultextern "C" __device__ double test___dadd_rn(double x, double y) {
50172edafe83SMatt Arsenault  return __dadd_rn(x, y);
50182edafe83SMatt Arsenault}
50192edafe83SMatt Arsenault
50202edafe83SMatt Arsenault// DEFAULT-LABEL: @test___ddiv_rn(
50212edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
50222edafe83SMatt Arsenault// DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[X:%.*]], [[Y:%.*]]
50232edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[DIV_I]]
50242edafe83SMatt Arsenault//
50252edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___ddiv_rn(
50262edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
50272edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract double [[X:%.*]], [[Y:%.*]]
50282edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[DIV_I]]
50292edafe83SMatt Arsenault//
5030a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___ddiv_rn(
5031a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
5032a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[X:%.*]], [[Y:%.*]]
5033a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[DIV_I]]
5034a0709e22SYaxun (Sam) Liu//
50352edafe83SMatt Arsenaultextern "C" __device__ double test___ddiv_rn(double x, double y) {
50362edafe83SMatt Arsenault  return __ddiv_rn(x, y);
50372edafe83SMatt Arsenault}
50382edafe83SMatt Arsenault
50392edafe83SMatt Arsenault// DEFAULT-LABEL: @test___dmul_rn(
50402edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
50412edafe83SMatt Arsenault// DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract double [[X:%.*]], [[Y:%.*]]
50422edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[MUL_I]]
50432edafe83SMatt Arsenault//
50442edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___dmul_rn(
50452edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
50462edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract double [[X:%.*]], [[Y:%.*]]
50472edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[MUL_I]]
50482edafe83SMatt Arsenault//
5049a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___dmul_rn(
5050a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
5051a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract double [[X:%.*]], [[Y:%.*]]
5052a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[MUL_I]]
5053a0709e22SYaxun (Sam) Liu//
50542edafe83SMatt Arsenaultextern "C" __device__ double test___dmul_rn(double x, double y) {
50552edafe83SMatt Arsenault  return __dmul_rn(x, y);
50562edafe83SMatt Arsenault}
50572edafe83SMatt Arsenault
50582edafe83SMatt Arsenault// DEFAULT-LABEL: @test___drcp_rn(
50592edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
50602edafe83SMatt Arsenault// DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract double 1.000000e+00, [[X:%.*]]
50612edafe83SMatt Arsenault// DEFAULT-NEXT:    ret double [[DIV_I]]
50622edafe83SMatt Arsenault//
50632edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___drcp_rn(
50642edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
50652edafe83SMatt Arsenault// FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract double 1.000000e+00, [[X:%.*]]
50662edafe83SMatt Arsenault// FINITEONLY-NEXT:    ret double [[DIV_I]]
50672edafe83SMatt Arsenault//
5068a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___drcp_rn(
5069a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
5070a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract double 1.000000e+00, [[X:%.*]]
5071a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[DIV_I]]
5072a0709e22SYaxun (Sam) Liu//
50732edafe83SMatt Arsenaultextern "C" __device__ double test___drcp_rn(double x) {
50742edafe83SMatt Arsenault  return __drcp_rn(x);
50752edafe83SMatt Arsenault}
50762edafe83SMatt Arsenault
50772edafe83SMatt Arsenault// DEFAULT-LABEL: @test___dsqrt_rn(
50782edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
50792da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
508063dbe7e8SMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
50812edafe83SMatt Arsenault//
50822edafe83SMatt Arsenault// FINITEONLY-LABEL: @test___dsqrt_rn(
50832edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
50842da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
508563dbe7e8SMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
50862edafe83SMatt Arsenault//
5087a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test___dsqrt_rn(
5088a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
50892da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
509063dbe7e8SMatt Arsenault// APPROX-NEXT:    ret double [[TMP0]]
5091a0709e22SYaxun (Sam) Liu//
50922edafe83SMatt Arsenaultextern "C" __device__ double test___dsqrt_rn(double x) {
50932edafe83SMatt Arsenault  return __dsqrt_rn(x);
50942edafe83SMatt Arsenault}
50952edafe83SMatt Arsenault
50962edafe83SMatt Arsenault// DEFAULT-LABEL: @test__fma_rn(
50972edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
50982da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
509943fd46fdSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
51002edafe83SMatt Arsenault//
51012edafe83SMatt Arsenault// FINITEONLY-LABEL: @test__fma_rn(
51022edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
51032da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
510443fd46fdSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
51052edafe83SMatt Arsenault//
5106a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test__fma_rn(
5107a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
51082da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
5109a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
5110a0709e22SYaxun (Sam) Liu//
51112edafe83SMatt Arsenaultextern "C" __device__ double test__fma_rn(double x, double y, double z) {
51122edafe83SMatt Arsenault  return __fma_rn(x, y, z);
51132edafe83SMatt Arsenault}
51142edafe83SMatt Arsenault
51152edafe83SMatt Arsenault// DEFAULT-LABEL: @test_float_min(
51162edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
51172da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
511866d4dbaeSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
51192edafe83SMatt Arsenault//
51202edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_float_min(
51212edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
51222da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
512366d4dbaeSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
51242edafe83SMatt Arsenault//
5125a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_float_min(
5126a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
51272da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
5128a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
5129a0709e22SYaxun (Sam) Liu//
51302edafe83SMatt Arsenaultextern "C" __device__ float test_float_min(float x, float y) {
51312edafe83SMatt Arsenault  return min(x, y);
51322edafe83SMatt Arsenault}
51332edafe83SMatt Arsenault
51342edafe83SMatt Arsenault// DEFAULT-LABEL: @test_float_max(
51352edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
51362da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
513766d4dbaeSMatt Arsenault// DEFAULT-NEXT:    ret float [[TMP0]]
51382edafe83SMatt Arsenault//
51392edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_float_max(
51402edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
51412da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
514266d4dbaeSMatt Arsenault// FINITEONLY-NEXT:    ret float [[TMP0]]
51432edafe83SMatt Arsenault//
5144a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_float_max(
5145a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
51462da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
5147a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret float [[TMP0]]
5148a0709e22SYaxun (Sam) Liu//
51492edafe83SMatt Arsenaultextern "C" __device__ float test_float_max(float x, float y) {
51502edafe83SMatt Arsenault  return max(x, y);
51512edafe83SMatt Arsenault}
51522edafe83SMatt Arsenault
51532edafe83SMatt Arsenault// DEFAULT-LABEL: @test_double_min(
51542edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
51552da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
515666d4dbaeSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
51572edafe83SMatt Arsenault//
51582edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_double_min(
51592edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
51602da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
516166d4dbaeSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
51622edafe83SMatt Arsenault//
5163a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_double_min(
5164a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
51652da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
5166a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
5167a0709e22SYaxun (Sam) Liu//
51682edafe83SMatt Arsenaultextern "C" __device__ double test_double_min(double x, double y) {
51692edafe83SMatt Arsenault  return min(x, y);
51702edafe83SMatt Arsenault}
51712edafe83SMatt Arsenault
51722edafe83SMatt Arsenault// DEFAULT-LABEL: @test_double_max(
51732edafe83SMatt Arsenault// DEFAULT-NEXT:  entry:
51742da4960fSNoah Goldstein// DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
517566d4dbaeSMatt Arsenault// DEFAULT-NEXT:    ret double [[TMP0]]
51762edafe83SMatt Arsenault//
51772edafe83SMatt Arsenault// FINITEONLY-LABEL: @test_double_max(
51782edafe83SMatt Arsenault// FINITEONLY-NEXT:  entry:
51792da4960fSNoah Goldstein// FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
518066d4dbaeSMatt Arsenault// FINITEONLY-NEXT:    ret double [[TMP0]]
51812edafe83SMatt Arsenault//
5182a0709e22SYaxun (Sam) Liu// APPROX-LABEL: @test_double_max(
5183a0709e22SYaxun (Sam) Liu// APPROX-NEXT:  entry:
51842da4960fSNoah Goldstein// APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
5185a0709e22SYaxun (Sam) Liu// APPROX-NEXT:    ret double [[TMP0]]
5186a0709e22SYaxun (Sam) Liu//
51872edafe83SMatt Arsenaultextern "C" __device__ double test_double_max(double x, double y) {
51882edafe83SMatt Arsenault  return max(x, y);
51892edafe83SMatt Arsenault}
51902edafe83SMatt Arsenault// CHECK-LABEL: @test_int_min(
51912edafe83SMatt Arsenault// CHECK-NEXT:  entry:
51922da4960fSNoah Goldstein// CHECK-NEXT:    [[COND_I:%.*]] = tail call noundef i32 @llvm.smin.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
51934086ea33SMatt Arsenault// CHECK-NEXT:    ret i32 [[COND_I]]
51942edafe83SMatt Arsenault//
51952edafe83SMatt Arsenaultextern "C" __device__ int test_int_min(int x, int y) {
51962edafe83SMatt Arsenault  return min(x, y);
51972edafe83SMatt Arsenault}
51982edafe83SMatt Arsenault
51992edafe83SMatt Arsenault// CHECK-LABEL: @test_int_max(
52002edafe83SMatt Arsenault// CHECK-NEXT:  entry:
52012da4960fSNoah Goldstein// CHECK-NEXT:    [[COND_I:%.*]] = tail call noundef i32 @llvm.smax.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
52024086ea33SMatt Arsenault// CHECK-NEXT:    ret i32 [[COND_I]]
52032edafe83SMatt Arsenault//
52042edafe83SMatt Arsenaultextern "C" __device__ int test_int_max(int x, int y) {
52052edafe83SMatt Arsenault  return max(x, y);
52062edafe83SMatt Arsenault}
5207