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