Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / clang / test / Headers / __clang_hip_math.hip
blobb57c38d70b14c79a66f89fe0d6533ff61c230bda
1 // NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py
2 // REQUIRES: amdgpu-registered-target
4 // Test without OCML_BASIC_ROUNDED_OPERATIONS
5 // RUN: %clang_cc1 -include __clang_hip_runtime_wrapper.h \
6 // RUN:   -internal-isystem %S/../../lib/Headers/cuda_wrappers \
7 // RUN:   -internal-isystem %S/Inputs/include \
8 // RUN:   -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-unknown \
9 // RUN:   -target-cpu gfx906 -emit-llvm %s -fcuda-is-device -O1 -o - \
10 // RUN:   -D__HIPCC_RTC__ | FileCheck -check-prefixes=CHECK,DEFAULT %s
12 // Check that we end up with fast math flags set on intrinsic calls
13 // RUN: %clang_cc1 -include __clang_hip_runtime_wrapper.h \
14 // RUN:   -internal-isystem %S/../../lib/Headers/cuda_wrappers \
15 // RUN:   -internal-isystem %S/Inputs/include \
16 // RUN:   -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-unknown \
17 // RUN:   -target-cpu gfx906 -emit-llvm %s -fcuda-is-device -O1 -ffinite-math-only -o - \
18 // RUN:   -D__HIPCC_RTC__ | FileCheck -check-prefixes=CHECK,FINITEONLY %s
20 // Check that we end up with -fapprox-func set on intrinsic calls
21 // RUN: %clang_cc1 -include __clang_hip_runtime_wrapper.h \
22 // RUN:   -internal-isystem %S/../../lib/Headers/cuda_wrappers \
23 // RUN:   -internal-isystem %S/Inputs/include \
24 // RUN:   -triple amdgcn-amd-amdhsa -aux-triple x86_64-unknown-unknown \
25 // RUN:   -target-cpu gfx906 -emit-llvm %s -fcuda-is-device -O1 -fgpu-approx-transcendentals -o - \
26 // RUN:   -D__HIPCC_RTC__ | FileCheck -check-prefixes=CHECK,APPROX %s
28 #define BOOL_TYPE int
29 typedef unsigned long long uint64_t;
31 // CHECK-LABEL: @test___make_mantissa_base8(
32 // CHECK-NEXT:  entry:
33 // CHECK-NEXT:    br label [[WHILE_COND_I:%.*]]
34 // CHECK:       while.cond.i:
35 // CHECK-NEXT:    [[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
36 // CHECK-NEXT:    [[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_1_I:%.*]], [[CLEANUP_I]] ]
37 // CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA4:![0-9]+]]
38 // CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
39 // CHECK-NEXT:    br i1 [[CMP_NOT_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
40 // CHECK:       while.body.i:
41 // CHECK-NEXT:    [[TMP1:%.*]] = and i8 [[TMP0]], -8
42 // CHECK-NEXT:    [[OR_COND_I:%.*]] = icmp eq i8 [[TMP1]], 48
43 // CHECK-NEXT:    br i1 [[OR_COND_I]], label [[IF_THEN_I:%.*]], label [[CLEANUP_I]]
44 // CHECK:       if.then.i:
45 // CHECK-NEXT:    [[MUL_I:%.*]] = shl i64 [[__R_0_I]], 3
46 // CHECK-NEXT:    [[CONV5_I:%.*]] = sext i8 [[TMP0]] to i64
47 // CHECK-NEXT:    [[ADD_I:%.*]] = add i64 [[MUL_I]], -48
48 // CHECK-NEXT:    [[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV5_I]]
49 // CHECK-NEXT:    [[INCDEC_PTR_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I]], i64 1
50 // CHECK-NEXT:    br label [[CLEANUP_I]]
51 // CHECK:       cleanup.i:
52 // CHECK-NEXT:    [[__TAGP_ADDR_1_I]] = phi ptr [ [[INCDEC_PTR_I]], [[IF_THEN_I]] ], [ [[__TAGP_ADDR_0_I]], [[WHILE_BODY_I]] ]
53 // CHECK-NEXT:    [[__R_1_I]] = phi i64 [ [[SUB_I]], [[IF_THEN_I]] ], [ [[__R_0_I]], [[WHILE_BODY_I]] ]
54 // CHECK-NEXT:    br i1 [[OR_COND_I]], label [[WHILE_COND_I]], label [[_ZL21__MAKE_MANTISSA_BASE8PKC_EXIT]], !llvm.loop [[LOOP7:![0-9]+]]
55 // CHECK:       _ZL21__make_mantissa_base8PKc.exit:
56 // CHECK-NEXT:    [[RETVAL_2_I:%.*]] = phi i64 [ 0, [[CLEANUP_I]] ], [ [[__R_0_I]], [[WHILE_COND_I]] ]
57 // CHECK-NEXT:    ret i64 [[RETVAL_2_I]]
59 extern "C" __device__ uint64_t test___make_mantissa_base8(const char *p) {
60   return __make_mantissa_base8(p);
63 // CHECK-LABEL: @test___make_mantissa_base10(
64 // CHECK-NEXT:  entry:
65 // CHECK-NEXT:    br label [[WHILE_COND_I:%.*]]
66 // CHECK:       while.cond.i:
67 // CHECK-NEXT:    [[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
68 // CHECK-NEXT:    [[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_1_I:%.*]], [[CLEANUP_I]] ]
69 // CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA4]]
70 // CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
71 // CHECK-NEXT:    br i1 [[CMP_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE10PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
72 // CHECK:       while.body.i:
73 // CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[TMP0]], -48
74 // CHECK-NEXT:    [[OR_COND_I:%.*]] = icmp ult i8 [[TMP1]], 10
75 // CHECK-NEXT:    br i1 [[OR_COND_I]], label [[IF_THEN_I:%.*]], label [[CLEANUP_I]]
76 // CHECK:       if.then.i:
77 // CHECK-NEXT:    [[MUL_I:%.*]] = mul i64 [[__R_0_I]], 10
78 // CHECK-NEXT:    [[CONV5_I:%.*]] = sext i8 [[TMP0]] to i64
79 // CHECK-NEXT:    [[ADD_I:%.*]] = add i64 [[MUL_I]], -48
80 // CHECK-NEXT:    [[SUB_I:%.*]] = add i64 [[ADD_I]], [[CONV5_I]]
81 // CHECK-NEXT:    [[INCDEC_PTR_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I]], i64 1
82 // CHECK-NEXT:    br label [[CLEANUP_I]]
83 // CHECK:       cleanup.i:
84 // CHECK-NEXT:    [[__TAGP_ADDR_1_I]] = phi ptr [ [[INCDEC_PTR_I]], [[IF_THEN_I]] ], [ [[__TAGP_ADDR_0_I]], [[WHILE_BODY_I]] ]
85 // CHECK-NEXT:    [[__R_1_I]] = phi i64 [ [[SUB_I]], [[IF_THEN_I]] ], [ [[__R_0_I]], [[WHILE_BODY_I]] ]
86 // CHECK-NEXT:    br i1 [[OR_COND_I]], label [[WHILE_COND_I]], label [[_ZL22__MAKE_MANTISSA_BASE10PKC_EXIT]], !llvm.loop [[LOOP10:![0-9]+]]
87 // CHECK:       _ZL22__make_mantissa_base10PKc.exit:
88 // CHECK-NEXT:    [[RETVAL_2_I:%.*]] = phi i64 [ 0, [[CLEANUP_I]] ], [ [[__R_0_I]], [[WHILE_COND_I]] ]
89 // CHECK-NEXT:    ret i64 [[RETVAL_2_I]]
91 extern "C" __device__ uint64_t test___make_mantissa_base10(const char *p) {
92   return __make_mantissa_base10(p);
95 // CHECK-LABEL: @test___make_mantissa_base16(
96 // CHECK-NEXT:  entry:
97 // CHECK-NEXT:    br label [[WHILE_COND_I:%.*]]
98 // CHECK:       while.cond.i:
99 // CHECK-NEXT:    [[__TAGP_ADDR_0_I:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY:%.*]] ], [ [[__TAGP_ADDR_1_I:%.*]], [[CLEANUP_I:%.*]] ]
100 // CHECK-NEXT:    [[__R_0_I:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[__R_2_I:%.*]], [[CLEANUP_I]] ]
101 // CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I]], align 1, !tbaa [[TBAA4]]
102 // CHECK-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i8 [[TMP0]], 0
103 // CHECK-NEXT:    br i1 [[CMP_NOT_I]], label [[_ZL22__MAKE_MANTISSA_BASE16PKC_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
104 // CHECK:       while.body.i:
105 // CHECK-NEXT:    [[TMP1:%.*]] = add i8 [[TMP0]], -48
106 // CHECK-NEXT:    [[OR_COND_I:%.*]] = icmp ult i8 [[TMP1]], 10
107 // CHECK-NEXT:    br i1 [[OR_COND_I]], label [[IF_END31_I:%.*]], label [[IF_ELSE_I:%.*]]
108 // CHECK:       if.else.i:
109 // CHECK-NEXT:    [[TMP2:%.*]] = add i8 [[TMP0]], -97
110 // CHECK-NEXT:    [[OR_COND33_I:%.*]] = icmp ult i8 [[TMP2]], 6
111 // CHECK-NEXT:    br i1 [[OR_COND33_I]], label [[IF_END31_I]], label [[IF_ELSE17_I:%.*]]
112 // CHECK:       if.else17.i:
113 // CHECK-NEXT:    [[TMP3:%.*]] = add i8 [[TMP0]], -65
114 // CHECK-NEXT:    [[OR_COND34_I:%.*]] = icmp ult i8 [[TMP3]], 6
115 // CHECK-NEXT:    br i1 [[OR_COND34_I]], label [[IF_END31_I]], label [[CLEANUP_I]]
116 // CHECK:       if.end31.i:
117 // CHECK-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I]] ], [ -87, [[IF_ELSE_I]] ], [ -55, [[IF_ELSE17_I]] ]
118 // CHECK-NEXT:    [[MUL24_I:%.*]] = shl i64 [[__R_0_I]], 4
119 // CHECK-NEXT:    [[CONV25_I:%.*]] = sext i8 [[TMP0]] to i64
120 // CHECK-NEXT:    [[ADD26_I:%.*]] = add i64 [[MUL24_I]], [[DOTSINK]]
121 // CHECK-NEXT:    [[ADD28_I:%.*]] = add i64 [[ADD26_I]], [[CONV25_I]]
122 // CHECK-NEXT:    [[INCDEC_PTR_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I]], i64 1
123 // CHECK-NEXT:    br label [[CLEANUP_I]]
124 // CHECK:       cleanup.i:
125 // CHECK-NEXT:    [[__TAGP_ADDR_1_I]] = phi ptr [ [[INCDEC_PTR_I]], [[IF_END31_I]] ], [ [[__TAGP_ADDR_0_I]], [[IF_ELSE17_I]] ]
126 // CHECK-NEXT:    [[__R_2_I]] = phi i64 [ [[ADD28_I]], [[IF_END31_I]] ], [ [[__R_0_I]], [[IF_ELSE17_I]] ]
127 // CHECK-NEXT:    [[COND_I:%.*]] = phi i1 [ true, [[IF_END31_I]] ], [ false, [[IF_ELSE17_I]] ]
128 // CHECK-NEXT:    br i1 [[COND_I]], label [[WHILE_COND_I]], label [[_ZL22__MAKE_MANTISSA_BASE16PKC_EXIT]], !llvm.loop [[LOOP11:![0-9]+]]
129 // CHECK:       _ZL22__make_mantissa_base16PKc.exit:
130 // CHECK-NEXT:    [[RETVAL_2_I:%.*]] = phi i64 [ 0, [[CLEANUP_I]] ], [ [[__R_0_I]], [[WHILE_COND_I]] ]
131 // CHECK-NEXT:    ret i64 [[RETVAL_2_I]]
133 extern "C" __device__ uint64_t test___make_mantissa_base16(const char *p) {
134   return __make_mantissa_base16(p);
137 // CHECK-LABEL: @test___make_mantissa(
138 // CHECK-NEXT:  entry:
139 // CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[P:%.*]], align 1, !tbaa [[TBAA4]]
140 // CHECK-NEXT:    [[CMP_I:%.*]] = icmp eq i8 [[TMP0]], 48
141 // CHECK-NEXT:    br i1 [[CMP_I]], label [[IF_THEN_I:%.*]], label [[WHILE_COND_I14_I:%.*]]
142 // CHECK:       if.then.i:
143 // CHECK-NEXT:    [[INCDEC_PTR_I:%.*]] = getelementptr inbounds i8, ptr [[P]], i64 1
144 // CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[INCDEC_PTR_I]], align 1, !tbaa [[TBAA4]]
145 // CHECK-NEXT:    switch i8 [[TMP1]], label [[WHILE_COND_I_I:%.*]] [
146 // CHECK-NEXT:    i8 120, label [[WHILE_COND_I30_I_PREHEADER:%.*]]
147 // CHECK-NEXT:    i8 88, label [[WHILE_COND_I30_I_PREHEADER]]
148 // CHECK-NEXT:    ]
149 // CHECK:       while.cond.i30.i.preheader:
150 // CHECK-NEXT:    br label [[WHILE_COND_I30_I:%.*]]
151 // CHECK:       while.cond.i30.i:
152 // 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]] ]
153 // CHECK-NEXT:    [[__R_0_I32_I:%.*]] = phi i64 [ [[__R_2_I_I:%.*]], [[CLEANUP_I36_I]] ], [ 0, [[WHILE_COND_I30_I_PREHEADER]] ]
154 // CHECK-NEXT:    [[TMP2:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I31_I]], align 1, !tbaa [[TBAA4]]
155 // CHECK-NEXT:    [[CMP_NOT_I33_I:%.*]] = icmp eq i8 [[TMP2]], 0
156 // CHECK-NEXT:    br i1 [[CMP_NOT_I33_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT:%.*]], label [[WHILE_BODY_I34_I:%.*]]
157 // CHECK:       while.body.i34.i:
158 // CHECK-NEXT:    [[TMP3:%.*]] = add i8 [[TMP2]], -48
159 // CHECK-NEXT:    [[OR_COND_I35_I:%.*]] = icmp ult i8 [[TMP3]], 10
160 // CHECK-NEXT:    br i1 [[OR_COND_I35_I]], label [[IF_END31_I_I:%.*]], label [[IF_ELSE_I_I:%.*]]
161 // CHECK:       if.else.i.i:
162 // CHECK-NEXT:    [[TMP4:%.*]] = add i8 [[TMP2]], -97
163 // CHECK-NEXT:    [[OR_COND33_I_I:%.*]] = icmp ult i8 [[TMP4]], 6
164 // CHECK-NEXT:    br i1 [[OR_COND33_I_I]], label [[IF_END31_I_I]], label [[IF_ELSE17_I_I:%.*]]
165 // CHECK:       if.else17.i.i:
166 // CHECK-NEXT:    [[TMP5:%.*]] = add i8 [[TMP2]], -65
167 // CHECK-NEXT:    [[OR_COND34_I_I:%.*]] = icmp ult i8 [[TMP5]], 6
168 // CHECK-NEXT:    br i1 [[OR_COND34_I_I]], label [[IF_END31_I_I]], label [[CLEANUP_I36_I]]
169 // CHECK:       if.end31.i.i:
170 // CHECK-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I34_I]] ], [ -87, [[IF_ELSE_I_I]] ], [ -55, [[IF_ELSE17_I_I]] ]
171 // CHECK-NEXT:    [[MUL24_I_I:%.*]] = shl i64 [[__R_0_I32_I]], 4
172 // CHECK-NEXT:    [[CONV25_I_I:%.*]] = sext i8 [[TMP2]] to i64
173 // CHECK-NEXT:    [[ADD26_I_I:%.*]] = add i64 [[MUL24_I_I]], [[DOTSINK]]
174 // CHECK-NEXT:    [[ADD28_I_I:%.*]] = add i64 [[ADD26_I_I]], [[CONV25_I_I]]
175 // CHECK-NEXT:    [[INCDEC_PTR_I40_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I31_I]], i64 1
176 // CHECK-NEXT:    br label [[CLEANUP_I36_I]]
177 // CHECK:       cleanup.i36.i:
178 // 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]] ]
179 // CHECK-NEXT:    [[__R_2_I_I]] = phi i64 [ [[ADD28_I_I]], [[IF_END31_I_I]] ], [ [[__R_0_I32_I]], [[IF_ELSE17_I_I]] ]
180 // CHECK-NEXT:    [[COND_I_I:%.*]] = phi i1 [ true, [[IF_END31_I_I]] ], [ false, [[IF_ELSE17_I_I]] ]
181 // CHECK-NEXT:    br i1 [[COND_I_I]], label [[WHILE_COND_I30_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], !llvm.loop [[LOOP11]]
182 // CHECK:       while.cond.i.i:
183 // CHECK-NEXT:    [[__TAGP_ADDR_0_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I_I:%.*]], [[CLEANUP_I_I:%.*]] ], [ [[INCDEC_PTR_I]], [[IF_THEN_I]] ]
184 // CHECK-NEXT:    [[__R_0_I_I:%.*]] = phi i64 [ [[__R_1_I_I:%.*]], [[CLEANUP_I_I]] ], [ 0, [[IF_THEN_I]] ]
185 // CHECK-NEXT:    [[TMP6:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I_I]], align 1, !tbaa [[TBAA4]]
186 // CHECK-NEXT:    [[CMP_NOT_I_I:%.*]] = icmp eq i8 [[TMP6]], 0
187 // CHECK-NEXT:    br i1 [[CMP_NOT_I_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], label [[WHILE_BODY_I_I:%.*]]
188 // CHECK:       while.body.i.i:
189 // CHECK-NEXT:    [[TMP7:%.*]] = and i8 [[TMP6]], -8
190 // CHECK-NEXT:    [[OR_COND_I_I:%.*]] = icmp eq i8 [[TMP7]], 48
191 // CHECK-NEXT:    br i1 [[OR_COND_I_I]], label [[IF_THEN_I_I:%.*]], label [[CLEANUP_I_I]]
192 // CHECK:       if.then.i.i:
193 // CHECK-NEXT:    [[MUL_I_I:%.*]] = shl i64 [[__R_0_I_I]], 3
194 // CHECK-NEXT:    [[CONV5_I_I:%.*]] = sext i8 [[TMP6]] to i64
195 // CHECK-NEXT:    [[ADD_I_I:%.*]] = add i64 [[MUL_I_I]], -48
196 // CHECK-NEXT:    [[SUB_I_I:%.*]] = add i64 [[ADD_I_I]], [[CONV5_I_I]]
197 // CHECK-NEXT:    [[INCDEC_PTR_I_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I_I]], i64 1
198 // CHECK-NEXT:    br label [[CLEANUP_I_I]]
199 // CHECK:       cleanup.i.i:
200 // 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]] ]
201 // CHECK-NEXT:    [[__R_1_I_I]] = phi i64 [ [[SUB_I_I]], [[IF_THEN_I_I]] ], [ [[__R_0_I_I]], [[WHILE_BODY_I_I]] ]
202 // CHECK-NEXT:    br i1 [[OR_COND_I_I]], label [[WHILE_COND_I_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], !llvm.loop [[LOOP7]]
203 // CHECK:       while.cond.i14.i:
204 // CHECK-NEXT:    [[__TAGP_ADDR_0_I15_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I21_I:%.*]], [[CLEANUP_I20_I:%.*]] ], [ [[P]], [[ENTRY:%.*]] ]
205 // CHECK-NEXT:    [[__R_0_I16_I:%.*]] = phi i64 [ [[__R_1_I22_I:%.*]], [[CLEANUP_I20_I]] ], [ 0, [[ENTRY]] ]
206 // CHECK-NEXT:    [[TMP8:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I15_I]], align 1, !tbaa [[TBAA4]]
207 // CHECK-NEXT:    [[CMP_NOT_I17_I:%.*]] = icmp eq i8 [[TMP8]], 0
208 // CHECK-NEXT:    br i1 [[CMP_NOT_I17_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], label [[WHILE_BODY_I18_I:%.*]]
209 // CHECK:       while.body.i18.i:
210 // CHECK-NEXT:    [[TMP9:%.*]] = add i8 [[TMP8]], -48
211 // CHECK-NEXT:    [[OR_COND_I19_I:%.*]] = icmp ult i8 [[TMP9]], 10
212 // CHECK-NEXT:    br i1 [[OR_COND_I19_I]], label [[IF_THEN_I24_I:%.*]], label [[CLEANUP_I20_I]]
213 // CHECK:       if.then.i24.i:
214 // CHECK-NEXT:    [[MUL_I25_I:%.*]] = mul i64 [[__R_0_I16_I]], 10
215 // CHECK-NEXT:    [[CONV5_I26_I:%.*]] = sext i8 [[TMP8]] to i64
216 // CHECK-NEXT:    [[ADD_I27_I:%.*]] = add i64 [[MUL_I25_I]], -48
217 // CHECK-NEXT:    [[SUB_I28_I:%.*]] = add i64 [[ADD_I27_I]], [[CONV5_I26_I]]
218 // CHECK-NEXT:    [[INCDEC_PTR_I29_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I15_I]], i64 1
219 // CHECK-NEXT:    br label [[CLEANUP_I20_I]]
220 // CHECK:       cleanup.i20.i:
221 // 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]] ]
222 // CHECK-NEXT:    [[__R_1_I22_I]] = phi i64 [ [[SUB_I28_I]], [[IF_THEN_I24_I]] ], [ [[__R_0_I16_I]], [[WHILE_BODY_I18_I]] ]
223 // CHECK-NEXT:    br i1 [[OR_COND_I19_I]], label [[WHILE_COND_I14_I]], label [[_ZL15__MAKE_MANTISSAPKC_EXIT]], !llvm.loop [[LOOP10]]
224 // CHECK:       _ZL15__make_mantissaPKc.exit:
225 // 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]] ]
226 // CHECK-NEXT:    ret i64 [[RETVAL_0_I]]
228 extern "C" __device__ uint64_t test___make_mantissa(const char *p) {
229   return __make_mantissa(p);
232 // CHECK-LABEL: @test_abs(
233 // CHECK-NEXT:  entry:
234 // CHECK-NEXT:    [[TMP0:%.*]] = tail call noundef i32 @llvm.abs.i32(i32 [[X:%.*]], i1 true)
235 // CHECK-NEXT:    ret i32 [[TMP0]]
237 extern "C" __device__ int test_abs(int x) {
238   return abs(x);
241 // CHECK-LABEL: @test_labs(
242 // CHECK-NEXT:  entry:
243 // CHECK-NEXT:    [[TMP0:%.*]] = tail call noundef i64 @llvm.abs.i64(i64 [[X:%.*]], i1 true)
244 // CHECK-NEXT:    ret i64 [[TMP0]]
246 extern "C" __device__ long test_labs(long x) {
247   return labs(x);
250 // CHECK-LABEL: @test_llabs(
251 // CHECK-NEXT:  entry:
252 // CHECK-NEXT:    [[TMP0:%.*]] = tail call noundef i64 @llvm.abs.i64(i64 [[X:%.*]], i1 true)
253 // CHECK-NEXT:    ret i64 [[TMP0]]
255 extern "C" __device__ long long test_llabs(long x) {
256   return llabs(x);
259 // DEFAULT-LABEL: @test_acosf(
260 // DEFAULT-NEXT:  entry:
261 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_acos_f32(float noundef [[X:%.*]]) #[[ATTR14:[0-9]+]]
262 // DEFAULT-NEXT:    ret float [[CALL_I]]
264 // FINITEONLY-LABEL: @test_acosf(
265 // FINITEONLY-NEXT:  entry:
266 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_acos_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14:[0-9]+]]
267 // FINITEONLY-NEXT:    ret float [[CALL_I]]
269 // APPROX-LABEL: @test_acosf(
270 // APPROX-NEXT:  entry:
271 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_acos_f32(float noundef [[X:%.*]]) #[[ATTR14:[0-9]+]]
272 // APPROX-NEXT:    ret float [[CALL_I]]
274 extern "C" __device__ float test_acosf(float x) {
275   return acosf(x);
278 // DEFAULT-LABEL: @test_acos(
279 // DEFAULT-NEXT:  entry:
280 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_acos_f64(double noundef [[X:%.*]]) #[[ATTR14]]
281 // DEFAULT-NEXT:    ret double [[CALL_I]]
283 // FINITEONLY-LABEL: @test_acos(
284 // FINITEONLY-NEXT:  entry:
285 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_acos_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
286 // FINITEONLY-NEXT:    ret double [[CALL_I]]
288 // APPROX-LABEL: @test_acos(
289 // APPROX-NEXT:  entry:
290 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_acos_f64(double noundef [[X:%.*]]) #[[ATTR14]]
291 // APPROX-NEXT:    ret double [[CALL_I]]
293 extern "C" __device__ double test_acos(double x) {
294   return acos(x);
297 // DEFAULT-LABEL: @test_acoshf(
298 // DEFAULT-NEXT:  entry:
299 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_acosh_f32(float noundef [[X:%.*]]) #[[ATTR15:[0-9]+]]
300 // DEFAULT-NEXT:    ret float [[CALL_I]]
302 // FINITEONLY-LABEL: @test_acoshf(
303 // FINITEONLY-NEXT:  entry:
304 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_acosh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15:[0-9]+]]
305 // FINITEONLY-NEXT:    ret float [[CALL_I]]
307 // APPROX-LABEL: @test_acoshf(
308 // APPROX-NEXT:  entry:
309 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_acosh_f32(float noundef [[X:%.*]]) #[[ATTR15:[0-9]+]]
310 // APPROX-NEXT:    ret float [[CALL_I]]
312 extern "C" __device__ float test_acoshf(float x) {
313   return acoshf(x);
316 // DEFAULT-LABEL: @test_acosh(
317 // DEFAULT-NEXT:  entry:
318 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_acosh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
319 // DEFAULT-NEXT:    ret double [[CALL_I]]
321 // FINITEONLY-LABEL: @test_acosh(
322 // FINITEONLY-NEXT:  entry:
323 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_acosh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
324 // FINITEONLY-NEXT:    ret double [[CALL_I]]
326 // APPROX-LABEL: @test_acosh(
327 // APPROX-NEXT:  entry:
328 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_acosh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
329 // APPROX-NEXT:    ret double [[CALL_I]]
331 extern "C" __device__ double test_acosh(double x) {
332   return acosh(x);
335 // DEFAULT-LABEL: @test_asinf(
336 // DEFAULT-NEXT:  entry:
337 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_asin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
338 // DEFAULT-NEXT:    ret float [[CALL_I]]
340 // FINITEONLY-LABEL: @test_asinf(
341 // FINITEONLY-NEXT:  entry:
342 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_asin_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
343 // FINITEONLY-NEXT:    ret float [[CALL_I]]
345 // APPROX-LABEL: @test_asinf(
346 // APPROX-NEXT:  entry:
347 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_asin_f32(float noundef [[X:%.*]]) #[[ATTR14]]
348 // APPROX-NEXT:    ret float [[CALL_I]]
350 extern "C" __device__ float test_asinf(float x) {
351   return asinf(x);
354 // DEFAULT-LABEL: @test_asin(
355 // DEFAULT-NEXT:  entry:
356 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_asin_f64(double noundef [[X:%.*]]) #[[ATTR14]]
357 // DEFAULT-NEXT:    ret double [[CALL_I]]
359 // FINITEONLY-LABEL: @test_asin(
360 // FINITEONLY-NEXT:  entry:
361 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_asin_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
362 // FINITEONLY-NEXT:    ret double [[CALL_I]]
364 // APPROX-LABEL: @test_asin(
365 // APPROX-NEXT:  entry:
366 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_asin_f64(double noundef [[X:%.*]]) #[[ATTR14]]
367 // APPROX-NEXT:    ret double [[CALL_I]]
369 extern "C" __device__ double test_asin(double x) {
371   return asin(x);
374 // DEFAULT-LABEL: @test_asinhf(
375 // DEFAULT-NEXT:  entry:
376 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_asinh_f32(float noundef [[X:%.*]]) #[[ATTR15]]
377 // DEFAULT-NEXT:    ret float [[CALL_I]]
379 // FINITEONLY-LABEL: @test_asinhf(
380 // FINITEONLY-NEXT:  entry:
381 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_asinh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
382 // FINITEONLY-NEXT:    ret float [[CALL_I]]
384 // APPROX-LABEL: @test_asinhf(
385 // APPROX-NEXT:  entry:
386 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_asinh_f32(float noundef [[X:%.*]]) #[[ATTR15]]
387 // APPROX-NEXT:    ret float [[CALL_I]]
389 extern "C" __device__ float test_asinhf(float x) {
390   return asinhf(x);
393 // DEFAULT-LABEL: @test_asinh(
394 // DEFAULT-NEXT:  entry:
395 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_asinh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
396 // DEFAULT-NEXT:    ret double [[CALL_I]]
398 // FINITEONLY-LABEL: @test_asinh(
399 // FINITEONLY-NEXT:  entry:
400 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_asinh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
401 // FINITEONLY-NEXT:    ret double [[CALL_I]]
403 // APPROX-LABEL: @test_asinh(
404 // APPROX-NEXT:  entry:
405 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_asinh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
406 // APPROX-NEXT:    ret double [[CALL_I]]
408 extern "C" __device__ double test_asinh(double x) {
409   return asinh(x);
412 // DEFAULT-LABEL: @test_atan2f(
413 // DEFAULT-NEXT:  entry:
414 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atan2_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
415 // DEFAULT-NEXT:    ret float [[CALL_I]]
417 // FINITEONLY-LABEL: @test_atan2f(
418 // FINITEONLY-NEXT:  entry:
419 // 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:%.*]]) #[[ATTR14]]
420 // FINITEONLY-NEXT:    ret float [[CALL_I]]
422 // APPROX-LABEL: @test_atan2f(
423 // APPROX-NEXT:  entry:
424 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atan2_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
425 // APPROX-NEXT:    ret float [[CALL_I]]
427 extern "C" __device__ float test_atan2f(float x, float y) {
428   return atan2f(x, y);
431 // DEFAULT-LABEL: @test_atan2(
432 // DEFAULT-NEXT:  entry:
433 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atan2_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
434 // DEFAULT-NEXT:    ret double [[CALL_I]]
436 // FINITEONLY-LABEL: @test_atan2(
437 // FINITEONLY-NEXT:  entry:
438 // 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:%.*]]) #[[ATTR14]]
439 // FINITEONLY-NEXT:    ret double [[CALL_I]]
441 // APPROX-LABEL: @test_atan2(
442 // APPROX-NEXT:  entry:
443 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atan2_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
444 // APPROX-NEXT:    ret double [[CALL_I]]
446 extern "C" __device__ double test_atan2(double x, double y) {
447   return atan2(x, y);
450 // DEFAULT-LABEL: @test_atanf(
451 // DEFAULT-NEXT:  entry:
452 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atan_f32(float noundef [[X:%.*]]) #[[ATTR14]]
453 // DEFAULT-NEXT:    ret float [[CALL_I]]
455 // FINITEONLY-LABEL: @test_atanf(
456 // FINITEONLY-NEXT:  entry:
457 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_atan_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
458 // FINITEONLY-NEXT:    ret float [[CALL_I]]
460 // APPROX-LABEL: @test_atanf(
461 // APPROX-NEXT:  entry:
462 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atan_f32(float noundef [[X:%.*]]) #[[ATTR14]]
463 // APPROX-NEXT:    ret float [[CALL_I]]
465 extern "C" __device__ float test_atanf(float x) {
466   return atanf(x);
469 // DEFAULT-LABEL: @test_atan(
470 // DEFAULT-NEXT:  entry:
471 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atan_f64(double noundef [[X:%.*]]) #[[ATTR14]]
472 // DEFAULT-NEXT:    ret double [[CALL_I]]
474 // FINITEONLY-LABEL: @test_atan(
475 // FINITEONLY-NEXT:  entry:
476 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_atan_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
477 // FINITEONLY-NEXT:    ret double [[CALL_I]]
479 // APPROX-LABEL: @test_atan(
480 // APPROX-NEXT:  entry:
481 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atan_f64(double noundef [[X:%.*]]) #[[ATTR14]]
482 // APPROX-NEXT:    ret double [[CALL_I]]
484 extern "C" __device__ double test_atan(double x) {
485   return atan(x);
488 // DEFAULT-LABEL: @test_atanhf(
489 // DEFAULT-NEXT:  entry:
490 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atanh_f32(float noundef [[X:%.*]]) #[[ATTR15]]
491 // DEFAULT-NEXT:    ret float [[CALL_I]]
493 // FINITEONLY-LABEL: @test_atanhf(
494 // FINITEONLY-NEXT:  entry:
495 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_atanh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
496 // FINITEONLY-NEXT:    ret float [[CALL_I]]
498 // APPROX-LABEL: @test_atanhf(
499 // APPROX-NEXT:  entry:
500 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_atanh_f32(float noundef [[X:%.*]]) #[[ATTR15]]
501 // APPROX-NEXT:    ret float [[CALL_I]]
503 extern "C" __device__ float test_atanhf(float x) {
504   return atanhf(x);
507 // DEFAULT-LABEL: @test_atanh(
508 // DEFAULT-NEXT:  entry:
509 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atanh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
510 // DEFAULT-NEXT:    ret double [[CALL_I]]
512 // FINITEONLY-LABEL: @test_atanh(
513 // FINITEONLY-NEXT:  entry:
514 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_atanh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
515 // FINITEONLY-NEXT:    ret double [[CALL_I]]
517 // APPROX-LABEL: @test_atanh(
518 // APPROX-NEXT:  entry:
519 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_atanh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
520 // APPROX-NEXT:    ret double [[CALL_I]]
522 extern "C" __device__ double test_atanh(double x) {
523   return atanh(x);
526 // DEFAULT-LABEL: @test_cbrtf(
527 // DEFAULT-NEXT:  entry:
528 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cbrt_f32(float noundef [[X:%.*]]) #[[ATTR15]]
529 // DEFAULT-NEXT:    ret float [[CALL_I]]
531 // FINITEONLY-LABEL: @test_cbrtf(
532 // FINITEONLY-NEXT:  entry:
533 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_cbrt_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
534 // FINITEONLY-NEXT:    ret float [[CALL_I]]
536 // APPROX-LABEL: @test_cbrtf(
537 // APPROX-NEXT:  entry:
538 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cbrt_f32(float noundef [[X:%.*]]) #[[ATTR15]]
539 // APPROX-NEXT:    ret float [[CALL_I]]
541 extern "C" __device__ float test_cbrtf(float x) {
542   return cbrtf(x);
545 // DEFAULT-LABEL: @test_cbrt(
546 // DEFAULT-NEXT:  entry:
547 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cbrt_f64(double noundef [[X:%.*]]) #[[ATTR15]]
548 // DEFAULT-NEXT:    ret double [[CALL_I]]
550 // FINITEONLY-LABEL: @test_cbrt(
551 // FINITEONLY-NEXT:  entry:
552 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_cbrt_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
553 // FINITEONLY-NEXT:    ret double [[CALL_I]]
555 // APPROX-LABEL: @test_cbrt(
556 // APPROX-NEXT:  entry:
557 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cbrt_f64(double noundef [[X:%.*]]) #[[ATTR15]]
558 // APPROX-NEXT:    ret double [[CALL_I]]
560 extern "C" __device__ double test_cbrt(double x) {
561   return cbrt(x);
564 // DEFAULT-LABEL: @test_ceilf(
565 // DEFAULT-NEXT:  entry:
566 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ceil.f32(float [[X:%.*]])
567 // DEFAULT-NEXT:    ret float [[TMP0]]
569 // FINITEONLY-LABEL: @test_ceilf(
570 // FINITEONLY-NEXT:  entry:
571 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.ceil.f32(float [[X:%.*]])
572 // FINITEONLY-NEXT:    ret float [[TMP0]]
574 // APPROX-LABEL: @test_ceilf(
575 // APPROX-NEXT:  entry:
576 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ceil.f32(float [[X:%.*]])
577 // APPROX-NEXT:    ret float [[TMP0]]
579 extern "C" __device__ float test_ceilf(float x) {
580   return ceilf(x);
583 // DEFAULT-LABEL: @test_ceil(
584 // DEFAULT-NEXT:  entry:
585 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ceil.f64(double [[X:%.*]])
586 // DEFAULT-NEXT:    ret double [[TMP0]]
588 // FINITEONLY-LABEL: @test_ceil(
589 // FINITEONLY-NEXT:  entry:
590 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.ceil.f64(double [[X:%.*]])
591 // FINITEONLY-NEXT:    ret double [[TMP0]]
593 // APPROX-LABEL: @test_ceil(
594 // APPROX-NEXT:  entry:
595 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ceil.f64(double [[X:%.*]])
596 // APPROX-NEXT:    ret double [[TMP0]]
598 extern "C" __device__ double test_ceil(double x) {
599   return ceil(x);
602 // DEFAULT-LABEL: @test_copysignf(
603 // DEFAULT-NEXT:  entry:
604 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.copysign.f32(float [[X:%.*]], float [[Y:%.*]])
605 // DEFAULT-NEXT:    ret float [[TMP0]]
607 // FINITEONLY-LABEL: @test_copysignf(
608 // FINITEONLY-NEXT:  entry:
609 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.copysign.f32(float [[X:%.*]], float [[Y:%.*]])
610 // FINITEONLY-NEXT:    ret float [[TMP0]]
612 // APPROX-LABEL: @test_copysignf(
613 // APPROX-NEXT:  entry:
614 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.copysign.f32(float [[X:%.*]], float [[Y:%.*]])
615 // APPROX-NEXT:    ret float [[TMP0]]
617 extern "C" __device__ float test_copysignf(float x, float y) {
618   return copysignf(x, y);
621 // DEFAULT-LABEL: @test_copysign(
622 // DEFAULT-NEXT:  entry:
623 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.copysign.f64(double [[X:%.*]], double [[Y:%.*]])
624 // DEFAULT-NEXT:    ret double [[TMP0]]
626 // FINITEONLY-LABEL: @test_copysign(
627 // FINITEONLY-NEXT:  entry:
628 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.copysign.f64(double [[X:%.*]], double [[Y:%.*]])
629 // FINITEONLY-NEXT:    ret double [[TMP0]]
631 // APPROX-LABEL: @test_copysign(
632 // APPROX-NEXT:  entry:
633 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.copysign.f64(double [[X:%.*]], double [[Y:%.*]])
634 // APPROX-NEXT:    ret double [[TMP0]]
636 extern "C" __device__ double test_copysign(double x, double y) {
637   return copysign(x, y);
640 // DEFAULT-LABEL: @test_cosf(
641 // DEFAULT-NEXT:  entry:
642 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cos_f32(float noundef [[X:%.*]]) #[[ATTR16:[0-9]+]]
643 // DEFAULT-NEXT:    ret float [[CALL_I]]
645 // FINITEONLY-LABEL: @test_cosf(
646 // FINITEONLY-NEXT:  entry:
647 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_cos_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16:[0-9]+]]
648 // FINITEONLY-NEXT:    ret float [[CALL_I]]
650 // APPROX-LABEL: @test_cosf(
651 // APPROX-NEXT:  entry:
652 // APPROX-NEXT:    [[CALL_I1:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X:%.*]]) #[[ATTR16:[0-9]+]]
653 // APPROX-NEXT:    ret float [[CALL_I1]]
655 extern "C" __device__ float test_cosf(float x) {
656   return cosf(x);
659 // DEFAULT-LABEL: @test_cos(
660 // DEFAULT-NEXT:  entry:
661 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cos_f64(double noundef [[X:%.*]]) #[[ATTR16]]
662 // DEFAULT-NEXT:    ret double [[CALL_I]]
664 // FINITEONLY-LABEL: @test_cos(
665 // FINITEONLY-NEXT:  entry:
666 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_cos_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
667 // FINITEONLY-NEXT:    ret double [[CALL_I]]
669 // APPROX-LABEL: @test_cos(
670 // APPROX-NEXT:  entry:
671 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cos_f64(double noundef [[X:%.*]]) #[[ATTR16]]
672 // APPROX-NEXT:    ret double [[CALL_I]]
674 extern "C" __device__ double test_cos(double x) {
675   return cos(x);
678 // DEFAULT-LABEL: @test_coshf(
679 // DEFAULT-NEXT:  entry:
680 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cosh_f32(float noundef [[X:%.*]]) #[[ATTR15]]
681 // DEFAULT-NEXT:    ret float [[CALL_I]]
683 // FINITEONLY-LABEL: @test_coshf(
684 // FINITEONLY-NEXT:  entry:
685 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_cosh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
686 // FINITEONLY-NEXT:    ret float [[CALL_I]]
688 // APPROX-LABEL: @test_coshf(
689 // APPROX-NEXT:  entry:
690 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cosh_f32(float noundef [[X:%.*]]) #[[ATTR15]]
691 // APPROX-NEXT:    ret float [[CALL_I]]
693 extern "C" __device__ float test_coshf(float x) {
694   return coshf(x);
697 // DEFAULT-LABEL: @test_cosh(
698 // DEFAULT-NEXT:  entry:
699 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cosh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
700 // DEFAULT-NEXT:    ret double [[CALL_I]]
702 // FINITEONLY-LABEL: @test_cosh(
703 // FINITEONLY-NEXT:  entry:
704 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_cosh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
705 // FINITEONLY-NEXT:    ret double [[CALL_I]]
707 // APPROX-LABEL: @test_cosh(
708 // APPROX-NEXT:  entry:
709 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cosh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
710 // APPROX-NEXT:    ret double [[CALL_I]]
712 extern "C" __device__ double test_cosh(double x) {
713   return cosh(x);
716 // DEFAULT-LABEL: @test_cospif(
717 // DEFAULT-NEXT:  entry:
718 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cospi_f32(float noundef [[X:%.*]]) #[[ATTR16]]
719 // DEFAULT-NEXT:    ret float [[CALL_I]]
721 // FINITEONLY-LABEL: @test_cospif(
722 // FINITEONLY-NEXT:  entry:
723 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_cospi_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
724 // FINITEONLY-NEXT:    ret float [[CALL_I]]
726 // APPROX-LABEL: @test_cospif(
727 // APPROX-NEXT:  entry:
728 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_cospi_f32(float noundef [[X:%.*]]) #[[ATTR16]]
729 // APPROX-NEXT:    ret float [[CALL_I]]
731 extern "C" __device__ float test_cospif(float x) {
732   return cospif(x);
735 // DEFAULT-LABEL: @test_cospi(
736 // DEFAULT-NEXT:  entry:
737 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cospi_f64(double noundef [[X:%.*]]) #[[ATTR16]]
738 // DEFAULT-NEXT:    ret double [[CALL_I]]
740 // FINITEONLY-LABEL: @test_cospi(
741 // FINITEONLY-NEXT:  entry:
742 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_cospi_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
743 // FINITEONLY-NEXT:    ret double [[CALL_I]]
745 // APPROX-LABEL: @test_cospi(
746 // APPROX-NEXT:  entry:
747 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_cospi_f64(double noundef [[X:%.*]]) #[[ATTR16]]
748 // APPROX-NEXT:    ret double [[CALL_I]]
750 extern "C" __device__ double test_cospi(double x) {
751   return cospi(x);
754 // DEFAULT-LABEL: @test_cyl_bessel_i0f(
755 // DEFAULT-NEXT:  entry:
756 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_i0_f32(float noundef [[X:%.*]]) #[[ATTR16]]
757 // DEFAULT-NEXT:    ret float [[CALL_I]]
759 // FINITEONLY-LABEL: @test_cyl_bessel_i0f(
760 // FINITEONLY-NEXT:  entry:
761 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_i0_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
762 // FINITEONLY-NEXT:    ret float [[CALL_I]]
764 // APPROX-LABEL: @test_cyl_bessel_i0f(
765 // APPROX-NEXT:  entry:
766 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_i0_f32(float noundef [[X:%.*]]) #[[ATTR16]]
767 // APPROX-NEXT:    ret float [[CALL_I]]
769 extern "C" __device__ float test_cyl_bessel_i0f(float x) {
770   return cyl_bessel_i0f(x);
773 // DEFAULT-LABEL: @test_cyl_bessel_i0(
774 // DEFAULT-NEXT:  entry:
775 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_i0_f64(double noundef [[X:%.*]]) #[[ATTR16]]
776 // DEFAULT-NEXT:    ret double [[CALL_I]]
778 // FINITEONLY-LABEL: @test_cyl_bessel_i0(
779 // FINITEONLY-NEXT:  entry:
780 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_i0_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
781 // FINITEONLY-NEXT:    ret double [[CALL_I]]
783 // APPROX-LABEL: @test_cyl_bessel_i0(
784 // APPROX-NEXT:  entry:
785 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_i0_f64(double noundef [[X:%.*]]) #[[ATTR16]]
786 // APPROX-NEXT:    ret double [[CALL_I]]
788 extern "C" __device__ double test_cyl_bessel_i0(double x) {
789   return cyl_bessel_i0(x);
792 // DEFAULT-LABEL: @test_cyl_bessel_i1f(
793 // DEFAULT-NEXT:  entry:
794 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_i1_f32(float noundef [[X:%.*]]) #[[ATTR16]]
795 // DEFAULT-NEXT:    ret float [[CALL_I]]
797 // FINITEONLY-LABEL: @test_cyl_bessel_i1f(
798 // FINITEONLY-NEXT:  entry:
799 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_i1_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
800 // FINITEONLY-NEXT:    ret float [[CALL_I]]
802 // APPROX-LABEL: @test_cyl_bessel_i1f(
803 // APPROX-NEXT:  entry:
804 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_i1_f32(float noundef [[X:%.*]]) #[[ATTR16]]
805 // APPROX-NEXT:    ret float [[CALL_I]]
807 extern "C" __device__ float test_cyl_bessel_i1f(float x) {
808   return cyl_bessel_i1f(x);
811 // DEFAULT-LABEL: @test_cyl_bessel_i1(
812 // DEFAULT-NEXT:  entry:
813 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_i1_f64(double noundef [[X:%.*]]) #[[ATTR16]]
814 // DEFAULT-NEXT:    ret double [[CALL_I]]
816 // FINITEONLY-LABEL: @test_cyl_bessel_i1(
817 // FINITEONLY-NEXT:  entry:
818 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_i1_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
819 // FINITEONLY-NEXT:    ret double [[CALL_I]]
821 // APPROX-LABEL: @test_cyl_bessel_i1(
822 // APPROX-NEXT:  entry:
823 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_i1_f64(double noundef [[X:%.*]]) #[[ATTR16]]
824 // APPROX-NEXT:    ret double [[CALL_I]]
826 extern "C" __device__ double test_cyl_bessel_i1(double x) {
827   return cyl_bessel_i1(x);
830 // DEFAULT-LABEL: @test_erfcf(
831 // DEFAULT-NEXT:  entry:
832 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_erfc_f32(float noundef [[X:%.*]]) #[[ATTR15]]
833 // DEFAULT-NEXT:    ret float [[CALL_I]]
835 // FINITEONLY-LABEL: @test_erfcf(
836 // FINITEONLY-NEXT:  entry:
837 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_erfc_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
838 // FINITEONLY-NEXT:    ret float [[CALL_I]]
840 // APPROX-LABEL: @test_erfcf(
841 // APPROX-NEXT:  entry:
842 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_erfc_f32(float noundef [[X:%.*]]) #[[ATTR15]]
843 // APPROX-NEXT:    ret float [[CALL_I]]
845 extern "C" __device__ float test_erfcf(float x) {
846   return erfcf(x);
849 // DEFAULT-LABEL: @test_erfc(
850 // DEFAULT-NEXT:  entry:
851 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_erfc_f64(double noundef [[X:%.*]]) #[[ATTR15]]
852 // DEFAULT-NEXT:    ret double [[CALL_I]]
854 // FINITEONLY-LABEL: @test_erfc(
855 // FINITEONLY-NEXT:  entry:
856 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_erfc_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
857 // FINITEONLY-NEXT:    ret double [[CALL_I]]
859 // APPROX-LABEL: @test_erfc(
860 // APPROX-NEXT:  entry:
861 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_erfc_f64(double noundef [[X:%.*]]) #[[ATTR15]]
862 // APPROX-NEXT:    ret double [[CALL_I]]
864 extern "C" __device__ double test_erfc(double x) {
865   return erfc(x);
868 // DEFAULT-LABEL: @test_erfinvf(
869 // DEFAULT-NEXT:  entry:
870 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_erfinv_f32(float noundef [[X:%.*]]) #[[ATTR15]]
871 // DEFAULT-NEXT:    ret float [[CALL_I]]
873 // FINITEONLY-LABEL: @test_erfinvf(
874 // FINITEONLY-NEXT:  entry:
875 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_erfinv_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
876 // FINITEONLY-NEXT:    ret float [[CALL_I]]
878 // APPROX-LABEL: @test_erfinvf(
879 // APPROX-NEXT:  entry:
880 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_erfinv_f32(float noundef [[X:%.*]]) #[[ATTR15]]
881 // APPROX-NEXT:    ret float [[CALL_I]]
883 extern "C" __device__ float test_erfinvf(float x) {
884   return erfinvf(x);
887 // DEFAULT-LABEL: @test_erfinv(
888 // DEFAULT-NEXT:  entry:
889 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_erfinv_f64(double noundef [[X:%.*]]) #[[ATTR15]]
890 // DEFAULT-NEXT:    ret double [[CALL_I]]
892 // FINITEONLY-LABEL: @test_erfinv(
893 // FINITEONLY-NEXT:  entry:
894 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_erfinv_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
895 // FINITEONLY-NEXT:    ret double [[CALL_I]]
897 // APPROX-LABEL: @test_erfinv(
898 // APPROX-NEXT:  entry:
899 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_erfinv_f64(double noundef [[X:%.*]]) #[[ATTR15]]
900 // APPROX-NEXT:    ret double [[CALL_I]]
902 extern "C" __device__ double test_erfinv(double x) {
903   return erfinv(x);
906 // DEFAULT-LABEL: @test_exp10f(
907 // DEFAULT-NEXT:  entry:
908 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_exp10_f32(float noundef [[X:%.*]]) #[[ATTR15]]
909 // DEFAULT-NEXT:    ret float [[CALL_I]]
911 // FINITEONLY-LABEL: @test_exp10f(
912 // FINITEONLY-NEXT:  entry:
913 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_exp10_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
914 // FINITEONLY-NEXT:    ret float [[CALL_I]]
916 // APPROX-LABEL: @test_exp10f(
917 // APPROX-NEXT:  entry:
918 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_exp10_f32(float noundef [[X:%.*]]) #[[ATTR15]]
919 // APPROX-NEXT:    ret float [[CALL_I]]
921 extern "C" __device__ float test_exp10f(float x) {
922   return exp10f(x);
925 // DEFAULT-LABEL: @test_exp10(
926 // DEFAULT-NEXT:  entry:
927 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp10_f64(double noundef [[X:%.*]]) #[[ATTR15]]
928 // DEFAULT-NEXT:    ret double [[CALL_I]]
930 // FINITEONLY-LABEL: @test_exp10(
931 // FINITEONLY-NEXT:  entry:
932 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_exp10_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
933 // FINITEONLY-NEXT:    ret double [[CALL_I]]
935 // APPROX-LABEL: @test_exp10(
936 // APPROX-NEXT:  entry:
937 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp10_f64(double noundef [[X:%.*]]) #[[ATTR15]]
938 // APPROX-NEXT:    ret double [[CALL_I]]
940 extern "C" __device__ double test_exp10(double x) {
941   return exp10(x);
944 // DEFAULT-LABEL: @test_exp2f(
945 // DEFAULT-NEXT:  entry:
946 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.exp2.f32(float [[X:%.*]])
947 // DEFAULT-NEXT:    ret float [[TMP0]]
949 // FINITEONLY-LABEL: @test_exp2f(
950 // FINITEONLY-NEXT:  entry:
951 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.exp2.f32(float [[X:%.*]])
952 // FINITEONLY-NEXT:    ret float [[TMP0]]
954 // APPROX-LABEL: @test_exp2f(
955 // APPROX-NEXT:  entry:
956 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.exp2.f32(float [[X:%.*]])
957 // APPROX-NEXT:    ret float [[TMP0]]
959 extern "C" __device__ float test_exp2f(float x) {
960   return exp2f(x);
963 // DEFAULT-LABEL: @test_exp2(
964 // DEFAULT-NEXT:  entry:
965 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp2_f64(double noundef [[X:%.*]]) #[[ATTR15]]
966 // DEFAULT-NEXT:    ret double [[CALL_I]]
968 // FINITEONLY-LABEL: @test_exp2(
969 // FINITEONLY-NEXT:  entry:
970 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_exp2_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
971 // FINITEONLY-NEXT:    ret double [[CALL_I]]
973 // APPROX-LABEL: @test_exp2(
974 // APPROX-NEXT:  entry:
975 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp2_f64(double noundef [[X:%.*]]) #[[ATTR15]]
976 // APPROX-NEXT:    ret double [[CALL_I]]
978 extern "C" __device__ double test_exp2(double x) {
979   return exp2(x);
982 // DEFAULT-LABEL: @test_expf(
983 // DEFAULT-NEXT:  entry:
984 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.exp.f32(float [[X:%.*]])
985 // DEFAULT-NEXT:    ret float [[TMP0]]
987 // FINITEONLY-LABEL: @test_expf(
988 // FINITEONLY-NEXT:  entry:
989 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.exp.f32(float [[X:%.*]])
990 // FINITEONLY-NEXT:    ret float [[TMP0]]
992 // APPROX-LABEL: @test_expf(
993 // APPROX-NEXT:  entry:
994 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.exp.f32(float [[X:%.*]])
995 // APPROX-NEXT:    ret float [[TMP0]]
997 extern "C" __device__ float test_expf(float x) {
998   return expf(x);
1001 // DEFAULT-LABEL: @test_exp(
1002 // DEFAULT-NEXT:  entry:
1003 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp_f64(double noundef [[X:%.*]]) #[[ATTR15]]
1004 // DEFAULT-NEXT:    ret double [[CALL_I]]
1006 // FINITEONLY-LABEL: @test_exp(
1007 // FINITEONLY-NEXT:  entry:
1008 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_exp_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
1009 // FINITEONLY-NEXT:    ret double [[CALL_I]]
1011 // APPROX-LABEL: @test_exp(
1012 // APPROX-NEXT:  entry:
1013 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_exp_f64(double noundef [[X:%.*]]) #[[ATTR15]]
1014 // APPROX-NEXT:    ret double [[CALL_I]]
1016 extern "C" __device__ double test_exp(double x) {
1017   return exp(x);
1020 // DEFAULT-LABEL: @test_expm1f(
1021 // DEFAULT-NEXT:  entry:
1022 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_expm1_f32(float noundef [[X:%.*]]) #[[ATTR15]]
1023 // DEFAULT-NEXT:    ret float [[CALL_I]]
1025 // FINITEONLY-LABEL: @test_expm1f(
1026 // FINITEONLY-NEXT:  entry:
1027 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_expm1_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
1028 // FINITEONLY-NEXT:    ret float [[CALL_I]]
1030 // APPROX-LABEL: @test_expm1f(
1031 // APPROX-NEXT:  entry:
1032 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_expm1_f32(float noundef [[X:%.*]]) #[[ATTR15]]
1033 // APPROX-NEXT:    ret float [[CALL_I]]
1035 extern "C" __device__ float test_expm1f(float x) {
1036   return expm1f(x);
1039 // DEFAULT-LABEL: @test_expm1(
1040 // DEFAULT-NEXT:  entry:
1041 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_expm1_f64(double noundef [[X:%.*]]) #[[ATTR15]]
1042 // DEFAULT-NEXT:    ret double [[CALL_I]]
1044 // FINITEONLY-LABEL: @test_expm1(
1045 // FINITEONLY-NEXT:  entry:
1046 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_expm1_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
1047 // FINITEONLY-NEXT:    ret double [[CALL_I]]
1049 // APPROX-LABEL: @test_expm1(
1050 // APPROX-NEXT:  entry:
1051 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_expm1_f64(double noundef [[X:%.*]]) #[[ATTR15]]
1052 // APPROX-NEXT:    ret double [[CALL_I]]
1054 extern "C" __device__ double test_expm1(double x) {
1055   return expm1(x);
1058 // DEFAULT-LABEL: @test_fabsf(
1059 // DEFAULT-NEXT:  entry:
1060 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fabs.f32(float [[X:%.*]])
1061 // DEFAULT-NEXT:    ret float [[TMP0]]
1063 // FINITEONLY-LABEL: @test_fabsf(
1064 // FINITEONLY-NEXT:  entry:
1065 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.fabs.f32(float [[X:%.*]])
1066 // FINITEONLY-NEXT:    ret float [[TMP0]]
1068 // APPROX-LABEL: @test_fabsf(
1069 // APPROX-NEXT:  entry:
1070 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fabs.f32(float [[X:%.*]])
1071 // APPROX-NEXT:    ret float [[TMP0]]
1073 extern "C" __device__ float test_fabsf(float x) {
1074   return fabsf(x);
1077 // DEFAULT-LABEL: @test_fabs(
1078 // DEFAULT-NEXT:  entry:
1079 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fabs.f64(double [[X:%.*]])
1080 // DEFAULT-NEXT:    ret double [[TMP0]]
1082 // FINITEONLY-LABEL: @test_fabs(
1083 // FINITEONLY-NEXT:  entry:
1084 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.fabs.f64(double [[X:%.*]])
1085 // FINITEONLY-NEXT:    ret double [[TMP0]]
1087 // APPROX-LABEL: @test_fabs(
1088 // APPROX-NEXT:  entry:
1089 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fabs.f64(double [[X:%.*]])
1090 // APPROX-NEXT:    ret double [[TMP0]]
1092 extern "C" __device__ double test_fabs(double x) {
1093   return fabs(x);
1096 // DEFAULT-LABEL: @test_fdimf(
1097 // DEFAULT-NEXT:  entry:
1098 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_fdim_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
1099 // DEFAULT-NEXT:    ret float [[CALL_I]]
1101 // FINITEONLY-LABEL: @test_fdimf(
1102 // FINITEONLY-NEXT:  entry:
1103 // 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:%.*]]) #[[ATTR14]]
1104 // FINITEONLY-NEXT:    ret float [[CALL_I]]
1106 // APPROX-LABEL: @test_fdimf(
1107 // APPROX-NEXT:  entry:
1108 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_fdim_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
1109 // APPROX-NEXT:    ret float [[CALL_I]]
1111 extern "C" __device__ float test_fdimf(float x, float y) {
1112   return fdimf(x, y);
1115 // DEFAULT-LABEL: @test_fdim(
1116 // DEFAULT-NEXT:  entry:
1117 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_fdim_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
1118 // DEFAULT-NEXT:    ret double [[CALL_I]]
1120 // FINITEONLY-LABEL: @test_fdim(
1121 // FINITEONLY-NEXT:  entry:
1122 // 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:%.*]]) #[[ATTR14]]
1123 // FINITEONLY-NEXT:    ret double [[CALL_I]]
1125 // APPROX-LABEL: @test_fdim(
1126 // APPROX-NEXT:  entry:
1127 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_fdim_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
1128 // APPROX-NEXT:    ret double [[CALL_I]]
1130 extern "C" __device__ double test_fdim(double x, double y) {
1131   return fdim(x, y);
1134 // DEFAULT-LABEL: @test_fdividef(
1135 // DEFAULT-NEXT:  entry:
1136 // DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[X:%.*]], [[Y:%.*]]
1137 // DEFAULT-NEXT:    ret float [[DIV_I]]
1139 // FINITEONLY-LABEL: @test_fdividef(
1140 // FINITEONLY-NEXT:  entry:
1141 // FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float [[X:%.*]], [[Y:%.*]]
1142 // FINITEONLY-NEXT:    ret float [[DIV_I]]
1144 // APPROX-LABEL: @test_fdividef(
1145 // APPROX-NEXT:  entry:
1146 // APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[X:%.*]], [[Y:%.*]]
1147 // APPROX-NEXT:    ret float [[DIV_I]]
1149 extern "C" __device__ float test_fdividef(float x, float y) {
1150   return fdividef(x, y);
1153 // DEFAULT-LABEL: @test_floorf(
1154 // DEFAULT-NEXT:  entry:
1155 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.floor.f32(float [[X:%.*]])
1156 // DEFAULT-NEXT:    ret float [[TMP0]]
1158 // FINITEONLY-LABEL: @test_floorf(
1159 // FINITEONLY-NEXT:  entry:
1160 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.floor.f32(float [[X:%.*]])
1161 // FINITEONLY-NEXT:    ret float [[TMP0]]
1163 // APPROX-LABEL: @test_floorf(
1164 // APPROX-NEXT:  entry:
1165 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.floor.f32(float [[X:%.*]])
1166 // APPROX-NEXT:    ret float [[TMP0]]
1168 extern "C" __device__ float test_floorf(float x) {
1169   return floorf(x);
1172 // DEFAULT-LABEL: @test_floor(
1173 // DEFAULT-NEXT:  entry:
1174 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.floor.f64(double [[X:%.*]])
1175 // DEFAULT-NEXT:    ret double [[TMP0]]
1177 // FINITEONLY-LABEL: @test_floor(
1178 // FINITEONLY-NEXT:  entry:
1179 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.floor.f64(double [[X:%.*]])
1180 // FINITEONLY-NEXT:    ret double [[TMP0]]
1182 // APPROX-LABEL: @test_floor(
1183 // APPROX-NEXT:  entry:
1184 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.floor.f64(double [[X:%.*]])
1185 // APPROX-NEXT:    ret double [[TMP0]]
1187 extern "C" __device__ double test_floor(double x) {
1188   return floor(x);
1191 // DEFAULT-LABEL: @test_fmaf(
1192 // DEFAULT-NEXT:  entry:
1193 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
1194 // DEFAULT-NEXT:    ret float [[TMP0]]
1196 // FINITEONLY-LABEL: @test_fmaf(
1197 // FINITEONLY-NEXT:  entry:
1198 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
1199 // FINITEONLY-NEXT:    ret float [[TMP0]]
1201 // APPROX-LABEL: @test_fmaf(
1202 // APPROX-NEXT:  entry:
1203 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
1204 // APPROX-NEXT:    ret float [[TMP0]]
1206 extern "C" __device__ float test_fmaf(float x, float y, float z) {
1207   return fmaf(x, y, z);
1210 // DEFAULT-LABEL: @test_fma(
1211 // DEFAULT-NEXT:  entry:
1212 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
1213 // DEFAULT-NEXT:    ret double [[TMP0]]
1215 // FINITEONLY-LABEL: @test_fma(
1216 // FINITEONLY-NEXT:  entry:
1217 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
1218 // FINITEONLY-NEXT:    ret double [[TMP0]]
1220 // APPROX-LABEL: @test_fma(
1221 // APPROX-NEXT:  entry:
1222 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
1223 // APPROX-NEXT:    ret double [[TMP0]]
1225 extern "C" __device__ double test_fma(double x, double y, double z) {
1226   return fma(x, y, z);
1229 // DEFAULT-LABEL: @test_fma_rn(
1230 // DEFAULT-NEXT:  entry:
1231 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
1232 // DEFAULT-NEXT:    ret double [[TMP0]]
1234 // FINITEONLY-LABEL: @test_fma_rn(
1235 // FINITEONLY-NEXT:  entry:
1236 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
1237 // FINITEONLY-NEXT:    ret double [[TMP0]]
1239 // APPROX-LABEL: @test_fma_rn(
1240 // APPROX-NEXT:  entry:
1241 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
1242 // APPROX-NEXT:    ret double [[TMP0]]
1244 extern "C" __device__ double test_fma_rn(double x, double y, double z) {
1245   return __fma_rn(x, y, z);
1248 // DEFAULT-LABEL: @test_fmaxf(
1249 // DEFAULT-NEXT:  entry:
1250 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
1251 // DEFAULT-NEXT:    ret float [[TMP0]]
1253 // FINITEONLY-LABEL: @test_fmaxf(
1254 // FINITEONLY-NEXT:  entry:
1255 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
1256 // FINITEONLY-NEXT:    ret float [[TMP0]]
1258 // APPROX-LABEL: @test_fmaxf(
1259 // APPROX-NEXT:  entry:
1260 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
1261 // APPROX-NEXT:    ret float [[TMP0]]
1263 extern "C" __device__ float test_fmaxf(float x, float y) {
1264   return fmaxf(x, y);
1267 // DEFAULT-LABEL: @test_fmax(
1268 // DEFAULT-NEXT:  entry:
1269 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
1270 // DEFAULT-NEXT:    ret double [[TMP0]]
1272 // FINITEONLY-LABEL: @test_fmax(
1273 // FINITEONLY-NEXT:  entry:
1274 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
1275 // FINITEONLY-NEXT:    ret double [[TMP0]]
1277 // APPROX-LABEL: @test_fmax(
1278 // APPROX-NEXT:  entry:
1279 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
1280 // APPROX-NEXT:    ret double [[TMP0]]
1282 extern "C" __device__ double test_fmax(double x, double y) {
1283   return fmax(x, y);
1286 // DEFAULT-LABEL: @test_fminf(
1287 // DEFAULT-NEXT:  entry:
1288 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1289 // DEFAULT-NEXT:    ret float [[TMP0]]
1291 // FINITEONLY-LABEL: @test_fminf(
1292 // FINITEONLY-NEXT:  entry:
1293 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1294 // FINITEONLY-NEXT:    ret float [[TMP0]]
1296 // APPROX-LABEL: @test_fminf(
1297 // APPROX-NEXT:  entry:
1298 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
1299 // APPROX-NEXT:    ret float [[TMP0]]
1301 extern "C" __device__ float test_fminf(float x, float y) {
1302   return fminf(x, y);
1305 // DEFAULT-LABEL: @test_fmin(
1306 // DEFAULT-NEXT:  entry:
1307 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
1308 // DEFAULT-NEXT:    ret double [[TMP0]]
1310 // FINITEONLY-LABEL: @test_fmin(
1311 // FINITEONLY-NEXT:  entry:
1312 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
1313 // FINITEONLY-NEXT:    ret double [[TMP0]]
1315 // APPROX-LABEL: @test_fmin(
1316 // APPROX-NEXT:  entry:
1317 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
1318 // APPROX-NEXT:    ret double [[TMP0]]
1320 extern "C" __device__ double test_fmin(double x, double y) {
1321   return fmin(x, y);
1324 // DEFAULT-LABEL: @test_fmodf(
1325 // DEFAULT-NEXT:  entry:
1326 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_fmod_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
1327 // DEFAULT-NEXT:    ret float [[CALL_I]]
1329 // FINITEONLY-LABEL: @test_fmodf(
1330 // FINITEONLY-NEXT:  entry:
1331 // 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:%.*]]) #[[ATTR14]]
1332 // FINITEONLY-NEXT:    ret float [[CALL_I]]
1334 // APPROX-LABEL: @test_fmodf(
1335 // APPROX-NEXT:  entry:
1336 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_fmod_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
1337 // APPROX-NEXT:    ret float [[CALL_I]]
1339 extern "C" __device__ float test_fmodf(float x, float y) {
1340   return fmodf(x, y);
1343 // DEFAULT-LABEL: @test_fmod(
1344 // DEFAULT-NEXT:  entry:
1345 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_fmod_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
1346 // DEFAULT-NEXT:    ret double [[CALL_I]]
1348 // FINITEONLY-LABEL: @test_fmod(
1349 // FINITEONLY-NEXT:  entry:
1350 // 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:%.*]]) #[[ATTR14]]
1351 // FINITEONLY-NEXT:    ret double [[CALL_I]]
1353 // APPROX-LABEL: @test_fmod(
1354 // APPROX-NEXT:  entry:
1355 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_fmod_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
1356 // APPROX-NEXT:    ret double [[CALL_I]]
1358 extern "C" __device__ double test_fmod(double x, double y) {
1359   return fmod(x, y);
1362 // CHECK-LABEL: @test_frexpf(
1363 // CHECK-NEXT:  entry:
1364 // CHECK-NEXT:    [[TMP0:%.*]] = tail call { float, i32 } @llvm.frexp.f32.i32(float [[X:%.*]])
1365 // CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { float, i32 } [[TMP0]], 1
1366 // CHECK-NEXT:    store i32 [[TMP1]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12:![0-9]+]]
1367 // CHECK-NEXT:    [[TMP2:%.*]] = extractvalue { float, i32 } [[TMP0]], 0
1368 // CHECK-NEXT:    ret float [[TMP2]]
1370 extern "C" __device__ float test_frexpf(float x, int* y) {
1371   return frexpf(x, y);
1374 // CHECK-LABEL: @test_frexp(
1375 // CHECK-NEXT:  entry:
1376 // CHECK-NEXT:    [[TMP0:%.*]] = tail call { double, i32 } @llvm.frexp.f64.i32(double [[X:%.*]])
1377 // CHECK-NEXT:    [[TMP1:%.*]] = extractvalue { double, i32 } [[TMP0]], 1
1378 // CHECK-NEXT:    store i32 [[TMP1]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12]]
1379 // CHECK-NEXT:    [[TMP2:%.*]] = extractvalue { double, i32 } [[TMP0]], 0
1380 // CHECK-NEXT:    ret double [[TMP2]]
1382 extern "C" __device__ double test_frexp(double x, int* y) {
1383   return frexp(x, y);
1386 // DEFAULT-LABEL: @test_hypotf(
1387 // DEFAULT-NEXT:  entry:
1388 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_hypot_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
1389 // DEFAULT-NEXT:    ret float [[CALL_I]]
1391 // FINITEONLY-LABEL: @test_hypotf(
1392 // FINITEONLY-NEXT:  entry:
1393 // 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:%.*]]) #[[ATTR14]]
1394 // FINITEONLY-NEXT:    ret float [[CALL_I]]
1396 // APPROX-LABEL: @test_hypotf(
1397 // APPROX-NEXT:  entry:
1398 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_hypot_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
1399 // APPROX-NEXT:    ret float [[CALL_I]]
1401 extern "C" __device__ float test_hypotf(float x, float y) {
1402   return hypotf(x, y);
1405 // DEFAULT-LABEL: @test_hypot(
1406 // DEFAULT-NEXT:  entry:
1407 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_hypot_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
1408 // DEFAULT-NEXT:    ret double [[CALL_I]]
1410 // FINITEONLY-LABEL: @test_hypot(
1411 // FINITEONLY-NEXT:  entry:
1412 // 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:%.*]]) #[[ATTR14]]
1413 // FINITEONLY-NEXT:    ret double [[CALL_I]]
1415 // APPROX-LABEL: @test_hypot(
1416 // APPROX-NEXT:  entry:
1417 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_hypot_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
1418 // APPROX-NEXT:    ret double [[CALL_I]]
1420 extern "C" __device__ double test_hypot(double x, double y) {
1421   return hypot(x, y);
1424 // DEFAULT-LABEL: @test_ilogbf(
1425 // DEFAULT-NEXT:  entry:
1426 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f32(float noundef [[X:%.*]]) #[[ATTR14]]
1427 // DEFAULT-NEXT:    ret i32 [[CALL_I]]
1429 // FINITEONLY-LABEL: @test_ilogbf(
1430 // FINITEONLY-NEXT:  entry:
1431 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
1432 // FINITEONLY-NEXT:    ret i32 [[CALL_I]]
1434 // APPROX-LABEL: @test_ilogbf(
1435 // APPROX-NEXT:  entry:
1436 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f32(float noundef [[X:%.*]]) #[[ATTR14]]
1437 // APPROX-NEXT:    ret i32 [[CALL_I]]
1439 extern "C" __device__ int test_ilogbf(float x) {
1440   return ilogbf(x);
1443 // DEFAULT-LABEL: @test_ilogb(
1444 // DEFAULT-NEXT:  entry:
1445 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f64(double noundef [[X:%.*]]) #[[ATTR14]]
1446 // DEFAULT-NEXT:    ret i32 [[CALL_I]]
1448 // FINITEONLY-LABEL: @test_ilogb(
1449 // FINITEONLY-NEXT:  entry:
1450 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
1451 // FINITEONLY-NEXT:    ret i32 [[CALL_I]]
1453 // APPROX-LABEL: @test_ilogb(
1454 // APPROX-NEXT:  entry:
1455 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call noundef i32 @__ocml_ilogb_f64(double noundef [[X:%.*]]) #[[ATTR14]]
1456 // APPROX-NEXT:    ret i32 [[CALL_I]]
1458 extern "C" __device__ int test_ilogb(double x) {
1459   return ilogb(x);
1462 // DEFAULT-LABEL: @test___finitef(
1463 // DEFAULT-NEXT:  entry:
1464 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call float @llvm.fabs.f32(float [[X:%.*]])
1465 // DEFAULT-NEXT:    [[TMP1:%.*]] = fcmp one float [[TMP0]], 0x7FF0000000000000
1466 // DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1467 // DEFAULT-NEXT:    ret i32 [[CONV]]
1469 // FINITEONLY-LABEL: @test___finitef(
1470 // FINITEONLY-NEXT:  entry:
1471 // FINITEONLY-NEXT:    ret i32 1
1473 // APPROX-LABEL: @test___finitef(
1474 // APPROX-NEXT:  entry:
1475 // APPROX-NEXT:    [[TMP0:%.*]] = tail call float @llvm.fabs.f32(float [[X:%.*]])
1476 // APPROX-NEXT:    [[TMP1:%.*]] = fcmp one float [[TMP0]], 0x7FF0000000000000
1477 // APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1478 // APPROX-NEXT:    ret i32 [[CONV]]
1480 extern "C" __device__ BOOL_TYPE test___finitef(float x) {
1481   return __finitef(x);
1484 // DEFAULT-LABEL: @test___finite(
1485 // DEFAULT-NEXT:  entry:
1486 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
1487 // DEFAULT-NEXT:    [[TMP1:%.*]] = fcmp one double [[TMP0]], 0x7FF0000000000000
1488 // DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1489 // DEFAULT-NEXT:    ret i32 [[CONV]]
1491 // FINITEONLY-LABEL: @test___finite(
1492 // FINITEONLY-NEXT:  entry:
1493 // FINITEONLY-NEXT:    ret i32 1
1495 // APPROX-LABEL: @test___finite(
1496 // APPROX-NEXT:  entry:
1497 // APPROX-NEXT:    [[TMP0:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
1498 // APPROX-NEXT:    [[TMP1:%.*]] = fcmp one double [[TMP0]], 0x7FF0000000000000
1499 // APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1500 // APPROX-NEXT:    ret i32 [[CONV]]
1502 extern "C" __device__ BOOL_TYPE test___finite(double x) {
1503   return __finite(x);
1506 // DEFAULT-LABEL: @test___isinff(
1507 // DEFAULT-NEXT:  entry:
1508 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call float @llvm.fabs.f32(float [[X:%.*]])
1509 // DEFAULT-NEXT:    [[TMP1:%.*]] = fcmp oeq float [[TMP0]], 0x7FF0000000000000
1510 // DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1511 // DEFAULT-NEXT:    ret i32 [[CONV]]
1513 // FINITEONLY-LABEL: @test___isinff(
1514 // FINITEONLY-NEXT:  entry:
1515 // FINITEONLY-NEXT:    ret i32 0
1517 // APPROX-LABEL: @test___isinff(
1518 // APPROX-NEXT:  entry:
1519 // APPROX-NEXT:    [[TMP0:%.*]] = tail call float @llvm.fabs.f32(float [[X:%.*]])
1520 // APPROX-NEXT:    [[TMP1:%.*]] = fcmp oeq float [[TMP0]], 0x7FF0000000000000
1521 // APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1522 // APPROX-NEXT:    ret i32 [[CONV]]
1524 extern "C" __device__ BOOL_TYPE test___isinff(float x) {
1525   return __isinff(x);
1528 // DEFAULT-LABEL: @test___isinf(
1529 // DEFAULT-NEXT:  entry:
1530 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
1531 // DEFAULT-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[TMP0]], 0x7FF0000000000000
1532 // DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1533 // DEFAULT-NEXT:    ret i32 [[CONV]]
1535 // FINITEONLY-LABEL: @test___isinf(
1536 // FINITEONLY-NEXT:  entry:
1537 // FINITEONLY-NEXT:    ret i32 0
1539 // APPROX-LABEL: @test___isinf(
1540 // APPROX-NEXT:  entry:
1541 // APPROX-NEXT:    [[TMP0:%.*]] = tail call double @llvm.fabs.f64(double [[X:%.*]])
1542 // APPROX-NEXT:    [[TMP1:%.*]] = fcmp oeq double [[TMP0]], 0x7FF0000000000000
1543 // APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP1]] to i32
1544 // APPROX-NEXT:    ret i32 [[CONV]]
1546 extern "C" __device__ BOOL_TYPE test___isinf(double x) {
1547   return __isinf(x);
1550 // DEFAULT-LABEL: @test___isnanf(
1551 // DEFAULT-NEXT:  entry:
1552 // DEFAULT-NEXT:    [[TMP0:%.*]] = fcmp uno float [[X:%.*]], 0.000000e+00
1553 // DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP0]] to i32
1554 // DEFAULT-NEXT:    ret i32 [[CONV]]
1556 // FINITEONLY-LABEL: @test___isnanf(
1557 // FINITEONLY-NEXT:  entry:
1558 // FINITEONLY-NEXT:    ret i32 0
1560 // APPROX-LABEL: @test___isnanf(
1561 // APPROX-NEXT:  entry:
1562 // APPROX-NEXT:    [[TMP0:%.*]] = fcmp uno float [[X:%.*]], 0.000000e+00
1563 // APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP0]] to i32
1564 // APPROX-NEXT:    ret i32 [[CONV]]
1566 extern "C" __device__ BOOL_TYPE test___isnanf(float x) {
1567   return __isnanf(x);
1570 // DEFAULT-LABEL: @test___isnan(
1571 // DEFAULT-NEXT:  entry:
1572 // DEFAULT-NEXT:    [[TMP0:%.*]] = fcmp uno double [[X:%.*]], 0.000000e+00
1573 // DEFAULT-NEXT:    [[CONV:%.*]] = zext i1 [[TMP0]] to i32
1574 // DEFAULT-NEXT:    ret i32 [[CONV]]
1576 // FINITEONLY-LABEL: @test___isnan(
1577 // FINITEONLY-NEXT:  entry:
1578 // FINITEONLY-NEXT:    ret i32 0
1580 // APPROX-LABEL: @test___isnan(
1581 // APPROX-NEXT:  entry:
1582 // APPROX-NEXT:    [[TMP0:%.*]] = fcmp uno double [[X:%.*]], 0.000000e+00
1583 // APPROX-NEXT:    [[CONV:%.*]] = zext i1 [[TMP0]] to i32
1584 // APPROX-NEXT:    ret i32 [[CONV]]
1586 extern "C" __device__ BOOL_TYPE test___isnan(double x) {
1587   return __isnan(x);
1590 // DEFAULT-LABEL: @test_j0f(
1591 // DEFAULT-NEXT:  entry:
1592 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[X:%.*]]) #[[ATTR16]]
1593 // DEFAULT-NEXT:    ret float [[CALL_I]]
1595 // FINITEONLY-LABEL: @test_j0f(
1596 // FINITEONLY-NEXT:  entry:
1597 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j0_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
1598 // FINITEONLY-NEXT:    ret float [[CALL_I]]
1600 // APPROX-LABEL: @test_j0f(
1601 // APPROX-NEXT:  entry:
1602 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[X:%.*]]) #[[ATTR16]]
1603 // APPROX-NEXT:    ret float [[CALL_I]]
1605 extern "C" __device__ float test_j0f(float x) {
1606   return j0f(x);
1609 // DEFAULT-LABEL: @test_j0(
1610 // DEFAULT-NEXT:  entry:
1611 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[X:%.*]]) #[[ATTR16]]
1612 // DEFAULT-NEXT:    ret double [[CALL_I]]
1614 // FINITEONLY-LABEL: @test_j0(
1615 // FINITEONLY-NEXT:  entry:
1616 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j0_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
1617 // FINITEONLY-NEXT:    ret double [[CALL_I]]
1619 // APPROX-LABEL: @test_j0(
1620 // APPROX-NEXT:  entry:
1621 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[X:%.*]]) #[[ATTR16]]
1622 // APPROX-NEXT:    ret double [[CALL_I]]
1624 extern "C" __device__ double test_j0(double x) {
1625   return j0(x);
1628 // DEFAULT-LABEL: @test_j1f(
1629 // DEFAULT-NEXT:  entry:
1630 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[X:%.*]]) #[[ATTR16]]
1631 // DEFAULT-NEXT:    ret float [[CALL_I]]
1633 // FINITEONLY-LABEL: @test_j1f(
1634 // FINITEONLY-NEXT:  entry:
1635 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j1_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
1636 // FINITEONLY-NEXT:    ret float [[CALL_I]]
1638 // APPROX-LABEL: @test_j1f(
1639 // APPROX-NEXT:  entry:
1640 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[X:%.*]]) #[[ATTR16]]
1641 // APPROX-NEXT:    ret float [[CALL_I]]
1643 extern "C" __device__ float test_j1f(float x) {
1644   return j1f(x);
1647 // DEFAULT-LABEL: @test_j1(
1648 // DEFAULT-NEXT:  entry:
1649 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[X:%.*]]) #[[ATTR16]]
1650 // DEFAULT-NEXT:    ret double [[CALL_I]]
1652 // FINITEONLY-LABEL: @test_j1(
1653 // FINITEONLY-NEXT:  entry:
1654 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j1_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
1655 // FINITEONLY-NEXT:    ret double [[CALL_I]]
1657 // APPROX-LABEL: @test_j1(
1658 // APPROX-NEXT:  entry:
1659 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[X:%.*]]) #[[ATTR16]]
1660 // APPROX-NEXT:    ret double [[CALL_I]]
1662 extern "C" __device__ double test_j1(double x) {
1663   return j1(x);
1666 // DEFAULT-LABEL: @test_jnf(
1667 // DEFAULT-NEXT:  entry:
1668 // DEFAULT-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
1669 // DEFAULT-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
1670 // DEFAULT-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
1671 // DEFAULT-NEXT:    ]
1672 // DEFAULT:       if.then.i:
1673 // DEFAULT-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[Y:%.*]]) #[[ATTR16]]
1674 // DEFAULT-NEXT:    br label [[_ZL3JNFIF_EXIT:%.*]]
1675 // DEFAULT:       if.then2.i:
1676 // DEFAULT-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[Y]]) #[[ATTR16]]
1677 // DEFAULT-NEXT:    br label [[_ZL3JNFIF_EXIT]]
1678 // DEFAULT:       if.end4.i:
1679 // DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[Y]]) #[[ATTR16]]
1680 // DEFAULT-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[Y]]) #[[ATTR16]]
1681 // DEFAULT-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
1682 // DEFAULT-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3JNFIF_EXIT]]
1683 // DEFAULT:       for.body.i:
1684 // DEFAULT-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
1685 // DEFAULT-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
1686 // DEFAULT-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
1687 // DEFAULT-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1688 // DEFAULT-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to float
1689 // DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[CONV_I]], [[Y]]
1690 // DEFAULT-NEXT:    [[MUL8_I:%.*]] = fmul contract float [[__X1_0_I3]], [[DIV_I]]
1691 // DEFAULT-NEXT:    [[SUB_I]] = fsub contract float [[MUL8_I]], [[__X0_0_I2]]
1692 // DEFAULT-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
1693 // DEFAULT-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
1694 // DEFAULT-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3JNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP14:![0-9]+]]
1695 // DEFAULT:       _ZL3jnfif.exit:
1696 // 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]] ]
1697 // DEFAULT-NEXT:    ret float [[RETVAL_0_I]]
1699 // FINITEONLY-LABEL: @test_jnf(
1700 // FINITEONLY-NEXT:  entry:
1701 // FINITEONLY-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
1702 // FINITEONLY-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
1703 // FINITEONLY-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
1704 // FINITEONLY-NEXT:    ]
1705 // FINITEONLY:       if.then.i:
1706 // FINITEONLY-NEXT:    [[CALL_I20_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j0_f32(float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR16]]
1707 // FINITEONLY-NEXT:    br label [[_ZL3JNFIF_EXIT:%.*]]
1708 // FINITEONLY:       if.then2.i:
1709 // FINITEONLY-NEXT:    [[CALL_I22_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j1_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
1710 // FINITEONLY-NEXT:    br label [[_ZL3JNFIF_EXIT]]
1711 // FINITEONLY:       if.end4.i:
1712 // FINITEONLY-NEXT:    [[CALL_I_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j0_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
1713 // FINITEONLY-NEXT:    [[CALL_I21_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_j1_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
1714 // FINITEONLY-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
1715 // FINITEONLY-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3JNFIF_EXIT]]
1716 // FINITEONLY:       for.body.i:
1717 // FINITEONLY-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
1718 // FINITEONLY-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
1719 // FINITEONLY-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
1720 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1721 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to float
1722 // FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float [[CONV_I]], [[Y]]
1723 // FINITEONLY-NEXT:    [[MUL8_I:%.*]] = fmul nnan ninf contract float [[__X1_0_I3]], [[DIV_I]]
1724 // FINITEONLY-NEXT:    [[SUB_I]] = fsub nnan ninf contract float [[MUL8_I]], [[__X0_0_I2]]
1725 // FINITEONLY-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
1726 // FINITEONLY-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
1727 // FINITEONLY-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3JNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP14:![0-9]+]]
1728 // FINITEONLY:       _ZL3jnfif.exit:
1729 // 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]] ]
1730 // FINITEONLY-NEXT:    ret float [[RETVAL_0_I]]
1732 // APPROX-LABEL: @test_jnf(
1733 // APPROX-NEXT:  entry:
1734 // APPROX-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
1735 // APPROX-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
1736 // APPROX-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
1737 // APPROX-NEXT:    ]
1738 // APPROX:       if.then.i:
1739 // APPROX-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[Y:%.*]]) #[[ATTR16]]
1740 // APPROX-NEXT:    br label [[_ZL3JNFIF_EXIT:%.*]]
1741 // APPROX:       if.then2.i:
1742 // APPROX-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[Y]]) #[[ATTR16]]
1743 // APPROX-NEXT:    br label [[_ZL3JNFIF_EXIT]]
1744 // APPROX:       if.end4.i:
1745 // APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_j0_f32(float noundef [[Y]]) #[[ATTR16]]
1746 // APPROX-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef float @__ocml_j1_f32(float noundef [[Y]]) #[[ATTR16]]
1747 // APPROX-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
1748 // APPROX-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3JNFIF_EXIT]]
1749 // APPROX:       for.body.i:
1750 // APPROX-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
1751 // APPROX-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
1752 // APPROX-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
1753 // APPROX-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1754 // APPROX-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to float
1755 // APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[CONV_I]], [[Y]]
1756 // APPROX-NEXT:    [[MUL8_I:%.*]] = fmul contract float [[__X1_0_I3]], [[DIV_I]]
1757 // APPROX-NEXT:    [[SUB_I]] = fsub contract float [[MUL8_I]], [[__X0_0_I2]]
1758 // APPROX-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
1759 // APPROX-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
1760 // APPROX-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3JNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP14:![0-9]+]]
1761 // APPROX:       _ZL3jnfif.exit:
1762 // 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]] ]
1763 // APPROX-NEXT:    ret float [[RETVAL_0_I]]
1765 extern "C" __device__ float test_jnf(int x, float y) {
1766   return jnf(x, y);
1769 // DEFAULT-LABEL: @test_jn(
1770 // DEFAULT-NEXT:  entry:
1771 // DEFAULT-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
1772 // DEFAULT-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
1773 // DEFAULT-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
1774 // DEFAULT-NEXT:    ]
1775 // DEFAULT:       if.then.i:
1776 // DEFAULT-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[Y:%.*]]) #[[ATTR16]]
1777 // DEFAULT-NEXT:    br label [[_ZL2JNID_EXIT:%.*]]
1778 // DEFAULT:       if.then2.i:
1779 // DEFAULT-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[Y]]) #[[ATTR16]]
1780 // DEFAULT-NEXT:    br label [[_ZL2JNID_EXIT]]
1781 // DEFAULT:       if.end4.i:
1782 // DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[Y]]) #[[ATTR16]]
1783 // DEFAULT-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[Y]]) #[[ATTR16]]
1784 // DEFAULT-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
1785 // DEFAULT-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2JNID_EXIT]]
1786 // DEFAULT:       for.body.i:
1787 // DEFAULT-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
1788 // DEFAULT-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
1789 // DEFAULT-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
1790 // DEFAULT-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1791 // DEFAULT-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to double
1792 // DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[CONV_I]], [[Y]]
1793 // DEFAULT-NEXT:    [[MUL8_I:%.*]] = fmul contract double [[__X1_0_I3]], [[DIV_I]]
1794 // DEFAULT-NEXT:    [[SUB_I]] = fsub contract double [[MUL8_I]], [[__X0_0_I2]]
1795 // DEFAULT-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
1796 // DEFAULT-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
1797 // DEFAULT-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2JNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP15:![0-9]+]]
1798 // DEFAULT:       _ZL2jnid.exit:
1799 // 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]] ]
1800 // DEFAULT-NEXT:    ret double [[RETVAL_0_I]]
1802 // FINITEONLY-LABEL: @test_jn(
1803 // FINITEONLY-NEXT:  entry:
1804 // FINITEONLY-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
1805 // FINITEONLY-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
1806 // FINITEONLY-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
1807 // FINITEONLY-NEXT:    ]
1808 // FINITEONLY:       if.then.i:
1809 // FINITEONLY-NEXT:    [[CALL_I20_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j0_f64(double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR16]]
1810 // FINITEONLY-NEXT:    br label [[_ZL2JNID_EXIT:%.*]]
1811 // FINITEONLY:       if.then2.i:
1812 // FINITEONLY-NEXT:    [[CALL_I22_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j1_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
1813 // FINITEONLY-NEXT:    br label [[_ZL2JNID_EXIT]]
1814 // FINITEONLY:       if.end4.i:
1815 // FINITEONLY-NEXT:    [[CALL_I_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j0_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
1816 // FINITEONLY-NEXT:    [[CALL_I21_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_j1_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
1817 // FINITEONLY-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
1818 // FINITEONLY-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2JNID_EXIT]]
1819 // FINITEONLY:       for.body.i:
1820 // FINITEONLY-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
1821 // FINITEONLY-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
1822 // FINITEONLY-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
1823 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1824 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to double
1825 // FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract double [[CONV_I]], [[Y]]
1826 // FINITEONLY-NEXT:    [[MUL8_I:%.*]] = fmul nnan ninf contract double [[__X1_0_I3]], [[DIV_I]]
1827 // FINITEONLY-NEXT:    [[SUB_I]] = fsub nnan ninf contract double [[MUL8_I]], [[__X0_0_I2]]
1828 // FINITEONLY-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
1829 // FINITEONLY-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
1830 // FINITEONLY-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2JNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP15:![0-9]+]]
1831 // FINITEONLY:       _ZL2jnid.exit:
1832 // 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]] ]
1833 // FINITEONLY-NEXT:    ret double [[RETVAL_0_I]]
1835 // APPROX-LABEL: @test_jn(
1836 // APPROX-NEXT:  entry:
1837 // APPROX-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
1838 // APPROX-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
1839 // APPROX-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
1840 // APPROX-NEXT:    ]
1841 // APPROX:       if.then.i:
1842 // APPROX-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[Y:%.*]]) #[[ATTR16]]
1843 // APPROX-NEXT:    br label [[_ZL2JNID_EXIT:%.*]]
1844 // APPROX:       if.then2.i:
1845 // APPROX-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[Y]]) #[[ATTR16]]
1846 // APPROX-NEXT:    br label [[_ZL2JNID_EXIT]]
1847 // APPROX:       if.end4.i:
1848 // APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef double @__ocml_j0_f64(double noundef [[Y]]) #[[ATTR16]]
1849 // APPROX-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef double @__ocml_j1_f64(double noundef [[Y]]) #[[ATTR16]]
1850 // APPROX-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
1851 // APPROX-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2JNID_EXIT]]
1852 // APPROX:       for.body.i:
1853 // APPROX-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
1854 // APPROX-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
1855 // APPROX-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
1856 // APPROX-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
1857 // APPROX-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to double
1858 // APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[CONV_I]], [[Y]]
1859 // APPROX-NEXT:    [[MUL8_I:%.*]] = fmul contract double [[__X1_0_I3]], [[DIV_I]]
1860 // APPROX-NEXT:    [[SUB_I]] = fsub contract double [[MUL8_I]], [[__X0_0_I2]]
1861 // APPROX-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
1862 // APPROX-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
1863 // APPROX-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2JNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP15:![0-9]+]]
1864 // APPROX:       _ZL2jnid.exit:
1865 // 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]] ]
1866 // APPROX-NEXT:    ret double [[RETVAL_0_I]]
1868 extern "C" __device__ double test_jn(int x, double y) {
1869   return jn(x, y);
1872 // DEFAULT-LABEL: @test_ldexpf(
1873 // DEFAULT-NEXT:  entry:
1874 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
1875 // DEFAULT-NEXT:    ret float [[TMP0]]
1877 // FINITEONLY-LABEL: @test_ldexpf(
1878 // FINITEONLY-NEXT:  entry:
1879 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
1880 // FINITEONLY-NEXT:    ret float [[TMP0]]
1882 // APPROX-LABEL: @test_ldexpf(
1883 // APPROX-NEXT:  entry:
1884 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
1885 // APPROX-NEXT:    ret float [[TMP0]]
1887 extern "C" __device__ float test_ldexpf(float x, int y) {
1888   return ldexpf(x, y);
1891 // DEFAULT-LABEL: @test_ldexp(
1892 // DEFAULT-NEXT:  entry:
1893 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
1894 // DEFAULT-NEXT:    ret double [[TMP0]]
1896 // FINITEONLY-LABEL: @test_ldexp(
1897 // FINITEONLY-NEXT:  entry:
1898 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
1899 // FINITEONLY-NEXT:    ret double [[TMP0]]
1901 // APPROX-LABEL: @test_ldexp(
1902 // APPROX-NEXT:  entry:
1903 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
1904 // APPROX-NEXT:    ret double [[TMP0]]
1906 extern "C" __device__ double test_ldexp(double x, int y) {
1907   return ldexp(x, y);
1910 // DEFAULT-LABEL: @test_lgammaf(
1911 // DEFAULT-NEXT:  entry:
1912 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_lgamma_f32(float noundef [[X:%.*]]) #[[ATTR16]]
1913 // DEFAULT-NEXT:    ret float [[CALL_I]]
1915 // FINITEONLY-LABEL: @test_lgammaf(
1916 // FINITEONLY-NEXT:  entry:
1917 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_lgamma_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
1918 // FINITEONLY-NEXT:    ret float [[CALL_I]]
1920 // APPROX-LABEL: @test_lgammaf(
1921 // APPROX-NEXT:  entry:
1922 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_lgamma_f32(float noundef [[X:%.*]]) #[[ATTR16]]
1923 // APPROX-NEXT:    ret float [[CALL_I]]
1925 extern "C" __device__ float test_lgammaf(float x) {
1926   return lgammaf(x);
1929 // DEFAULT-LABEL: @test_lgamma(
1930 // DEFAULT-NEXT:  entry:
1931 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_lgamma_f64(double noundef [[X:%.*]]) #[[ATTR16]]
1932 // DEFAULT-NEXT:    ret double [[CALL_I]]
1934 // FINITEONLY-LABEL: @test_lgamma(
1935 // FINITEONLY-NEXT:  entry:
1936 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_lgamma_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
1937 // FINITEONLY-NEXT:    ret double [[CALL_I]]
1939 // APPROX-LABEL: @test_lgamma(
1940 // APPROX-NEXT:  entry:
1941 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_lgamma_f64(double noundef [[X:%.*]]) #[[ATTR16]]
1942 // APPROX-NEXT:    ret double [[CALL_I]]
1944 extern "C" __device__ double test_lgamma(double x) {
1945   return lgamma(x);
1948 // DEFAULT-LABEL: @test_llrintf(
1949 // DEFAULT-NEXT:  entry:
1950 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.rint.f32(float [[X:%.*]])
1951 // DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
1952 // DEFAULT-NEXT:    ret i64 [[CONV_I]]
1954 // FINITEONLY-LABEL: @test_llrintf(
1955 // FINITEONLY-NEXT:  entry:
1956 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.rint.f32(float [[X:%.*]])
1957 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
1958 // FINITEONLY-NEXT:    ret i64 [[CONV_I]]
1960 // APPROX-LABEL: @test_llrintf(
1961 // APPROX-NEXT:  entry:
1962 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.rint.f32(float [[X:%.*]])
1963 // APPROX-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
1964 // APPROX-NEXT:    ret i64 [[CONV_I]]
1966 extern "C" __device__ long long int test_llrintf(float x) {
1967   return llrintf(x);
1970 // DEFAULT-LABEL: @test_llrint(
1971 // DEFAULT-NEXT:  entry:
1972 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.rint.f64(double [[X:%.*]])
1973 // DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
1974 // DEFAULT-NEXT:    ret i64 [[CONV_I]]
1976 // FINITEONLY-LABEL: @test_llrint(
1977 // FINITEONLY-NEXT:  entry:
1978 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.rint.f64(double [[X:%.*]])
1979 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
1980 // FINITEONLY-NEXT:    ret i64 [[CONV_I]]
1982 // APPROX-LABEL: @test_llrint(
1983 // APPROX-NEXT:  entry:
1984 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.rint.f64(double [[X:%.*]])
1985 // APPROX-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
1986 // APPROX-NEXT:    ret i64 [[CONV_I]]
1988 extern "C" __device__ long long int test_llrint(double x) {
1989   return llrint(x);
1992 // DEFAULT-LABEL: @test_llroundf(
1993 // DEFAULT-NEXT:  entry:
1994 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.round.f32(float [[X:%.*]])
1995 // DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
1996 // DEFAULT-NEXT:    ret i64 [[CONV_I]]
1998 // FINITEONLY-LABEL: @test_llroundf(
1999 // FINITEONLY-NEXT:  entry:
2000 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.round.f32(float [[X:%.*]])
2001 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2002 // FINITEONLY-NEXT:    ret i64 [[CONV_I]]
2004 // APPROX-LABEL: @test_llroundf(
2005 // APPROX-NEXT:  entry:
2006 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.round.f32(float [[X:%.*]])
2007 // APPROX-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2008 // APPROX-NEXT:    ret i64 [[CONV_I]]
2010 extern "C" __device__ long long int test_llroundf(float x) {
2011   return llroundf(x);
2014 // DEFAULT-LABEL: @test_llround(
2015 // DEFAULT-NEXT:  entry:
2016 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.round.f64(double [[X:%.*]])
2017 // DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2018 // DEFAULT-NEXT:    ret i64 [[CONV_I]]
2020 // FINITEONLY-LABEL: @test_llround(
2021 // FINITEONLY-NEXT:  entry:
2022 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.round.f64(double [[X:%.*]])
2023 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2024 // FINITEONLY-NEXT:    ret i64 [[CONV_I]]
2026 // APPROX-LABEL: @test_llround(
2027 // APPROX-NEXT:  entry:
2028 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.round.f64(double [[X:%.*]])
2029 // APPROX-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2030 // APPROX-NEXT:    ret i64 [[CONV_I]]
2032 extern "C" __device__ long long int test_llround(double x) {
2033   return llround(x);
2036 // DEFAULT-LABEL: @test_log10f(
2037 // DEFAULT-NEXT:  entry:
2038 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log10.f32(float [[X:%.*]])
2039 // DEFAULT-NEXT:    ret float [[TMP0]]
2041 // FINITEONLY-LABEL: @test_log10f(
2042 // FINITEONLY-NEXT:  entry:
2043 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.log10.f32(float [[X:%.*]])
2044 // FINITEONLY-NEXT:    ret float [[TMP0]]
2046 // APPROX-LABEL: @test_log10f(
2047 // APPROX-NEXT:  entry:
2048 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log10.f32(float [[X:%.*]])
2049 // APPROX-NEXT:    ret float [[TMP0]]
2051 extern "C" __device__ float test_log10f(float x) {
2052   return log10f(x);
2055 // DEFAULT-LABEL: @test_log10(
2056 // DEFAULT-NEXT:  entry:
2057 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log10_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2058 // DEFAULT-NEXT:    ret double [[CALL_I]]
2060 // FINITEONLY-LABEL: @test_log10(
2061 // FINITEONLY-NEXT:  entry:
2062 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_log10_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2063 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2065 // APPROX-LABEL: @test_log10(
2066 // APPROX-NEXT:  entry:
2067 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log10_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2068 // APPROX-NEXT:    ret double [[CALL_I]]
2070 extern "C" __device__ double test_log10(double x) {
2071   return log10(x);
2074 // DEFAULT-LABEL: @test_log1pf(
2075 // DEFAULT-NEXT:  entry:
2076 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_log1p_f32(float noundef [[X:%.*]]) #[[ATTR15]]
2077 // DEFAULT-NEXT:    ret float [[CALL_I]]
2079 // FINITEONLY-LABEL: @test_log1pf(
2080 // FINITEONLY-NEXT:  entry:
2081 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_log1p_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2082 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2084 // APPROX-LABEL: @test_log1pf(
2085 // APPROX-NEXT:  entry:
2086 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_log1p_f32(float noundef [[X:%.*]]) #[[ATTR15]]
2087 // APPROX-NEXT:    ret float [[CALL_I]]
2089 extern "C" __device__ float test_log1pf(float x) {
2090   return log1pf(x);
2093 // DEFAULT-LABEL: @test_log1p(
2094 // DEFAULT-NEXT:  entry:
2095 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log1p_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2096 // DEFAULT-NEXT:    ret double [[CALL_I]]
2098 // FINITEONLY-LABEL: @test_log1p(
2099 // FINITEONLY-NEXT:  entry:
2100 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_log1p_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2101 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2103 // APPROX-LABEL: @test_log1p(
2104 // APPROX-NEXT:  entry:
2105 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log1p_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2106 // APPROX-NEXT:    ret double [[CALL_I]]
2108 extern "C" __device__ double test_log1p(double x) {
2109   return log1p(x);
2112 // DEFAULT-LABEL: @test_log2f(
2113 // DEFAULT-NEXT:  entry:
2114 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_log2_f32(float noundef [[X:%.*]]) #[[ATTR15]]
2115 // DEFAULT-NEXT:    ret float [[CALL_I]]
2117 // FINITEONLY-LABEL: @test_log2f(
2118 // FINITEONLY-NEXT:  entry:
2119 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_log2_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2120 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2122 // APPROX-LABEL: @test_log2f(
2123 // APPROX-NEXT:  entry:
2124 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.log.f32(float [[X:%.*]])
2125 // APPROX-NEXT:    ret float [[TMP0]]
2127 extern "C" __device__ float test_log2f(float x) {
2128   return log2f(x);
2131 // DEFAULT-LABEL: @test_log2(
2132 // DEFAULT-NEXT:  entry:
2133 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log2_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2134 // DEFAULT-NEXT:    ret double [[CALL_I]]
2136 // FINITEONLY-LABEL: @test_log2(
2137 // FINITEONLY-NEXT:  entry:
2138 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_log2_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2139 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2141 // APPROX-LABEL: @test_log2(
2142 // APPROX-NEXT:  entry:
2143 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_log2_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2144 // APPROX-NEXT:    ret double [[CALL_I]]
2146 extern "C" __device__ double test_log2(double x) {
2147   return log2(x);
2150 // DEFAULT-LABEL: @test_logbf(
2151 // DEFAULT-NEXT:  entry:
2152 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_logb_f32(float noundef [[X:%.*]]) #[[ATTR14]]
2153 // DEFAULT-NEXT:    ret float [[CALL_I]]
2155 // FINITEONLY-LABEL: @test_logbf(
2156 // FINITEONLY-NEXT:  entry:
2157 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_logb_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
2158 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2160 // APPROX-LABEL: @test_logbf(
2161 // APPROX-NEXT:  entry:
2162 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_logb_f32(float noundef [[X:%.*]]) #[[ATTR14]]
2163 // APPROX-NEXT:    ret float [[CALL_I]]
2165 extern "C" __device__ float test_logbf(float x) {
2166   return logbf(x);
2169 // DEFAULT-LABEL: @test_logb(
2170 // DEFAULT-NEXT:  entry:
2171 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_logb_f64(double noundef [[X:%.*]]) #[[ATTR14]]
2172 // DEFAULT-NEXT:    ret double [[CALL_I]]
2174 // FINITEONLY-LABEL: @test_logb(
2175 // FINITEONLY-NEXT:  entry:
2176 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_logb_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
2177 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2179 // APPROX-LABEL: @test_logb(
2180 // APPROX-NEXT:  entry:
2181 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_logb_f64(double noundef [[X:%.*]]) #[[ATTR14]]
2182 // APPROX-NEXT:    ret double [[CALL_I]]
2184 extern "C" __device__ double test_logb(double x) {
2185   return logb(x);
2188 // DEFAULT-LABEL: @test_logf(
2189 // DEFAULT-NEXT:  entry:
2190 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_log_f32(float noundef [[X:%.*]]) #[[ATTR15]]
2191 // DEFAULT-NEXT:    ret float [[CALL_I]]
2193 // FINITEONLY-LABEL: @test_logf(
2194 // FINITEONLY-NEXT:  entry:
2195 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_log_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2196 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2198 // APPROX-LABEL: @test_logf(
2199 // APPROX-NEXT:  entry:
2200 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log.f32(float [[X:%.*]])
2201 // APPROX-NEXT:    ret float [[TMP0]]
2203 extern "C" __device__ float test_logf(float x) {
2204   return logf(x);
2207 // DEFAULT-LABEL: @test_lrintf(
2208 // DEFAULT-NEXT:  entry:
2209 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.rint.f32(float [[X:%.*]])
2210 // DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2211 // DEFAULT-NEXT:    ret i64 [[CONV_I]]
2213 // FINITEONLY-LABEL: @test_lrintf(
2214 // FINITEONLY-NEXT:  entry:
2215 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.rint.f32(float [[X:%.*]])
2216 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2217 // FINITEONLY-NEXT:    ret i64 [[CONV_I]]
2219 // APPROX-LABEL: @test_lrintf(
2220 // APPROX-NEXT:  entry:
2221 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.rint.f32(float [[X:%.*]])
2222 // APPROX-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2223 // APPROX-NEXT:    ret i64 [[CONV_I]]
2225 extern "C" __device__ long int test_lrintf(float x) {
2226   return lrintf(x);
2229 // DEFAULT-LABEL: @test_lrint(
2230 // DEFAULT-NEXT:  entry:
2231 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.rint.f64(double [[X:%.*]])
2232 // DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2233 // DEFAULT-NEXT:    ret i64 [[CONV_I]]
2235 // FINITEONLY-LABEL: @test_lrint(
2236 // FINITEONLY-NEXT:  entry:
2237 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.rint.f64(double [[X:%.*]])
2238 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2239 // FINITEONLY-NEXT:    ret i64 [[CONV_I]]
2241 // APPROX-LABEL: @test_lrint(
2242 // APPROX-NEXT:  entry:
2243 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.rint.f64(double [[X:%.*]])
2244 // APPROX-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2245 // APPROX-NEXT:    ret i64 [[CONV_I]]
2247 extern "C" __device__ long int test_lrint(double x) {
2248   return lrint(x);
2251 // DEFAULT-LABEL: @test_lroundf(
2252 // DEFAULT-NEXT:  entry:
2253 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.round.f32(float [[X:%.*]])
2254 // DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2255 // DEFAULT-NEXT:    ret i64 [[CONV_I]]
2257 // FINITEONLY-LABEL: @test_lroundf(
2258 // FINITEONLY-NEXT:  entry:
2259 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.round.f32(float [[X:%.*]])
2260 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2261 // FINITEONLY-NEXT:    ret i64 [[CONV_I]]
2263 // APPROX-LABEL: @test_lroundf(
2264 // APPROX-NEXT:  entry:
2265 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.round.f32(float [[X:%.*]])
2266 // APPROX-NEXT:    [[CONV_I:%.*]] = fptosi float [[TMP0]] to i64
2267 // APPROX-NEXT:    ret i64 [[CONV_I]]
2269 extern "C" __device__ long int test_lroundf(float x) {
2270   return lroundf(x);
2273 // DEFAULT-LABEL: @test_lround(
2274 // DEFAULT-NEXT:  entry:
2275 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.round.f64(double [[X:%.*]])
2276 // DEFAULT-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2277 // DEFAULT-NEXT:    ret i64 [[CONV_I]]
2279 // FINITEONLY-LABEL: @test_lround(
2280 // FINITEONLY-NEXT:  entry:
2281 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.round.f64(double [[X:%.*]])
2282 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2283 // FINITEONLY-NEXT:    ret i64 [[CONV_I]]
2285 // APPROX-LABEL: @test_lround(
2286 // APPROX-NEXT:  entry:
2287 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.round.f64(double [[X:%.*]])
2288 // APPROX-NEXT:    [[CONV_I:%.*]] = fptosi double [[TMP0]] to i64
2289 // APPROX-NEXT:    ret i64 [[CONV_I]]
2291 extern "C" __device__ long int test_lround(double x) {
2292   return lround(x);
2295 // DEFAULT-LABEL: @test_modff(
2296 // DEFAULT-NEXT:  entry:
2297 // DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
2298 // DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17:[0-9]+]]
2299 // DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract noundef float @__ocml_modf_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
2300 // DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16:![0-9]+]]
2301 // DEFAULT-NEXT:    store float [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
2302 // DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
2303 // DEFAULT-NEXT:    ret float [[CALL_I]]
2305 // FINITEONLY-LABEL: @test_modff(
2306 // FINITEONLY-NEXT:  entry:
2307 // FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
2308 // FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17:[0-9]+]]
2309 // 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]]) #[[ATTR16]]
2310 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16:![0-9]+]]
2311 // FINITEONLY-NEXT:    store float [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
2312 // FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
2313 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2315 // APPROX-LABEL: @test_modff(
2316 // APPROX-NEXT:  entry:
2317 // APPROX-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
2318 // APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17:[0-9]+]]
2319 // APPROX-NEXT:    [[CALL_I:%.*]] = call contract noundef float @__ocml_modf_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
2320 // APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16:![0-9]+]]
2321 // APPROX-NEXT:    store float [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
2322 // APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
2323 // APPROX-NEXT:    ret float [[CALL_I]]
2325 extern "C" __device__ float test_modff(float x, float* y) {
2326   return modff(x, y);
2329 // DEFAULT-LABEL: @test_modf(
2330 // DEFAULT-NEXT:  entry:
2331 // DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
2332 // DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
2333 // DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract noundef double @__ocml_modf_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
2334 // DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18:![0-9]+]]
2335 // DEFAULT-NEXT:    store double [[TMP0]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
2336 // DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
2337 // DEFAULT-NEXT:    ret double [[CALL_I]]
2339 // FINITEONLY-LABEL: @test_modf(
2340 // FINITEONLY-NEXT:  entry:
2341 // FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
2342 // FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
2343 // 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]]) #[[ATTR16]]
2344 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18:![0-9]+]]
2345 // FINITEONLY-NEXT:    store double [[TMP0]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
2346 // FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
2347 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2349 // APPROX-LABEL: @test_modf(
2350 // APPROX-NEXT:  entry:
2351 // APPROX-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
2352 // APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
2353 // APPROX-NEXT:    [[CALL_I:%.*]] = call contract noundef double @__ocml_modf_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
2354 // APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18:![0-9]+]]
2355 // APPROX-NEXT:    store double [[TMP0]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
2356 // APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
2357 // APPROX-NEXT:    ret double [[CALL_I]]
2359 extern "C" __device__ double test_modf(double x, double* y) {
2360   return modf(x, y);
2363 // CHECK-LABEL: @test_nanf(
2364 // CHECK-NEXT:  entry:
2365 // CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[TAG:%.*]], align 1, !tbaa [[TBAA4]]
2366 // CHECK-NEXT:    [[CMP_I_I:%.*]] = icmp eq i8 [[TMP0]], 48
2367 // CHECK-NEXT:    br i1 [[CMP_I_I]], label [[IF_THEN_I_I:%.*]], label [[WHILE_COND_I14_I_I:%.*]]
2368 // CHECK:       if.then.i.i:
2369 // CHECK-NEXT:    [[INCDEC_PTR_I_I:%.*]] = getelementptr inbounds i8, ptr [[TAG]], i64 1
2370 // CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[INCDEC_PTR_I_I]], align 1, !tbaa [[TBAA4]]
2371 // CHECK-NEXT:    switch i8 [[TMP1]], label [[WHILE_COND_I_I_I:%.*]] [
2372 // CHECK-NEXT:    i8 120, label [[WHILE_COND_I30_I_I_PREHEADER:%.*]]
2373 // CHECK-NEXT:    i8 88, label [[WHILE_COND_I30_I_I_PREHEADER]]
2374 // CHECK-NEXT:    ]
2375 // CHECK:       while.cond.i30.i.i.preheader:
2376 // CHECK-NEXT:    br label [[WHILE_COND_I30_I_I:%.*]]
2377 // CHECK:       while.cond.i30.i.i:
2378 // CHECK-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]] ]
2379 // CHECK-NEXT:    [[__R_0_I32_I_I:%.*]] = phi i64 [ [[__R_2_I_I_I:%.*]], [[CLEANUP_I36_I_I]] ], [ 0, [[WHILE_COND_I30_I_I_PREHEADER]] ]
2380 // CHECK-NEXT:    [[TMP2:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I31_I_I]], align 1, !tbaa [[TBAA4]]
2381 // CHECK-NEXT:    [[CMP_NOT_I33_I_I:%.*]] = icmp eq i8 [[TMP2]], 0
2382 // CHECK-NEXT:    br i1 [[CMP_NOT_I33_I_I]], label [[_ZL4NANFPKC_EXIT:%.*]], label [[WHILE_BODY_I34_I_I:%.*]]
2383 // CHECK:       while.body.i34.i.i:
2384 // CHECK-NEXT:    [[TMP3:%.*]] = add i8 [[TMP2]], -48
2385 // CHECK-NEXT:    [[OR_COND_I35_I_I:%.*]] = icmp ult i8 [[TMP3]], 10
2386 // CHECK-NEXT:    br i1 [[OR_COND_I35_I_I]], label [[IF_END31_I_I_I:%.*]], label [[IF_ELSE_I_I_I:%.*]]
2387 // CHECK:       if.else.i.i.i:
2388 // CHECK-NEXT:    [[TMP4:%.*]] = add i8 [[TMP2]], -97
2389 // CHECK-NEXT:    [[OR_COND33_I_I_I:%.*]] = icmp ult i8 [[TMP4]], 6
2390 // CHECK-NEXT:    br i1 [[OR_COND33_I_I_I]], label [[IF_END31_I_I_I]], label [[IF_ELSE17_I_I_I:%.*]]
2391 // CHECK:       if.else17.i.i.i:
2392 // CHECK-NEXT:    [[TMP5:%.*]] = add i8 [[TMP2]], -65
2393 // CHECK-NEXT:    [[OR_COND34_I_I_I:%.*]] = icmp ult i8 [[TMP5]], 6
2394 // CHECK-NEXT:    br i1 [[OR_COND34_I_I_I]], label [[IF_END31_I_I_I]], label [[CLEANUP_I36_I_I]]
2395 // CHECK:       if.end31.i.i.i:
2396 // CHECK-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I34_I_I]] ], [ -87, [[IF_ELSE_I_I_I]] ], [ -55, [[IF_ELSE17_I_I_I]] ]
2397 // CHECK-NEXT:    [[MUL24_I_I_I:%.*]] = shl i64 [[__R_0_I32_I_I]], 4
2398 // CHECK-NEXT:    [[CONV25_I_I_I:%.*]] = sext i8 [[TMP2]] to i64
2399 // CHECK-NEXT:    [[ADD26_I_I_I:%.*]] = add i64 [[MUL24_I_I_I]], [[DOTSINK]]
2400 // CHECK-NEXT:    [[ADD28_I_I_I:%.*]] = add i64 [[ADD26_I_I_I]], [[CONV25_I_I_I]]
2401 // CHECK-NEXT:    [[INCDEC_PTR_I40_I_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I31_I_I]], i64 1
2402 // CHECK-NEXT:    br label [[CLEANUP_I36_I_I]]
2403 // CHECK:       cleanup.i36.i.i:
2404 // CHECK-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]] ]
2405 // CHECK-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]] ]
2406 // CHECK-NEXT:    [[COND_I_I_I:%.*]] = phi i1 [ true, [[IF_END31_I_I_I]] ], [ false, [[IF_ELSE17_I_I_I]] ]
2407 // CHECK-NEXT:    br i1 [[COND_I_I_I]], label [[WHILE_COND_I30_I_I]], label [[_ZL4NANFPKC_EXIT]], !llvm.loop [[LOOP11]]
2408 // CHECK:       while.cond.i.i.i:
2409 // CHECK-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]] ]
2410 // CHECK-NEXT:    [[__R_0_I_I_I:%.*]] = phi i64 [ [[__R_1_I_I_I:%.*]], [[CLEANUP_I_I_I]] ], [ 0, [[IF_THEN_I_I]] ]
2411 // CHECK-NEXT:    [[TMP6:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I_I_I]], align 1, !tbaa [[TBAA4]]
2412 // CHECK-NEXT:    [[CMP_NOT_I_I_I:%.*]] = icmp eq i8 [[TMP6]], 0
2413 // CHECK-NEXT:    br i1 [[CMP_NOT_I_I_I]], label [[_ZL4NANFPKC_EXIT]], label [[WHILE_BODY_I_I_I:%.*]]
2414 // CHECK:       while.body.i.i.i:
2415 // CHECK-NEXT:    [[TMP7:%.*]] = and i8 [[TMP6]], -8
2416 // CHECK-NEXT:    [[OR_COND_I_I_I:%.*]] = icmp eq i8 [[TMP7]], 48
2417 // CHECK-NEXT:    br i1 [[OR_COND_I_I_I]], label [[IF_THEN_I_I_I:%.*]], label [[CLEANUP_I_I_I]]
2418 // CHECK:       if.then.i.i.i:
2419 // CHECK-NEXT:    [[MUL_I_I_I:%.*]] = shl i64 [[__R_0_I_I_I]], 3
2420 // CHECK-NEXT:    [[CONV5_I_I_I:%.*]] = sext i8 [[TMP6]] to i64
2421 // CHECK-NEXT:    [[ADD_I_I_I:%.*]] = add i64 [[MUL_I_I_I]], -48
2422 // CHECK-NEXT:    [[SUB_I_I_I:%.*]] = add i64 [[ADD_I_I_I]], [[CONV5_I_I_I]]
2423 // CHECK-NEXT:    [[INCDEC_PTR_I_I_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I_I_I]], i64 1
2424 // CHECK-NEXT:    br label [[CLEANUP_I_I_I]]
2425 // CHECK:       cleanup.i.i.i:
2426 // CHECK-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]] ]
2427 // CHECK-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]] ]
2428 // CHECK-NEXT:    br i1 [[OR_COND_I_I_I]], label [[WHILE_COND_I_I_I]], label [[_ZL4NANFPKC_EXIT]], !llvm.loop [[LOOP7]]
2429 // CHECK:       while.cond.i14.i.i:
2430 // CHECK-NEXT:    [[__TAGP_ADDR_0_I15_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I21_I_I:%.*]], [[CLEANUP_I20_I_I:%.*]] ], [ [[TAG]], [[ENTRY:%.*]] ]
2431 // CHECK-NEXT:    [[__R_0_I16_I_I:%.*]] = phi i64 [ [[__R_1_I22_I_I:%.*]], [[CLEANUP_I20_I_I]] ], [ 0, [[ENTRY]] ]
2432 // CHECK-NEXT:    [[TMP8:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I15_I_I]], align 1, !tbaa [[TBAA4]]
2433 // CHECK-NEXT:    [[CMP_NOT_I17_I_I:%.*]] = icmp eq i8 [[TMP8]], 0
2434 // CHECK-NEXT:    br i1 [[CMP_NOT_I17_I_I]], label [[_ZL4NANFPKC_EXIT]], label [[WHILE_BODY_I18_I_I:%.*]]
2435 // CHECK:       while.body.i18.i.i:
2436 // CHECK-NEXT:    [[TMP9:%.*]] = add i8 [[TMP8]], -48
2437 // CHECK-NEXT:    [[OR_COND_I19_I_I:%.*]] = icmp ult i8 [[TMP9]], 10
2438 // CHECK-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[IF_THEN_I24_I_I:%.*]], label [[CLEANUP_I20_I_I]]
2439 // CHECK:       if.then.i24.i.i:
2440 // CHECK-NEXT:    [[MUL_I25_I_I:%.*]] = mul i64 [[__R_0_I16_I_I]], 10
2441 // CHECK-NEXT:    [[CONV5_I26_I_I:%.*]] = sext i8 [[TMP8]] to i64
2442 // CHECK-NEXT:    [[ADD_I27_I_I:%.*]] = add i64 [[MUL_I25_I_I]], -48
2443 // CHECK-NEXT:    [[SUB_I28_I_I:%.*]] = add i64 [[ADD_I27_I_I]], [[CONV5_I26_I_I]]
2444 // CHECK-NEXT:    [[INCDEC_PTR_I29_I_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I15_I_I]], i64 1
2445 // CHECK-NEXT:    br label [[CLEANUP_I20_I_I]]
2446 // CHECK:       cleanup.i20.i.i:
2447 // CHECK-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]] ]
2448 // CHECK-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]] ]
2449 // CHECK-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[WHILE_COND_I14_I_I]], label [[_ZL4NANFPKC_EXIT]], !llvm.loop [[LOOP10]]
2450 // CHECK:       _ZL4nanfPKc.exit:
2451 // CHECK-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]] ]
2452 // CHECK-NEXT:    [[CONV_I:%.*]] = trunc i64 [[RETVAL_0_I_I]] to i32
2453 // CHECK-NEXT:    [[BF_VALUE_I:%.*]] = and i32 [[CONV_I]], 4194303
2454 // CHECK-NEXT:    [[BF_SET9_I:%.*]] = or i32 [[BF_VALUE_I]], 2143289344
2455 // CHECK-NEXT:    [[TMP10:%.*]] = bitcast i32 [[BF_SET9_I]] to float
2456 // CHECK-NEXT:    ret float [[TMP10]]
2458 extern "C" __device__ float test_nanf(const char *tag) {
2459   return nanf(tag);
2462 // CHECK-LABEL: @test_nan(
2463 // CHECK-NEXT:  entry:
2464 // CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[TAG:%.*]], align 1, !tbaa [[TBAA4]]
2465 // CHECK-NEXT:    [[CMP_I_I:%.*]] = icmp eq i8 [[TMP0]], 48
2466 // CHECK-NEXT:    br i1 [[CMP_I_I]], label [[IF_THEN_I_I:%.*]], label [[WHILE_COND_I14_I_I:%.*]]
2467 // CHECK:       if.then.i.i:
2468 // CHECK-NEXT:    [[INCDEC_PTR_I_I:%.*]] = getelementptr inbounds i8, ptr [[TAG]], i64 1
2469 // CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[INCDEC_PTR_I_I]], align 1, !tbaa [[TBAA4]]
2470 // CHECK-NEXT:    switch i8 [[TMP1]], label [[WHILE_COND_I_I_I:%.*]] [
2471 // CHECK-NEXT:    i8 120, label [[WHILE_COND_I30_I_I_PREHEADER:%.*]]
2472 // CHECK-NEXT:    i8 88, label [[WHILE_COND_I30_I_I_PREHEADER]]
2473 // CHECK-NEXT:    ]
2474 // CHECK:       while.cond.i30.i.i.preheader:
2475 // CHECK-NEXT:    br label [[WHILE_COND_I30_I_I:%.*]]
2476 // CHECK:       while.cond.i30.i.i:
2477 // CHECK-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]] ]
2478 // CHECK-NEXT:    [[__R_0_I32_I_I:%.*]] = phi i64 [ [[__R_2_I_I_I:%.*]], [[CLEANUP_I36_I_I]] ], [ 0, [[WHILE_COND_I30_I_I_PREHEADER]] ]
2479 // CHECK-NEXT:    [[TMP2:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I31_I_I]], align 1, !tbaa [[TBAA4]]
2480 // CHECK-NEXT:    [[CMP_NOT_I33_I_I:%.*]] = icmp eq i8 [[TMP2]], 0
2481 // CHECK-NEXT:    br i1 [[CMP_NOT_I33_I_I]], label [[_ZL3NANPKC_EXIT:%.*]], label [[WHILE_BODY_I34_I_I:%.*]]
2482 // CHECK:       while.body.i34.i.i:
2483 // CHECK-NEXT:    [[TMP3:%.*]] = add i8 [[TMP2]], -48
2484 // CHECK-NEXT:    [[OR_COND_I35_I_I:%.*]] = icmp ult i8 [[TMP3]], 10
2485 // CHECK-NEXT:    br i1 [[OR_COND_I35_I_I]], label [[IF_END31_I_I_I:%.*]], label [[IF_ELSE_I_I_I:%.*]]
2486 // CHECK:       if.else.i.i.i:
2487 // CHECK-NEXT:    [[TMP4:%.*]] = add i8 [[TMP2]], -97
2488 // CHECK-NEXT:    [[OR_COND33_I_I_I:%.*]] = icmp ult i8 [[TMP4]], 6
2489 // CHECK-NEXT:    br i1 [[OR_COND33_I_I_I]], label [[IF_END31_I_I_I]], label [[IF_ELSE17_I_I_I:%.*]]
2490 // CHECK:       if.else17.i.i.i:
2491 // CHECK-NEXT:    [[TMP5:%.*]] = add i8 [[TMP2]], -65
2492 // CHECK-NEXT:    [[OR_COND34_I_I_I:%.*]] = icmp ult i8 [[TMP5]], 6
2493 // CHECK-NEXT:    br i1 [[OR_COND34_I_I_I]], label [[IF_END31_I_I_I]], label [[CLEANUP_I36_I_I]]
2494 // CHECK:       if.end31.i.i.i:
2495 // CHECK-NEXT:    [[DOTSINK:%.*]] = phi i64 [ -48, [[WHILE_BODY_I34_I_I]] ], [ -87, [[IF_ELSE_I_I_I]] ], [ -55, [[IF_ELSE17_I_I_I]] ]
2496 // CHECK-NEXT:    [[MUL24_I_I_I:%.*]] = shl i64 [[__R_0_I32_I_I]], 4
2497 // CHECK-NEXT:    [[CONV25_I_I_I:%.*]] = sext i8 [[TMP2]] to i64
2498 // CHECK-NEXT:    [[ADD26_I_I_I:%.*]] = add i64 [[MUL24_I_I_I]], [[DOTSINK]]
2499 // CHECK-NEXT:    [[ADD28_I_I_I:%.*]] = add i64 [[ADD26_I_I_I]], [[CONV25_I_I_I]]
2500 // CHECK-NEXT:    [[INCDEC_PTR_I40_I_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I31_I_I]], i64 1
2501 // CHECK-NEXT:    br label [[CLEANUP_I36_I_I]]
2502 // CHECK:       cleanup.i36.i.i:
2503 // CHECK-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]] ]
2504 // CHECK-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]] ]
2505 // CHECK-NEXT:    [[COND_I_I_I:%.*]] = phi i1 [ true, [[IF_END31_I_I_I]] ], [ false, [[IF_ELSE17_I_I_I]] ]
2506 // CHECK-NEXT:    br i1 [[COND_I_I_I]], label [[WHILE_COND_I30_I_I]], label [[_ZL3NANPKC_EXIT]], !llvm.loop [[LOOP11]]
2507 // CHECK:       while.cond.i.i.i:
2508 // CHECK-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]] ]
2509 // CHECK-NEXT:    [[__R_0_I_I_I:%.*]] = phi i64 [ [[__R_1_I_I_I:%.*]], [[CLEANUP_I_I_I]] ], [ 0, [[IF_THEN_I_I]] ]
2510 // CHECK-NEXT:    [[TMP6:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I_I_I]], align 1, !tbaa [[TBAA4]]
2511 // CHECK-NEXT:    [[CMP_NOT_I_I_I:%.*]] = icmp eq i8 [[TMP6]], 0
2512 // CHECK-NEXT:    br i1 [[CMP_NOT_I_I_I]], label [[_ZL3NANPKC_EXIT]], label [[WHILE_BODY_I_I_I:%.*]]
2513 // CHECK:       while.body.i.i.i:
2514 // CHECK-NEXT:    [[TMP7:%.*]] = and i8 [[TMP6]], -8
2515 // CHECK-NEXT:    [[OR_COND_I_I_I:%.*]] = icmp eq i8 [[TMP7]], 48
2516 // CHECK-NEXT:    br i1 [[OR_COND_I_I_I]], label [[IF_THEN_I_I_I:%.*]], label [[CLEANUP_I_I_I]]
2517 // CHECK:       if.then.i.i.i:
2518 // CHECK-NEXT:    [[MUL_I_I_I:%.*]] = shl i64 [[__R_0_I_I_I]], 3
2519 // CHECK-NEXT:    [[CONV5_I_I_I:%.*]] = sext i8 [[TMP6]] to i64
2520 // CHECK-NEXT:    [[ADD_I_I_I:%.*]] = add i64 [[MUL_I_I_I]], -48
2521 // CHECK-NEXT:    [[SUB_I_I_I:%.*]] = add i64 [[ADD_I_I_I]], [[CONV5_I_I_I]]
2522 // CHECK-NEXT:    [[INCDEC_PTR_I_I_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I_I_I]], i64 1
2523 // CHECK-NEXT:    br label [[CLEANUP_I_I_I]]
2524 // CHECK:       cleanup.i.i.i:
2525 // CHECK-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]] ]
2526 // CHECK-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]] ]
2527 // CHECK-NEXT:    br i1 [[OR_COND_I_I_I]], label [[WHILE_COND_I_I_I]], label [[_ZL3NANPKC_EXIT]], !llvm.loop [[LOOP7]]
2528 // CHECK:       while.cond.i14.i.i:
2529 // CHECK-NEXT:    [[__TAGP_ADDR_0_I15_I_I:%.*]] = phi ptr [ [[__TAGP_ADDR_1_I21_I_I:%.*]], [[CLEANUP_I20_I_I:%.*]] ], [ [[TAG]], [[ENTRY:%.*]] ]
2530 // CHECK-NEXT:    [[__R_0_I16_I_I:%.*]] = phi i64 [ [[__R_1_I22_I_I:%.*]], [[CLEANUP_I20_I_I]] ], [ 0, [[ENTRY]] ]
2531 // CHECK-NEXT:    [[TMP8:%.*]] = load i8, ptr [[__TAGP_ADDR_0_I15_I_I]], align 1, !tbaa [[TBAA4]]
2532 // CHECK-NEXT:    [[CMP_NOT_I17_I_I:%.*]] = icmp eq i8 [[TMP8]], 0
2533 // CHECK-NEXT:    br i1 [[CMP_NOT_I17_I_I]], label [[_ZL3NANPKC_EXIT]], label [[WHILE_BODY_I18_I_I:%.*]]
2534 // CHECK:       while.body.i18.i.i:
2535 // CHECK-NEXT:    [[TMP9:%.*]] = add i8 [[TMP8]], -48
2536 // CHECK-NEXT:    [[OR_COND_I19_I_I:%.*]] = icmp ult i8 [[TMP9]], 10
2537 // CHECK-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[IF_THEN_I24_I_I:%.*]], label [[CLEANUP_I20_I_I]]
2538 // CHECK:       if.then.i24.i.i:
2539 // CHECK-NEXT:    [[MUL_I25_I_I:%.*]] = mul i64 [[__R_0_I16_I_I]], 10
2540 // CHECK-NEXT:    [[CONV5_I26_I_I:%.*]] = sext i8 [[TMP8]] to i64
2541 // CHECK-NEXT:    [[ADD_I27_I_I:%.*]] = add i64 [[MUL_I25_I_I]], -48
2542 // CHECK-NEXT:    [[SUB_I28_I_I:%.*]] = add i64 [[ADD_I27_I_I]], [[CONV5_I26_I_I]]
2543 // CHECK-NEXT:    [[INCDEC_PTR_I29_I_I:%.*]] = getelementptr inbounds i8, ptr [[__TAGP_ADDR_0_I15_I_I]], i64 1
2544 // CHECK-NEXT:    br label [[CLEANUP_I20_I_I]]
2545 // CHECK:       cleanup.i20.i.i:
2546 // CHECK-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]] ]
2547 // CHECK-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]] ]
2548 // CHECK-NEXT:    br i1 [[OR_COND_I19_I_I]], label [[WHILE_COND_I14_I_I]], label [[_ZL3NANPKC_EXIT]], !llvm.loop [[LOOP10]]
2549 // CHECK:       _ZL3nanPKc.exit:
2550 // CHECK-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]] ]
2551 // CHECK-NEXT:    [[BF_VALUE_I:%.*]] = and i64 [[RETVAL_0_I_I]], 2251799813685247
2552 // CHECK-NEXT:    [[BF_SET9_I:%.*]] = or i64 [[BF_VALUE_I]], 9221120237041090560
2553 // CHECK-NEXT:    [[TMP10:%.*]] = bitcast i64 [[BF_SET9_I]] to double
2554 // CHECK-NEXT:    ret double [[TMP10]]
2556 extern "C" __device__ double test_nan(const char *tag) {
2557   return nan(tag);
2560 // CHECK-LABEL: @test_nanf_emptystr(
2561 // CHECK-NEXT:  entry:
2562 // CHECK-NEXT:    ret float 0x7FF8000000000000
2564 extern "C" __device__ float test_nanf_emptystr() {
2565   return nanf("");
2568 // CHECK-LABEL: @test_nan_emptystr(
2569 // CHECK-NEXT:  entry:
2570 // CHECK-NEXT:    ret double 0x7FF8000000000000
2572 extern "C" __device__ double test_nan_emptystr() {
2573   return nan("");
2576 // CHECK-LABEL: @test_nanf_fill(
2577 // CHECK-NEXT:  entry:
2578 // CHECK-NEXT:    ret float 0x7FF8000000000000
2580 extern "C" __device__ float test_nanf_fill() {
2581   return nanf("0x456");
2584 // CHECK-LABEL: @test_nan_fill(
2585 // CHECK-NEXT:  entry:
2586 // CHECK-NEXT:    ret double 0x7FF8000000000000
2588 extern "C" __device__ double test_nan_fill() {
2589   return nan("0x123");
2592 // DEFAULT-LABEL: @test_nearbyintf(
2593 // DEFAULT-NEXT:  entry:
2594 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.nearbyint.f32(float [[X:%.*]])
2595 // DEFAULT-NEXT:    ret float [[TMP0]]
2597 // FINITEONLY-LABEL: @test_nearbyintf(
2598 // FINITEONLY-NEXT:  entry:
2599 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.nearbyint.f32(float [[X:%.*]])
2600 // FINITEONLY-NEXT:    ret float [[TMP0]]
2602 // APPROX-LABEL: @test_nearbyintf(
2603 // APPROX-NEXT:  entry:
2604 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.nearbyint.f32(float [[X:%.*]])
2605 // APPROX-NEXT:    ret float [[TMP0]]
2607 extern "C" __device__ float test_nearbyintf(float x) {
2608   return nearbyintf(x);
2611 // DEFAULT-LABEL: @test_nearbyint(
2612 // DEFAULT-NEXT:  entry:
2613 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.nearbyint.f64(double [[X:%.*]])
2614 // DEFAULT-NEXT:    ret double [[TMP0]]
2616 // FINITEONLY-LABEL: @test_nearbyint(
2617 // FINITEONLY-NEXT:  entry:
2618 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.nearbyint.f64(double [[X:%.*]])
2619 // FINITEONLY-NEXT:    ret double [[TMP0]]
2621 // APPROX-LABEL: @test_nearbyint(
2622 // APPROX-NEXT:  entry:
2623 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.nearbyint.f64(double [[X:%.*]])
2624 // APPROX-NEXT:    ret double [[TMP0]]
2626 extern "C" __device__ double test_nearbyint(double x) {
2627   return nearbyint(x);
2630 // DEFAULT-LABEL: @test_nextafterf(
2631 // DEFAULT-NEXT:  entry:
2632 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_nextafter_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
2633 // DEFAULT-NEXT:    ret float [[CALL_I]]
2635 // FINITEONLY-LABEL: @test_nextafterf(
2636 // FINITEONLY-NEXT:  entry:
2637 // 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:%.*]]) #[[ATTR14]]
2638 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2640 // APPROX-LABEL: @test_nextafterf(
2641 // APPROX-NEXT:  entry:
2642 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_nextafter_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
2643 // APPROX-NEXT:    ret float [[CALL_I]]
2645 extern "C" __device__ float test_nextafterf(float x, float y) {
2646   return nextafterf(x, y);
2649 // DEFAULT-LABEL: @test_nextafter(
2650 // DEFAULT-NEXT:  entry:
2651 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_nextafter_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
2652 // DEFAULT-NEXT:    ret double [[CALL_I]]
2654 // FINITEONLY-LABEL: @test_nextafter(
2655 // FINITEONLY-NEXT:  entry:
2656 // 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:%.*]]) #[[ATTR14]]
2657 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2659 // APPROX-LABEL: @test_nextafter(
2660 // APPROX-NEXT:  entry:
2661 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_nextafter_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
2662 // APPROX-NEXT:    ret double [[CALL_I]]
2664 extern "C" __device__ double test_nextafter(double x, double y) {
2665   return nextafter(x, y);
2668 // DEFAULT-LABEL: @test_norm3df(
2669 // DEFAULT-NEXT:  entry:
2670 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_len3_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]]) #[[ATTR14]]
2671 // DEFAULT-NEXT:    ret float [[CALL_I]]
2673 // FINITEONLY-LABEL: @test_norm3df(
2674 // FINITEONLY-NEXT:  entry:
2675 // 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:%.*]]) #[[ATTR14]]
2676 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2678 // APPROX-LABEL: @test_norm3df(
2679 // APPROX-NEXT:  entry:
2680 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_len3_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]]) #[[ATTR14]]
2681 // APPROX-NEXT:    ret float [[CALL_I]]
2683 extern "C" __device__ float test_norm3df(float x, float y, float z) {
2684   return norm3df(x, y, z);
2687 // DEFAULT-LABEL: @test_norm3d(
2688 // DEFAULT-NEXT:  entry:
2689 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_len3_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]]) #[[ATTR14]]
2690 // DEFAULT-NEXT:    ret double [[CALL_I]]
2692 // FINITEONLY-LABEL: @test_norm3d(
2693 // FINITEONLY-NEXT:  entry:
2694 // 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:%.*]]) #[[ATTR14]]
2695 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2697 // APPROX-LABEL: @test_norm3d(
2698 // APPROX-NEXT:  entry:
2699 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_len3_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]]) #[[ATTR14]]
2700 // APPROX-NEXT:    ret double [[CALL_I]]
2702 extern "C" __device__ double test_norm3d(double x, double y, double z) {
2703   return norm3d(x, y, z);
2706 // DEFAULT-LABEL: @test_norm4df(
2707 // DEFAULT-NEXT:  entry:
2708 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_len4_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]], float noundef [[W:%.*]]) #[[ATTR14]]
2709 // DEFAULT-NEXT:    ret float [[CALL_I]]
2711 // FINITEONLY-LABEL: @test_norm4df(
2712 // FINITEONLY-NEXT:  entry:
2713 // 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:%.*]]) #[[ATTR14]]
2714 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2716 // APPROX-LABEL: @test_norm4df(
2717 // APPROX-NEXT:  entry:
2718 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_len4_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]], float noundef [[W:%.*]]) #[[ATTR14]]
2719 // APPROX-NEXT:    ret float [[CALL_I]]
2721 extern "C" __device__ float test_norm4df(float x, float y, float z, float w) {
2722   return norm4df(x, y, z, w);
2725 // DEFAULT-LABEL: @test_norm4d(
2726 // DEFAULT-NEXT:  entry:
2727 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_len4_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]], double noundef [[W:%.*]]) #[[ATTR14]]
2728 // DEFAULT-NEXT:    ret double [[CALL_I]]
2730 // FINITEONLY-LABEL: @test_norm4d(
2731 // FINITEONLY-NEXT:  entry:
2732 // 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:%.*]]) #[[ATTR14]]
2733 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2735 // APPROX-LABEL: @test_norm4d(
2736 // APPROX-NEXT:  entry:
2737 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_len4_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]], double noundef [[W:%.*]]) #[[ATTR14]]
2738 // APPROX-NEXT:    ret double [[CALL_I]]
2740 extern "C" __device__ double test_norm4d(double x, double y, double z, double w) {
2741   return norm4d(x, y, z, w);
2744 // DEFAULT-LABEL: @test_normcdff(
2745 // DEFAULT-NEXT:  entry:
2746 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_ncdf_f32(float noundef [[X:%.*]]) #[[ATTR15]]
2747 // DEFAULT-NEXT:    ret float [[CALL_I]]
2749 // FINITEONLY-LABEL: @test_normcdff(
2750 // FINITEONLY-NEXT:  entry:
2751 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_ncdf_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2752 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2754 // APPROX-LABEL: @test_normcdff(
2755 // APPROX-NEXT:  entry:
2756 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_ncdf_f32(float noundef [[X:%.*]]) #[[ATTR15]]
2757 // APPROX-NEXT:    ret float [[CALL_I]]
2759 extern "C" __device__ float test_normcdff(float x) {
2760   return normcdff(x);
2763 // DEFAULT-LABEL: @test_normcdf(
2764 // DEFAULT-NEXT:  entry:
2765 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_ncdf_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2766 // DEFAULT-NEXT:    ret double [[CALL_I]]
2768 // FINITEONLY-LABEL: @test_normcdf(
2769 // FINITEONLY-NEXT:  entry:
2770 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_ncdf_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2771 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2773 // APPROX-LABEL: @test_normcdf(
2774 // APPROX-NEXT:  entry:
2775 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_ncdf_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2776 // APPROX-NEXT:    ret double [[CALL_I]]
2778 extern "C" __device__ double test_normcdf(double x) {
2779   return normcdf(x);
2782 // DEFAULT-LABEL: @test_normcdfinvf(
2783 // DEFAULT-NEXT:  entry:
2784 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_ncdfinv_f32(float noundef [[X:%.*]]) #[[ATTR15]]
2785 // DEFAULT-NEXT:    ret float [[CALL_I]]
2787 // FINITEONLY-LABEL: @test_normcdfinvf(
2788 // FINITEONLY-NEXT:  entry:
2789 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_ncdfinv_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2790 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2792 // APPROX-LABEL: @test_normcdfinvf(
2793 // APPROX-NEXT:  entry:
2794 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_ncdfinv_f32(float noundef [[X:%.*]]) #[[ATTR15]]
2795 // APPROX-NEXT:    ret float [[CALL_I]]
2797 extern "C" __device__ float test_normcdfinvf(float x) {
2798   return normcdfinvf(x);
2801 // DEFAULT-LABEL: @test_normcdfinv(
2802 // DEFAULT-NEXT:  entry:
2803 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_ncdfinv_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2804 // DEFAULT-NEXT:    ret double [[CALL_I]]
2806 // FINITEONLY-LABEL: @test_normcdfinv(
2807 // FINITEONLY-NEXT:  entry:
2808 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_ncdfinv_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
2809 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2811 // APPROX-LABEL: @test_normcdfinv(
2812 // APPROX-NEXT:  entry:
2813 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_ncdfinv_f64(double noundef [[X:%.*]]) #[[ATTR15]]
2814 // APPROX-NEXT:    ret double [[CALL_I]]
2816 extern "C" __device__ double test_normcdfinv(double x) {
2817   return normcdfinv(x);
2820 // DEFAULT-LABEL: @test_normf(
2821 // DEFAULT-NEXT:  entry:
2822 // DEFAULT-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
2823 // DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5NORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
2824 // DEFAULT:       while.body.i:
2825 // DEFAULT-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
2826 // DEFAULT-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
2827 // DEFAULT-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
2828 // DEFAULT-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
2829 // DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
2830 // DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[TMP0]], [[TMP0]]
2831 // DEFAULT-NEXT:    [[ADD_I]] = fadd contract float [[__R_0_I4]], [[MUL_I]]
2832 // DEFAULT-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds float, ptr [[__A_ADDR_0_I3]], i64 1
2833 // DEFAULT-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
2834 // DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5NORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP20:![0-9]+]]
2835 // DEFAULT:       _ZL5normfiPKf.exit:
2836 // DEFAULT-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
2837 // DEFAULT-NEXT:    [[TMP1:%.*]] = tail call contract noundef float @llvm.sqrt.f32(float [[__R_0_I_LCSSA]])
2838 // DEFAULT-NEXT:    ret float [[TMP1]]
2840 // FINITEONLY-LABEL: @test_normf(
2841 // FINITEONLY-NEXT:  entry:
2842 // FINITEONLY-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
2843 // FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5NORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
2844 // FINITEONLY:       while.body.i:
2845 // FINITEONLY-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
2846 // FINITEONLY-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
2847 // FINITEONLY-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
2848 // FINITEONLY-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
2849 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
2850 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[TMP0]], [[TMP0]]
2851 // FINITEONLY-NEXT:    [[ADD_I]] = fadd nnan ninf contract float [[__R_0_I4]], [[MUL_I]]
2852 // FINITEONLY-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds float, ptr [[__A_ADDR_0_I3]], i64 1
2853 // FINITEONLY-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
2854 // FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5NORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP20:![0-9]+]]
2855 // FINITEONLY:       _ZL5normfiPKf.exit:
2856 // FINITEONLY-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
2857 // FINITEONLY-NEXT:    [[TMP1:%.*]] = tail call nnan ninf contract noundef float @llvm.sqrt.f32(float [[__R_0_I_LCSSA]])
2858 // FINITEONLY-NEXT:    ret float [[TMP1]]
2860 // APPROX-LABEL: @test_normf(
2861 // APPROX-NEXT:  entry:
2862 // APPROX-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
2863 // APPROX-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5NORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
2864 // APPROX:       while.body.i:
2865 // APPROX-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
2866 // APPROX-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
2867 // APPROX-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
2868 // APPROX-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
2869 // APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
2870 // APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[TMP0]], [[TMP0]]
2871 // APPROX-NEXT:    [[ADD_I]] = fadd contract float [[__R_0_I4]], [[MUL_I]]
2872 // APPROX-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds float, ptr [[__A_ADDR_0_I3]], i64 1
2873 // APPROX-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
2874 // APPROX-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5NORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP20:![0-9]+]]
2875 // APPROX:       _ZL5normfiPKf.exit:
2876 // APPROX-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
2877 // APPROX-NEXT:    [[TMP1:%.*]] = tail call contract noundef float @llvm.sqrt.f32(float [[__R_0_I_LCSSA]])
2878 // APPROX-NEXT:    ret float [[TMP1]]
2880 extern "C" __device__ float test_normf(int x, const float *y) {
2881   return normf(x, y);
2884 // DEFAULT-LABEL: @test_norm(
2885 // DEFAULT-NEXT:  entry:
2886 // DEFAULT-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
2887 // DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL4NORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
2888 // DEFAULT:       while.body.i:
2889 // DEFAULT-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
2890 // DEFAULT-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
2891 // DEFAULT-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
2892 // DEFAULT-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
2893 // DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
2894 // DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract double [[TMP0]], [[TMP0]]
2895 // DEFAULT-NEXT:    [[ADD_I]] = fadd contract double [[__R_0_I4]], [[MUL_I]]
2896 // DEFAULT-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds double, ptr [[__A_ADDR_0_I3]], i64 1
2897 // DEFAULT-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
2898 // DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL4NORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP21:![0-9]+]]
2899 // DEFAULT:       _ZL4normiPKd.exit:
2900 // DEFAULT-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
2901 // DEFAULT-NEXT:    [[TMP1:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[__R_0_I_LCSSA]])
2902 // DEFAULT-NEXT:    ret double [[TMP1]]
2904 // FINITEONLY-LABEL: @test_norm(
2905 // FINITEONLY-NEXT:  entry:
2906 // FINITEONLY-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
2907 // FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL4NORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
2908 // FINITEONLY:       while.body.i:
2909 // FINITEONLY-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
2910 // FINITEONLY-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
2911 // FINITEONLY-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
2912 // FINITEONLY-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
2913 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
2914 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract double [[TMP0]], [[TMP0]]
2915 // FINITEONLY-NEXT:    [[ADD_I]] = fadd nnan ninf contract double [[__R_0_I4]], [[MUL_I]]
2916 // FINITEONLY-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds double, ptr [[__A_ADDR_0_I3]], i64 1
2917 // FINITEONLY-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
2918 // FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL4NORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP21:![0-9]+]]
2919 // FINITEONLY:       _ZL4normiPKd.exit:
2920 // FINITEONLY-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
2921 // FINITEONLY-NEXT:    [[TMP1:%.*]] = tail call nnan ninf contract noundef double @llvm.sqrt.f64(double [[__R_0_I_LCSSA]])
2922 // FINITEONLY-NEXT:    ret double [[TMP1]]
2924 // APPROX-LABEL: @test_norm(
2925 // APPROX-NEXT:  entry:
2926 // APPROX-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
2927 // APPROX-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL4NORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
2928 // APPROX:       while.body.i:
2929 // APPROX-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
2930 // APPROX-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
2931 // APPROX-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
2932 // APPROX-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
2933 // APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
2934 // APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract double [[TMP0]], [[TMP0]]
2935 // APPROX-NEXT:    [[ADD_I]] = fadd contract double [[__R_0_I4]], [[MUL_I]]
2936 // APPROX-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds double, ptr [[__A_ADDR_0_I3]], i64 1
2937 // APPROX-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
2938 // APPROX-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL4NORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP21:![0-9]+]]
2939 // APPROX:       _ZL4normiPKd.exit:
2940 // APPROX-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
2941 // APPROX-NEXT:    [[TMP1:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[__R_0_I_LCSSA]])
2942 // APPROX-NEXT:    ret double [[TMP1]]
2944 extern "C" __device__ double test_norm(int x, const double *y) {
2945   return norm(x, y);
2948 // DEFAULT-LABEL: @test_powf(
2949 // DEFAULT-NEXT:  entry:
2950 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pow_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR15]]
2951 // DEFAULT-NEXT:    ret float [[CALL_I]]
2953 // FINITEONLY-LABEL: @test_powf(
2954 // FINITEONLY-NEXT:  entry:
2955 // 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:%.*]]) #[[ATTR15]]
2956 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2958 // APPROX-LABEL: @test_powf(
2959 // APPROX-NEXT:  entry:
2960 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pow_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR15]]
2961 // APPROX-NEXT:    ret float [[CALL_I]]
2963 extern "C" __device__ float test_powf(float x, float y) {
2964   return powf(x, y);
2967 // DEFAULT-LABEL: @test_pow(
2968 // DEFAULT-NEXT:  entry:
2969 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_pow_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR15]]
2970 // DEFAULT-NEXT:    ret double [[CALL_I]]
2972 // FINITEONLY-LABEL: @test_pow(
2973 // FINITEONLY-NEXT:  entry:
2974 // 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:%.*]]) #[[ATTR15]]
2975 // FINITEONLY-NEXT:    ret double [[CALL_I]]
2977 // APPROX-LABEL: @test_pow(
2978 // APPROX-NEXT:  entry:
2979 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_pow_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR15]]
2980 // APPROX-NEXT:    ret double [[CALL_I]]
2982 extern "C" __device__ double test_pow(double x, double y) {
2983   return pow(x, y);
2986 // DEFAULT-LABEL: @test_powif(
2987 // DEFAULT-NEXT:  entry:
2988 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pown_f32(float noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR15]]
2989 // DEFAULT-NEXT:    ret float [[CALL_I]]
2991 // FINITEONLY-LABEL: @test_powif(
2992 // FINITEONLY-NEXT:  entry:
2993 // 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:%.*]]) #[[ATTR15]]
2994 // FINITEONLY-NEXT:    ret float [[CALL_I]]
2996 // APPROX-LABEL: @test_powif(
2997 // APPROX-NEXT:  entry:
2998 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pown_f32(float noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR15]]
2999 // APPROX-NEXT:    ret float [[CALL_I]]
3001 extern "C" __device__ float test_powif(float x, int y) {
3002   return powif(x, y);
3005 // DEFAULT-LABEL: @test_powi(
3006 // DEFAULT-NEXT:  entry:
3007 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_pown_f64(double noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR15]]
3008 // DEFAULT-NEXT:    ret double [[CALL_I]]
3010 // FINITEONLY-LABEL: @test_powi(
3011 // FINITEONLY-NEXT:  entry:
3012 // 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:%.*]]) #[[ATTR15]]
3013 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3015 // APPROX-LABEL: @test_powi(
3016 // APPROX-NEXT:  entry:
3017 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_pown_f64(double noundef [[X:%.*]], i32 noundef [[Y:%.*]]) #[[ATTR15]]
3018 // APPROX-NEXT:    ret double [[CALL_I]]
3020 extern "C" __device__ double test_powi(double x, int y) {
3021   return powi(x, y);
3024 // DEFAULT-LABEL: @test_rcbrtf(
3025 // DEFAULT-NEXT:  entry:
3026 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rcbrt_f32(float noundef [[X:%.*]]) #[[ATTR15]]
3027 // DEFAULT-NEXT:    ret float [[CALL_I]]
3029 // FINITEONLY-LABEL: @test_rcbrtf(
3030 // FINITEONLY-NEXT:  entry:
3031 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_rcbrt_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
3032 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3034 // APPROX-LABEL: @test_rcbrtf(
3035 // APPROX-NEXT:  entry:
3036 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rcbrt_f32(float noundef [[X:%.*]]) #[[ATTR15]]
3037 // APPROX-NEXT:    ret float [[CALL_I]]
3039 extern "C" __device__ float test_rcbrtf(float x) {
3040   return rcbrtf(x);
3043 // DEFAULT-LABEL: @test_rcbrt(
3044 // DEFAULT-NEXT:  entry:
3045 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rcbrt_f64(double noundef [[X:%.*]]) #[[ATTR15]]
3046 // DEFAULT-NEXT:    ret double [[CALL_I]]
3048 // FINITEONLY-LABEL: @test_rcbrt(
3049 // FINITEONLY-NEXT:  entry:
3050 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_rcbrt_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
3051 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3053 // APPROX-LABEL: @test_rcbrt(
3054 // APPROX-NEXT:  entry:
3055 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rcbrt_f64(double noundef [[X:%.*]]) #[[ATTR15]]
3056 // APPROX-NEXT:    ret double [[CALL_I]]
3058 extern "C" __device__ double test_rcbrt(double x) {
3059   return rcbrt(x);
3062 // DEFAULT-LABEL: @test_remainderf(
3063 // DEFAULT-NEXT:  entry:
3064 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_remainder_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
3065 // DEFAULT-NEXT:    ret float [[CALL_I]]
3067 // FINITEONLY-LABEL: @test_remainderf(
3068 // FINITEONLY-NEXT:  entry:
3069 // 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:%.*]]) #[[ATTR14]]
3070 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3072 // APPROX-LABEL: @test_remainderf(
3073 // APPROX-NEXT:  entry:
3074 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_remainder_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
3075 // APPROX-NEXT:    ret float [[CALL_I]]
3077 extern "C" __device__ float test_remainderf(float x, float y) {
3078   return remainderf(x, y);
3081 // DEFAULT-LABEL: @test_remainder(
3082 // DEFAULT-NEXT:  entry:
3083 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_remainder_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
3084 // DEFAULT-NEXT:    ret double [[CALL_I]]
3086 // FINITEONLY-LABEL: @test_remainder(
3087 // FINITEONLY-NEXT:  entry:
3088 // 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:%.*]]) #[[ATTR14]]
3089 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3091 // APPROX-LABEL: @test_remainder(
3092 // APPROX-NEXT:  entry:
3093 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_remainder_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
3094 // APPROX-NEXT:    ret double [[CALL_I]]
3096 extern "C" __device__ double test_remainder(double x, double y) {
3097   return remainder(x, y);
3100 // DEFAULT-LABEL: @test_remquof(
3101 // DEFAULT-NEXT:  entry:
3102 // DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3103 // DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3104 // DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract noundef float @__ocml_remquo_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3105 // DEFAULT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3106 // DEFAULT-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3107 // DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3108 // DEFAULT-NEXT:    ret float [[CALL_I]]
3110 // FINITEONLY-LABEL: @test_remquof(
3111 // FINITEONLY-NEXT:  entry:
3112 // FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3113 // FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3114 // 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]]) #[[ATTR16]]
3115 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3116 // FINITEONLY-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3117 // FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3118 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3120 // APPROX-LABEL: @test_remquof(
3121 // APPROX-NEXT:  entry:
3122 // APPROX-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3123 // APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3124 // APPROX-NEXT:    [[CALL_I:%.*]] = call contract noundef float @__ocml_remquo_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3125 // APPROX-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3126 // APPROX-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3127 // APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3128 // APPROX-NEXT:    ret float [[CALL_I]]
3130 extern "C" __device__ float test_remquof(float x, float y, int* z) {
3131   return remquof(x, y, z);
3134 // DEFAULT-LABEL: @test_remquo(
3135 // DEFAULT-NEXT:  entry:
3136 // DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3137 // DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3138 // DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract noundef double @__ocml_remquo_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3139 // DEFAULT-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3140 // DEFAULT-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3141 // DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3142 // DEFAULT-NEXT:    ret double [[CALL_I]]
3144 // FINITEONLY-LABEL: @test_remquo(
3145 // FINITEONLY-NEXT:  entry:
3146 // FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3147 // FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3148 // 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]]) #[[ATTR16]]
3149 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3150 // FINITEONLY-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3151 // FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3152 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3154 // APPROX-LABEL: @test_remquo(
3155 // APPROX-NEXT:  entry:
3156 // APPROX-NEXT:    [[__TMP_I:%.*]] = alloca i32, align 4, addrspace(5)
3157 // APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3158 // APPROX-NEXT:    [[CALL_I:%.*]] = call contract noundef double @__ocml_remquo_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3159 // APPROX-NEXT:    [[TMP0:%.*]] = load i32, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA12]]
3160 // APPROX-NEXT:    store i32 [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA12]]
3161 // APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3162 // APPROX-NEXT:    ret double [[CALL_I]]
3164 extern "C" __device__ double test_remquo(double x, double y, int* z) {
3165   return remquo(x, y, z);
3168 // DEFAULT-LABEL: @test_rhypotf(
3169 // DEFAULT-NEXT:  entry:
3170 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rhypot_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
3171 // DEFAULT-NEXT:    ret float [[CALL_I]]
3173 // FINITEONLY-LABEL: @test_rhypotf(
3174 // FINITEONLY-NEXT:  entry:
3175 // 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:%.*]]) #[[ATTR14]]
3176 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3178 // APPROX-LABEL: @test_rhypotf(
3179 // APPROX-NEXT:  entry:
3180 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rhypot_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR14]]
3181 // APPROX-NEXT:    ret float [[CALL_I]]
3183 extern "C" __device__ float test_rhypotf(float x, float y) {
3184   return rhypotf(x, y);
3187 // DEFAULT-LABEL: @test_rhypot(
3188 // DEFAULT-NEXT:  entry:
3189 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rhypot_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
3190 // DEFAULT-NEXT:    ret double [[CALL_I]]
3192 // FINITEONLY-LABEL: @test_rhypot(
3193 // FINITEONLY-NEXT:  entry:
3194 // 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:%.*]]) #[[ATTR14]]
3195 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3197 // APPROX-LABEL: @test_rhypot(
3198 // APPROX-NEXT:  entry:
3199 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rhypot_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]]) #[[ATTR14]]
3200 // APPROX-NEXT:    ret double [[CALL_I]]
3202 extern "C" __device__ double test_rhypot(double x, double y) {
3203   return rhypot(x, y);
3206 // DEFAULT-LABEL: @test_rintf(
3207 // DEFAULT-NEXT:  entry:
3208 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.rint.f32(float [[X:%.*]])
3209 // DEFAULT-NEXT:    ret float [[TMP0]]
3211 // FINITEONLY-LABEL: @test_rintf(
3212 // FINITEONLY-NEXT:  entry:
3213 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.rint.f32(float [[X:%.*]])
3214 // FINITEONLY-NEXT:    ret float [[TMP0]]
3216 // APPROX-LABEL: @test_rintf(
3217 // APPROX-NEXT:  entry:
3218 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.rint.f32(float [[X:%.*]])
3219 // APPROX-NEXT:    ret float [[TMP0]]
3221 extern "C" __device__ float test_rintf(float x) {
3222   return rintf(x);
3225 // DEFAULT-LABEL: @test_rint(
3226 // DEFAULT-NEXT:  entry:
3227 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.rint.f64(double [[X:%.*]])
3228 // DEFAULT-NEXT:    ret double [[TMP0]]
3230 // FINITEONLY-LABEL: @test_rint(
3231 // FINITEONLY-NEXT:  entry:
3232 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.rint.f64(double [[X:%.*]])
3233 // FINITEONLY-NEXT:    ret double [[TMP0]]
3235 // APPROX-LABEL: @test_rint(
3236 // APPROX-NEXT:  entry:
3237 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.rint.f64(double [[X:%.*]])
3238 // APPROX-NEXT:    ret double [[TMP0]]
3240 extern "C" __device__ double test_rint(double x) {
3241   return rint(x);
3244 // DEFAULT-LABEL: @test_rnormf(
3245 // DEFAULT-NEXT:  entry:
3246 // DEFAULT-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
3247 // DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL6RNORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3248 // DEFAULT:       while.body.i:
3249 // DEFAULT-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
3250 // DEFAULT-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
3251 // DEFAULT-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
3252 // DEFAULT-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
3253 // DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
3254 // DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[TMP0]], [[TMP0]]
3255 // DEFAULT-NEXT:    [[ADD_I]] = fadd contract float [[__R_0_I4]], [[MUL_I]]
3256 // DEFAULT-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds float, ptr [[__A_ADDR_0_I3]], i64 1
3257 // DEFAULT-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3258 // DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL6RNORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP22:![0-9]+]]
3259 // DEFAULT:       _ZL6rnormfiPKf.exit:
3260 // DEFAULT-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3261 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rsqrt_f32(float noundef [[__R_0_I_LCSSA]]) #[[ATTR15]]
3262 // DEFAULT-NEXT:    ret float [[CALL_I]]
3264 // FINITEONLY-LABEL: @test_rnormf(
3265 // FINITEONLY-NEXT:  entry:
3266 // FINITEONLY-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
3267 // FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL6RNORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3268 // FINITEONLY:       while.body.i:
3269 // FINITEONLY-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
3270 // FINITEONLY-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
3271 // FINITEONLY-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
3272 // FINITEONLY-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
3273 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
3274 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[TMP0]], [[TMP0]]
3275 // FINITEONLY-NEXT:    [[ADD_I]] = fadd nnan ninf contract float [[__R_0_I4]], [[MUL_I]]
3276 // FINITEONLY-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds float, ptr [[__A_ADDR_0_I3]], i64 1
3277 // FINITEONLY-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3278 // FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL6RNORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP22:![0-9]+]]
3279 // FINITEONLY:       _ZL6rnormfiPKf.exit:
3280 // FINITEONLY-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3281 // 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]]) #[[ATTR15]]
3282 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3284 // APPROX-LABEL: @test_rnormf(
3285 // APPROX-NEXT:  entry:
3286 // APPROX-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
3287 // APPROX-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL6RNORMFIPKF_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3288 // APPROX:       while.body.i:
3289 // APPROX-NEXT:    [[__R_0_I4:%.*]] = phi float [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
3290 // APPROX-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
3291 // APPROX-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
3292 // APPROX-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
3293 // APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr [[__A_ADDR_0_I3]], align 4, !tbaa [[TBAA16]]
3294 // APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[TMP0]], [[TMP0]]
3295 // APPROX-NEXT:    [[ADD_I]] = fadd contract float [[__R_0_I4]], [[MUL_I]]
3296 // APPROX-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds float, ptr [[__A_ADDR_0_I3]], i64 1
3297 // APPROX-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3298 // APPROX-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL6RNORMFIPKF_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP22:![0-9]+]]
3299 // APPROX:       _ZL6rnormfiPKf.exit:
3300 // APPROX-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi float [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3301 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rsqrt_f32(float noundef [[__R_0_I_LCSSA]]) #[[ATTR15]]
3302 // APPROX-NEXT:    ret float [[CALL_I]]
3304 extern "C" __device__ float test_rnormf(int x, const float* y) {
3305   return rnormf(x, y);
3308 // DEFAULT-LABEL: @test_rnorm(
3309 // DEFAULT-NEXT:  entry:
3310 // DEFAULT-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
3311 // DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5RNORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3312 // DEFAULT:       while.body.i:
3313 // DEFAULT-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
3314 // DEFAULT-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
3315 // DEFAULT-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
3316 // DEFAULT-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
3317 // DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
3318 // DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract double [[TMP0]], [[TMP0]]
3319 // DEFAULT-NEXT:    [[ADD_I]] = fadd contract double [[__R_0_I4]], [[MUL_I]]
3320 // DEFAULT-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds double, ptr [[__A_ADDR_0_I3]], i64 1
3321 // DEFAULT-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3322 // DEFAULT-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5RNORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP23:![0-9]+]]
3323 // DEFAULT:       _ZL5rnormiPKd.exit:
3324 // DEFAULT-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3325 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rsqrt_f64(double noundef [[__R_0_I_LCSSA]]) #[[ATTR15]]
3326 // DEFAULT-NEXT:    ret double [[CALL_I]]
3328 // FINITEONLY-LABEL: @test_rnorm(
3329 // FINITEONLY-NEXT:  entry:
3330 // FINITEONLY-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
3331 // FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5RNORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3332 // FINITEONLY:       while.body.i:
3333 // FINITEONLY-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
3334 // FINITEONLY-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
3335 // FINITEONLY-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
3336 // FINITEONLY-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
3337 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
3338 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract double [[TMP0]], [[TMP0]]
3339 // FINITEONLY-NEXT:    [[ADD_I]] = fadd nnan ninf contract double [[__R_0_I4]], [[MUL_I]]
3340 // FINITEONLY-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds double, ptr [[__A_ADDR_0_I3]], i64 1
3341 // FINITEONLY-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3342 // FINITEONLY-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5RNORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP23:![0-9]+]]
3343 // FINITEONLY:       _ZL5rnormiPKd.exit:
3344 // FINITEONLY-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3345 // 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]]) #[[ATTR15]]
3346 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3348 // APPROX-LABEL: @test_rnorm(
3349 // APPROX-NEXT:  entry:
3350 // APPROX-NEXT:    [[TOBOOL_NOT_I1:%.*]] = icmp eq i32 [[X:%.*]], 0
3351 // APPROX-NEXT:    br i1 [[TOBOOL_NOT_I1]], label [[_ZL5RNORMIPKD_EXIT:%.*]], label [[WHILE_BODY_I:%.*]]
3352 // APPROX:       while.body.i:
3353 // APPROX-NEXT:    [[__R_0_I4:%.*]] = phi double [ [[ADD_I:%.*]], [[WHILE_BODY_I]] ], [ 0.000000e+00, [[ENTRY:%.*]] ]
3354 // APPROX-NEXT:    [[__A_ADDR_0_I3:%.*]] = phi ptr [ [[INCDEC_PTR_I:%.*]], [[WHILE_BODY_I]] ], [ [[Y:%.*]], [[ENTRY]] ]
3355 // APPROX-NEXT:    [[__DIM_ADDR_0_I2:%.*]] = phi i32 [ [[DEC_I:%.*]], [[WHILE_BODY_I]] ], [ [[X]], [[ENTRY]] ]
3356 // APPROX-NEXT:    [[DEC_I]] = add nsw i32 [[__DIM_ADDR_0_I2]], -1
3357 // APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr [[__A_ADDR_0_I3]], align 8, !tbaa [[TBAA18]]
3358 // APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract double [[TMP0]], [[TMP0]]
3359 // APPROX-NEXT:    [[ADD_I]] = fadd contract double [[__R_0_I4]], [[MUL_I]]
3360 // APPROX-NEXT:    [[INCDEC_PTR_I]] = getelementptr inbounds double, ptr [[__A_ADDR_0_I3]], i64 1
3361 // APPROX-NEXT:    [[TOBOOL_NOT_I:%.*]] = icmp eq i32 [[DEC_I]], 0
3362 // APPROX-NEXT:    br i1 [[TOBOOL_NOT_I]], label [[_ZL5RNORMIPKD_EXIT]], label [[WHILE_BODY_I]], !llvm.loop [[LOOP23:![0-9]+]]
3363 // APPROX:       _ZL5rnormiPKd.exit:
3364 // APPROX-NEXT:    [[__R_0_I_LCSSA:%.*]] = phi double [ 0.000000e+00, [[ENTRY]] ], [ [[ADD_I]], [[WHILE_BODY_I]] ]
3365 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rsqrt_f64(double noundef [[__R_0_I_LCSSA]]) #[[ATTR15]]
3366 // APPROX-NEXT:    ret double [[CALL_I]]
3368 extern "C" __device__ double test_rnorm(int x, const double* y) {
3369   return rnorm(x, y);
3372 // DEFAULT-LABEL: @test_rnorm3df(
3373 // DEFAULT-NEXT:  entry:
3374 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rlen3_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]]) #[[ATTR14]]
3375 // DEFAULT-NEXT:    ret float [[CALL_I]]
3377 // FINITEONLY-LABEL: @test_rnorm3df(
3378 // FINITEONLY-NEXT:  entry:
3379 // 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:%.*]]) #[[ATTR14]]
3380 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3382 // APPROX-LABEL: @test_rnorm3df(
3383 // APPROX-NEXT:  entry:
3384 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rlen3_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]]) #[[ATTR14]]
3385 // APPROX-NEXT:    ret float [[CALL_I]]
3387 extern "C" __device__ float test_rnorm3df(float x, float y, float z) {
3388   return rnorm3df(x, y, z);
3391 // DEFAULT-LABEL: @test_rnorm3d(
3392 // DEFAULT-NEXT:  entry:
3393 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rlen3_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]]) #[[ATTR14]]
3394 // DEFAULT-NEXT:    ret double [[CALL_I]]
3396 // FINITEONLY-LABEL: @test_rnorm3d(
3397 // FINITEONLY-NEXT:  entry:
3398 // 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:%.*]]) #[[ATTR14]]
3399 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3401 // APPROX-LABEL: @test_rnorm3d(
3402 // APPROX-NEXT:  entry:
3403 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rlen3_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]]) #[[ATTR14]]
3404 // APPROX-NEXT:    ret double [[CALL_I]]
3406 extern "C" __device__ double test_rnorm3d(double x, double y, double z) {
3407   return rnorm3d(x, y, z);
3410 // DEFAULT-LABEL: @test_rnorm4df(
3411 // DEFAULT-NEXT:  entry:
3412 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rlen4_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]], float noundef [[W:%.*]]) #[[ATTR14]]
3413 // DEFAULT-NEXT:    ret float [[CALL_I]]
3415 // FINITEONLY-LABEL: @test_rnorm4df(
3416 // FINITEONLY-NEXT:  entry:
3417 // 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:%.*]]) #[[ATTR14]]
3418 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3420 // APPROX-LABEL: @test_rnorm4df(
3421 // APPROX-NEXT:  entry:
3422 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rlen4_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]], float noundef [[Z:%.*]], float noundef [[W:%.*]]) #[[ATTR14]]
3423 // APPROX-NEXT:    ret float [[CALL_I]]
3425 extern "C" __device__ float test_rnorm4df(float x, float y, float z, float w) {
3426   return rnorm4df(x, y, z, w);
3429 // DEFAULT-LABEL: @test_rnorm4d(
3430 // DEFAULT-NEXT:  entry:
3431 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rlen4_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]], double noundef [[W:%.*]]) #[[ATTR14]]
3432 // DEFAULT-NEXT:    ret double [[CALL_I]]
3434 // FINITEONLY-LABEL: @test_rnorm4d(
3435 // FINITEONLY-NEXT:  entry:
3436 // 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:%.*]]) #[[ATTR14]]
3437 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3439 // APPROX-LABEL: @test_rnorm4d(
3440 // APPROX-NEXT:  entry:
3441 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rlen4_f64(double noundef [[X:%.*]], double noundef [[Y:%.*]], double noundef [[Z:%.*]], double noundef [[W:%.*]]) #[[ATTR14]]
3442 // APPROX-NEXT:    ret double [[CALL_I]]
3444 extern "C" __device__ double test_rnorm4d(double x, double y, double z, double w) {
3445   return rnorm4d(x, y, z, w);
3448 // DEFAULT-LABEL: @test_roundf(
3449 // DEFAULT-NEXT:  entry:
3450 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.round.f32(float [[X:%.*]])
3451 // DEFAULT-NEXT:    ret float [[TMP0]]
3453 // FINITEONLY-LABEL: @test_roundf(
3454 // FINITEONLY-NEXT:  entry:
3455 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.round.f32(float [[X:%.*]])
3456 // FINITEONLY-NEXT:    ret float [[TMP0]]
3458 // APPROX-LABEL: @test_roundf(
3459 // APPROX-NEXT:  entry:
3460 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.round.f32(float [[X:%.*]])
3461 // APPROX-NEXT:    ret float [[TMP0]]
3463 extern "C" __device__ float test_roundf(float x) {
3464   return roundf(x);
3467 // DEFAULT-LABEL: @test_round(
3468 // DEFAULT-NEXT:  entry:
3469 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.round.f64(double [[X:%.*]])
3470 // DEFAULT-NEXT:    ret double [[TMP0]]
3472 // FINITEONLY-LABEL: @test_round(
3473 // FINITEONLY-NEXT:  entry:
3474 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.round.f64(double [[X:%.*]])
3475 // FINITEONLY-NEXT:    ret double [[TMP0]]
3477 // APPROX-LABEL: @test_round(
3478 // APPROX-NEXT:  entry:
3479 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.round.f64(double [[X:%.*]])
3480 // APPROX-NEXT:    ret double [[TMP0]]
3482 extern "C" __device__ double test_round(double x) {
3483   return round(x);
3486 // DEFAULT-LABEL: @test_rsqrtf(
3487 // DEFAULT-NEXT:  entry:
3488 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rsqrt_f32(float noundef [[X:%.*]]) #[[ATTR15]]
3489 // DEFAULT-NEXT:    ret float [[CALL_I]]
3491 // FINITEONLY-LABEL: @test_rsqrtf(
3492 // FINITEONLY-NEXT:  entry:
3493 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_rsqrt_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
3494 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3496 // APPROX-LABEL: @test_rsqrtf(
3497 // APPROX-NEXT:  entry:
3498 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_rsqrt_f32(float noundef [[X:%.*]]) #[[ATTR15]]
3499 // APPROX-NEXT:    ret float [[CALL_I]]
3501 extern "C" __device__ float test_rsqrtf(float x) {
3502   return rsqrtf(x);
3505 // DEFAULT-LABEL: @test_rsqrt(
3506 // DEFAULT-NEXT:  entry:
3507 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rsqrt_f64(double noundef [[X:%.*]]) #[[ATTR15]]
3508 // DEFAULT-NEXT:    ret double [[CALL_I]]
3510 // FINITEONLY-LABEL: @test_rsqrt(
3511 // FINITEONLY-NEXT:  entry:
3512 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_rsqrt_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
3513 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3515 // APPROX-LABEL: @test_rsqrt(
3516 // APPROX-NEXT:  entry:
3517 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_rsqrt_f64(double noundef [[X:%.*]]) #[[ATTR15]]
3518 // APPROX-NEXT:    ret double [[CALL_I]]
3520 extern "C" __device__ double test_rsqrt(double x) {
3521   return rsqrt(x);
3524 // DEFAULT-LABEL: @test_scalblnf(
3525 // DEFAULT-NEXT:  entry:
3526 // DEFAULT-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
3527 // DEFAULT-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
3528 // DEFAULT:       cond.true.i:
3529 // DEFAULT-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3530 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[CONV_I]])
3531 // DEFAULT-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT:%.*]]
3532 // DEFAULT:       cond.false.i:
3533 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract float @__ocml_scalb_f32(float noundef [[X]], float noundef 0x43E0000000000000) #[[ATTR14]]
3534 // DEFAULT-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT]]
3535 // DEFAULT:       _ZL8scalblnffl.exit:
3536 // DEFAULT-NEXT:    [[COND_I:%.*]] = phi contract float [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
3537 // DEFAULT-NEXT:    ret float [[COND_I]]
3539 // FINITEONLY-LABEL: @test_scalblnf(
3540 // FINITEONLY-NEXT:  entry:
3541 // FINITEONLY-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
3542 // FINITEONLY-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
3543 // FINITEONLY:       cond.true.i:
3544 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3545 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[CONV_I]])
3546 // FINITEONLY-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT:%.*]]
3547 // FINITEONLY:       cond.false.i:
3548 // 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) #[[ATTR14]]
3549 // FINITEONLY-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT]]
3550 // FINITEONLY:       _ZL8scalblnffl.exit:
3551 // FINITEONLY-NEXT:    [[COND_I:%.*]] = phi nnan ninf contract float [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
3552 // FINITEONLY-NEXT:    ret float [[COND_I]]
3554 // APPROX-LABEL: @test_scalblnf(
3555 // APPROX-NEXT:  entry:
3556 // APPROX-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
3557 // APPROX-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
3558 // APPROX:       cond.true.i:
3559 // APPROX-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3560 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[CONV_I]])
3561 // APPROX-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT:%.*]]
3562 // APPROX:       cond.false.i:
3563 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract float @__ocml_scalb_f32(float noundef [[X]], float noundef 0x43E0000000000000) #[[ATTR14]]
3564 // APPROX-NEXT:    br label [[_ZL8SCALBLNFFL_EXIT]]
3565 // APPROX:       _ZL8scalblnffl.exit:
3566 // APPROX-NEXT:    [[COND_I:%.*]] = phi contract float [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
3567 // APPROX-NEXT:    ret float [[COND_I]]
3569 extern "C" __device__ float test_scalblnf(float x, long int y) {
3570   return scalblnf(x, y);
3573 // DEFAULT-LABEL: @test_scalbln(
3574 // DEFAULT-NEXT:  entry:
3575 // DEFAULT-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
3576 // DEFAULT-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
3577 // DEFAULT:       cond.true.i:
3578 // DEFAULT-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3579 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[CONV_I]])
3580 // DEFAULT-NEXT:    br label [[_ZL7SCALBLNDL_EXIT:%.*]]
3581 // DEFAULT:       cond.false.i:
3582 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract double @__ocml_scalb_f64(double noundef [[X]], double noundef 0x43E0000000000000) #[[ATTR14]]
3583 // DEFAULT-NEXT:    br label [[_ZL7SCALBLNDL_EXIT]]
3584 // DEFAULT:       _ZL7scalblndl.exit:
3585 // DEFAULT-NEXT:    [[COND_I:%.*]] = phi contract double [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
3586 // DEFAULT-NEXT:    ret double [[COND_I]]
3588 // FINITEONLY-LABEL: @test_scalbln(
3589 // FINITEONLY-NEXT:  entry:
3590 // FINITEONLY-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
3591 // FINITEONLY-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
3592 // FINITEONLY:       cond.true.i:
3593 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3594 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[CONV_I]])
3595 // FINITEONLY-NEXT:    br label [[_ZL7SCALBLNDL_EXIT:%.*]]
3596 // FINITEONLY:       cond.false.i:
3597 // 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) #[[ATTR14]]
3598 // FINITEONLY-NEXT:    br label [[_ZL7SCALBLNDL_EXIT]]
3599 // FINITEONLY:       _ZL7scalblndl.exit:
3600 // FINITEONLY-NEXT:    [[COND_I:%.*]] = phi nnan ninf contract double [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
3601 // FINITEONLY-NEXT:    ret double [[COND_I]]
3603 // APPROX-LABEL: @test_scalbln(
3604 // APPROX-NEXT:  entry:
3605 // APPROX-NEXT:    [[CMP_NOT_I:%.*]] = icmp eq i64 [[Y:%.*]], 9223372036854775807
3606 // APPROX-NEXT:    br i1 [[CMP_NOT_I]], label [[COND_FALSE_I:%.*]], label [[COND_TRUE_I:%.*]]
3607 // APPROX:       cond.true.i:
3608 // APPROX-NEXT:    [[CONV_I:%.*]] = trunc i64 [[Y]] to i32
3609 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[CONV_I]])
3610 // APPROX-NEXT:    br label [[_ZL7SCALBLNDL_EXIT:%.*]]
3611 // APPROX:       cond.false.i:
3612 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract double @__ocml_scalb_f64(double noundef [[X]], double noundef 0x43E0000000000000) #[[ATTR14]]
3613 // APPROX-NEXT:    br label [[_ZL7SCALBLNDL_EXIT]]
3614 // APPROX:       _ZL7scalblndl.exit:
3615 // APPROX-NEXT:    [[COND_I:%.*]] = phi contract double [ [[TMP0]], [[COND_TRUE_I]] ], [ [[CALL_I]], [[COND_FALSE_I]] ]
3616 // APPROX-NEXT:    ret double [[COND_I]]
3618 extern "C" __device__ double test_scalbln(double x, long int y) {
3619   return scalbln(x, y);
3622 // DEFAULT-LABEL: @test_scalbnf(
3623 // DEFAULT-NEXT:  entry:
3624 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
3625 // DEFAULT-NEXT:    ret float [[TMP0]]
3627 // FINITEONLY-LABEL: @test_scalbnf(
3628 // FINITEONLY-NEXT:  entry:
3629 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
3630 // FINITEONLY-NEXT:    ret float [[TMP0]]
3632 // APPROX-LABEL: @test_scalbnf(
3633 // APPROX-NEXT:  entry:
3634 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.ldexp.f32.i32(float [[X:%.*]], i32 [[Y:%.*]])
3635 // APPROX-NEXT:    ret float [[TMP0]]
3637 extern "C" __device__ float test_scalbnf(float x, int y) {
3638   return scalbnf(x, y);
3641 // DEFAULT-LABEL: @test_scalbn(
3642 // DEFAULT-NEXT:  entry:
3643 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
3644 // DEFAULT-NEXT:    ret double [[TMP0]]
3646 // FINITEONLY-LABEL: @test_scalbn(
3647 // FINITEONLY-NEXT:  entry:
3648 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
3649 // FINITEONLY-NEXT:    ret double [[TMP0]]
3651 // APPROX-LABEL: @test_scalbn(
3652 // APPROX-NEXT:  entry:
3653 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.ldexp.f64.i32(double [[X:%.*]], i32 [[Y:%.*]])
3654 // APPROX-NEXT:    ret double [[TMP0]]
3656 extern "C" __device__ double test_scalbn(double x, int y) {
3657   return scalbn(x, y);
3660 // CHECK-LABEL: @test___signbitf(
3661 // CHECK-NEXT:  entry:
3662 // CHECK-NEXT:    [[TMP0:%.*]] = bitcast float [[X:%.*]] to i32
3663 // CHECK-NEXT:    [[DOTLOBIT:%.*]] = lshr i32 [[TMP0]], 31
3664 // CHECK-NEXT:    ret i32 [[DOTLOBIT]]
3666 extern "C" __device__ BOOL_TYPE test___signbitf(float x) {
3667   return __signbitf(x);
3670 // CHECK-LABEL: @test___signbit(
3671 // CHECK-NEXT:  entry:
3672 // CHECK-NEXT:    [[TMP0:%.*]] = bitcast double [[X:%.*]] to i64
3673 // CHECK-NEXT:    [[DOTLOBIT:%.*]] = lshr i64 [[TMP0]], 63
3674 // CHECK-NEXT:    [[CONV:%.*]] = trunc i64 [[DOTLOBIT]] to i32
3675 // CHECK-NEXT:    ret i32 [[CONV]]
3677 extern "C" __device__ BOOL_TYPE test___signbit(double x) {
3678   return __signbit(x);
3681 // DEFAULT-LABEL: @test_sincosf(
3682 // DEFAULT-NEXT:  entry:
3683 // DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3684 // DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3685 // DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract float @__ocml_sincos_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3686 // DEFAULT-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3687 // DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3688 // DEFAULT-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3689 // DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3690 // DEFAULT-NEXT:    ret void
3692 // FINITEONLY-LABEL: @test_sincosf(
3693 // FINITEONLY-NEXT:  entry:
3694 // FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3695 // FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3696 // 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]]) #[[ATTR16]]
3697 // FINITEONLY-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3698 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3699 // FINITEONLY-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3700 // FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3701 // FINITEONLY-NEXT:    ret void
3703 // APPROX-LABEL: @test_sincosf(
3704 // APPROX-NEXT:  entry:
3705 // APPROX-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3706 // APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3707 // APPROX-NEXT:    [[CALL_I:%.*]] = call contract float @__ocml_sincos_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3708 // APPROX-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3709 // APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3710 // APPROX-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3711 // APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3712 // APPROX-NEXT:    ret void
3714 extern "C" __device__ void test_sincosf(float x, float *y, float *z) {
3715   sincosf(x, y, z);
3718 // DEFAULT-LABEL: @test_sincos(
3719 // DEFAULT-NEXT:  entry:
3720 // DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
3721 // DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3722 // DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract double @__ocml_sincos_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3723 // DEFAULT-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
3724 // DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
3725 // DEFAULT-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
3726 // DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3727 // DEFAULT-NEXT:    ret void
3729 // FINITEONLY-LABEL: @test_sincos(
3730 // FINITEONLY-NEXT:  entry:
3731 // FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
3732 // FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3733 // 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]]) #[[ATTR16]]
3734 // FINITEONLY-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
3735 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
3736 // FINITEONLY-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
3737 // FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3738 // FINITEONLY-NEXT:    ret void
3740 // APPROX-LABEL: @test_sincos(
3741 // APPROX-NEXT:  entry:
3742 // APPROX-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
3743 // APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3744 // APPROX-NEXT:    [[CALL_I:%.*]] = call contract double @__ocml_sincos_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3745 // APPROX-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
3746 // APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
3747 // APPROX-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
3748 // APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3749 // APPROX-NEXT:    ret void
3751 extern "C" __device__ void test_sincos(double x, double *y, double *z) {
3752   sincos(x, y, z);
3755 // DEFAULT-LABEL: @test_sincospif(
3756 // DEFAULT-NEXT:  entry:
3757 // DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3758 // DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3759 // DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract float @__ocml_sincospi_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3760 // DEFAULT-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3761 // DEFAULT-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3762 // DEFAULT-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3763 // DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3764 // DEFAULT-NEXT:    ret void
3766 // FINITEONLY-LABEL: @test_sincospif(
3767 // FINITEONLY-NEXT:  entry:
3768 // FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3769 // FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3770 // 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]]) #[[ATTR16]]
3771 // FINITEONLY-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3772 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3773 // FINITEONLY-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3774 // FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3775 // FINITEONLY-NEXT:    ret void
3777 // APPROX-LABEL: @test_sincospif(
3778 // APPROX-NEXT:  entry:
3779 // APPROX-NEXT:    [[__TMP_I:%.*]] = alloca float, align 4, addrspace(5)
3780 // APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3781 // APPROX-NEXT:    [[CALL_I:%.*]] = call contract float @__ocml_sincospi_f32(float noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3782 // APPROX-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
3783 // APPROX-NEXT:    [[TMP0:%.*]] = load float, ptr addrspace(5) [[__TMP_I]], align 4, !tbaa [[TBAA16]]
3784 // APPROX-NEXT:    store float [[TMP0]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
3785 // APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 4, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3786 // APPROX-NEXT:    ret void
3788 extern "C" __device__ void test_sincospif(float x, float *y, float *z) {
3789   sincospif(x, y, z);
3792 // DEFAULT-LABEL: @test_sincospi(
3793 // DEFAULT-NEXT:  entry:
3794 // DEFAULT-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
3795 // DEFAULT-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3796 // DEFAULT-NEXT:    [[CALL_I:%.*]] = call contract double @__ocml_sincospi_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3797 // DEFAULT-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
3798 // DEFAULT-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
3799 // DEFAULT-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
3800 // DEFAULT-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3801 // DEFAULT-NEXT:    ret void
3803 // FINITEONLY-LABEL: @test_sincospi(
3804 // FINITEONLY-NEXT:  entry:
3805 // FINITEONLY-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
3806 // FINITEONLY-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3807 // 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]]) #[[ATTR16]]
3808 // FINITEONLY-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
3809 // FINITEONLY-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
3810 // FINITEONLY-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
3811 // FINITEONLY-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3812 // FINITEONLY-NEXT:    ret void
3814 // APPROX-LABEL: @test_sincospi(
3815 // APPROX-NEXT:  entry:
3816 // APPROX-NEXT:    [[__TMP_I:%.*]] = alloca double, align 8, addrspace(5)
3817 // APPROX-NEXT:    call void @llvm.lifetime.start.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3818 // APPROX-NEXT:    [[CALL_I:%.*]] = call contract double @__ocml_sincospi_f64(double noundef [[X:%.*]], ptr addrspace(5) noundef [[__TMP_I]]) #[[ATTR16]]
3819 // APPROX-NEXT:    store double [[CALL_I]], ptr [[Y:%.*]], align 8, !tbaa [[TBAA18]]
3820 // APPROX-NEXT:    [[TMP0:%.*]] = load double, ptr addrspace(5) [[__TMP_I]], align 8, !tbaa [[TBAA18]]
3821 // APPROX-NEXT:    store double [[TMP0]], ptr [[Z:%.*]], align 8, !tbaa [[TBAA18]]
3822 // APPROX-NEXT:    call void @llvm.lifetime.end.p5(i64 8, ptr addrspace(5) [[__TMP_I]]) #[[ATTR17]]
3823 // APPROX-NEXT:    ret void
3825 extern "C" __device__ void test_sincospi(double x, double *y, double *z) {
3826   sincospi(x, y, z);
3829 // DEFAULT-LABEL: @test_sinf(
3830 // DEFAULT-NEXT:  entry:
3831 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_sin_f32(float noundef [[X:%.*]]) #[[ATTR16]]
3832 // DEFAULT-NEXT:    ret float [[CALL_I]]
3834 // FINITEONLY-LABEL: @test_sinf(
3835 // FINITEONLY-NEXT:  entry:
3836 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_sin_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
3837 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3839 // APPROX-LABEL: @test_sinf(
3840 // APPROX-NEXT:  entry:
3841 // APPROX-NEXT:    [[CALL_I1:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR16]]
3842 // APPROX-NEXT:    ret float [[CALL_I1]]
3844 extern "C" __device__ float test_sinf(float x) {
3845   return sinf(x);
3848 // DEFAULT-LABEL: @test_sin(
3849 // DEFAULT-NEXT:  entry:
3850 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_sin_f64(double noundef [[X:%.*]]) #[[ATTR16]]
3851 // DEFAULT-NEXT:    ret double [[CALL_I]]
3853 // FINITEONLY-LABEL: @test_sin(
3854 // FINITEONLY-NEXT:  entry:
3855 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_sin_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
3856 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3858 // APPROX-LABEL: @test_sin(
3859 // APPROX-NEXT:  entry:
3860 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_sin_f64(double noundef [[X:%.*]]) #[[ATTR16]]
3861 // APPROX-NEXT:    ret double [[CALL_I]]
3863 extern "C" __device__ double test_sin(double x) {
3864   return sin(x);
3867 // DEFAULT-LABEL: @test_sinpif(
3868 // DEFAULT-NEXT:  entry:
3869 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_sinpi_f32(float noundef [[X:%.*]]) #[[ATTR16]]
3870 // DEFAULT-NEXT:    ret float [[CALL_I]]
3872 // FINITEONLY-LABEL: @test_sinpif(
3873 // FINITEONLY-NEXT:  entry:
3874 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_sinpi_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
3875 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3877 // APPROX-LABEL: @test_sinpif(
3878 // APPROX-NEXT:  entry:
3879 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_sinpi_f32(float noundef [[X:%.*]]) #[[ATTR16]]
3880 // APPROX-NEXT:    ret float [[CALL_I]]
3882 extern "C" __device__ float test_sinpif(float x) {
3883   return sinpif(x);
3886 // DEFAULT-LABEL: @test_sinpi(
3887 // DEFAULT-NEXT:  entry:
3888 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_sinpi_f64(double noundef [[X:%.*]]) #[[ATTR16]]
3889 // DEFAULT-NEXT:    ret double [[CALL_I]]
3891 // FINITEONLY-LABEL: @test_sinpi(
3892 // FINITEONLY-NEXT:  entry:
3893 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_sinpi_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
3894 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3896 // APPROX-LABEL: @test_sinpi(
3897 // APPROX-NEXT:  entry:
3898 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_sinpi_f64(double noundef [[X:%.*]]) #[[ATTR16]]
3899 // APPROX-NEXT:    ret double [[CALL_I]]
3901 extern "C" __device__ double test_sinpi(double x) {
3902   return sinpi(x);
3905 // DEFAULT-LABEL: @test_sqrtf(
3906 // DEFAULT-NEXT:  entry:
3907 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.sqrt.f32(float [[X:%.*]])
3908 // DEFAULT-NEXT:    ret float [[TMP0]]
3910 // FINITEONLY-LABEL: @test_sqrtf(
3911 // FINITEONLY-NEXT:  entry:
3912 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.sqrt.f32(float [[X:%.*]])
3913 // FINITEONLY-NEXT:    ret float [[TMP0]]
3915 // APPROX-LABEL: @test_sqrtf(
3916 // APPROX-NEXT:  entry:
3917 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.sqrt.f32(float [[X:%.*]])
3918 // APPROX-NEXT:    ret float [[TMP0]]
3920 extern "C" __device__ float test_sqrtf(float x) {
3921   return sqrtf(x);
3924 // DEFAULT-LABEL: @test_sqrt(
3925 // DEFAULT-NEXT:  entry:
3926 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
3927 // DEFAULT-NEXT:    ret double [[TMP0]]
3929 // FINITEONLY-LABEL: @test_sqrt(
3930 // FINITEONLY-NEXT:  entry:
3931 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
3932 // FINITEONLY-NEXT:    ret double [[TMP0]]
3934 // APPROX-LABEL: @test_sqrt(
3935 // APPROX-NEXT:  entry:
3936 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
3937 // APPROX-NEXT:    ret double [[TMP0]]
3939 extern "C" __device__ double test_sqrt(double x) {
3940   return sqrt(x);
3943 // DEFAULT-LABEL: @test_tanf(
3944 // DEFAULT-NEXT:  entry:
3945 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tan_f32(float noundef [[X:%.*]]) #[[ATTR16]]
3946 // DEFAULT-NEXT:    ret float [[CALL_I]]
3948 // FINITEONLY-LABEL: @test_tanf(
3949 // FINITEONLY-NEXT:  entry:
3950 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_tan_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
3951 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3953 // APPROX-LABEL: @test_tanf(
3954 // APPROX-NEXT:  entry:
3955 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tan_f32(float noundef [[X:%.*]]) #[[ATTR16]]
3956 // APPROX-NEXT:    ret float [[CALL_I]]
3958 extern "C" __device__ float test_tanf(float x) {
3959   return tanf(x);
3962 // DEFAULT-LABEL: @test_tan(
3963 // DEFAULT-NEXT:  entry:
3964 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tan_f64(double noundef [[X:%.*]]) #[[ATTR16]]
3965 // DEFAULT-NEXT:    ret double [[CALL_I]]
3967 // FINITEONLY-LABEL: @test_tan(
3968 // FINITEONLY-NEXT:  entry:
3969 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_tan_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
3970 // FINITEONLY-NEXT:    ret double [[CALL_I]]
3972 // APPROX-LABEL: @test_tan(
3973 // APPROX-NEXT:  entry:
3974 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tan_f64(double noundef [[X:%.*]]) #[[ATTR16]]
3975 // APPROX-NEXT:    ret double [[CALL_I]]
3977 extern "C" __device__ double test_tan(double x) {
3978   return tan(x);
3981 // DEFAULT-LABEL: @test_tanhf(
3982 // DEFAULT-NEXT:  entry:
3983 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tanh_f32(float noundef [[X:%.*]]) #[[ATTR15]]
3984 // DEFAULT-NEXT:    ret float [[CALL_I]]
3986 // FINITEONLY-LABEL: @test_tanhf(
3987 // FINITEONLY-NEXT:  entry:
3988 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_tanh_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
3989 // FINITEONLY-NEXT:    ret float [[CALL_I]]
3991 // APPROX-LABEL: @test_tanhf(
3992 // APPROX-NEXT:  entry:
3993 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tanh_f32(float noundef [[X:%.*]]) #[[ATTR15]]
3994 // APPROX-NEXT:    ret float [[CALL_I]]
3996 extern "C" __device__ float test_tanhf(float x) {
3997   return tanhf(x);
4000 // DEFAULT-LABEL: @test_tanh(
4001 // DEFAULT-NEXT:  entry:
4002 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tanh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
4003 // DEFAULT-NEXT:    ret double [[CALL_I]]
4005 // FINITEONLY-LABEL: @test_tanh(
4006 // FINITEONLY-NEXT:  entry:
4007 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_tanh_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR15]]
4008 // FINITEONLY-NEXT:    ret double [[CALL_I]]
4010 // APPROX-LABEL: @test_tanh(
4011 // APPROX-NEXT:  entry:
4012 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tanh_f64(double noundef [[X:%.*]]) #[[ATTR15]]
4013 // APPROX-NEXT:    ret double [[CALL_I]]
4015 extern "C" __device__ double test_tanh(double x) {
4016   return tanh(x);
4019 // DEFAULT-LABEL: @test_tgammaf(
4020 // DEFAULT-NEXT:  entry:
4021 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tgamma_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4022 // DEFAULT-NEXT:    ret float [[CALL_I]]
4024 // FINITEONLY-LABEL: @test_tgammaf(
4025 // FINITEONLY-NEXT:  entry:
4026 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_tgamma_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
4027 // FINITEONLY-NEXT:    ret float [[CALL_I]]
4029 // APPROX-LABEL: @test_tgammaf(
4030 // APPROX-NEXT:  entry:
4031 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_tgamma_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4032 // APPROX-NEXT:    ret float [[CALL_I]]
4034 extern "C" __device__ float test_tgammaf(float x) {
4035   return tgammaf(x);
4038 // DEFAULT-LABEL: @test_tgamma(
4039 // DEFAULT-NEXT:  entry:
4040 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tgamma_f64(double noundef [[X:%.*]]) #[[ATTR16]]
4041 // DEFAULT-NEXT:    ret double [[CALL_I]]
4043 // FINITEONLY-LABEL: @test_tgamma(
4044 // FINITEONLY-NEXT:  entry:
4045 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_tgamma_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
4046 // FINITEONLY-NEXT:    ret double [[CALL_I]]
4048 // APPROX-LABEL: @test_tgamma(
4049 // APPROX-NEXT:  entry:
4050 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_tgamma_f64(double noundef [[X:%.*]]) #[[ATTR16]]
4051 // APPROX-NEXT:    ret double [[CALL_I]]
4053 extern "C" __device__ double test_tgamma(double x) {
4054   return tgamma(x);
4057 // DEFAULT-LABEL: @test_truncf(
4058 // DEFAULT-NEXT:  entry:
4059 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.trunc.f32(float [[X:%.*]])
4060 // DEFAULT-NEXT:    ret float [[TMP0]]
4062 // FINITEONLY-LABEL: @test_truncf(
4063 // FINITEONLY-NEXT:  entry:
4064 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.trunc.f32(float [[X:%.*]])
4065 // FINITEONLY-NEXT:    ret float [[TMP0]]
4067 // APPROX-LABEL: @test_truncf(
4068 // APPROX-NEXT:  entry:
4069 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.trunc.f32(float [[X:%.*]])
4070 // APPROX-NEXT:    ret float [[TMP0]]
4072 extern "C" __device__ float test_truncf(float x) {
4073   return truncf(x);
4076 // DEFAULT-LABEL: @test_trunc(
4077 // DEFAULT-NEXT:  entry:
4078 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.trunc.f64(double [[X:%.*]])
4079 // DEFAULT-NEXT:    ret double [[TMP0]]
4081 // FINITEONLY-LABEL: @test_trunc(
4082 // FINITEONLY-NEXT:  entry:
4083 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.trunc.f64(double [[X:%.*]])
4084 // FINITEONLY-NEXT:    ret double [[TMP0]]
4086 // APPROX-LABEL: @test_trunc(
4087 // APPROX-NEXT:  entry:
4088 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.trunc.f64(double [[X:%.*]])
4089 // APPROX-NEXT:    ret double [[TMP0]]
4091 extern "C" __device__ double test_trunc(double x) {
4092   return trunc(x);
4095 // DEFAULT-LABEL: @test_y0f(
4096 // DEFAULT-NEXT:  entry:
4097 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4098 // DEFAULT-NEXT:    ret float [[CALL_I]]
4100 // FINITEONLY-LABEL: @test_y0f(
4101 // FINITEONLY-NEXT:  entry:
4102 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y0_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
4103 // FINITEONLY-NEXT:    ret float [[CALL_I]]
4105 // APPROX-LABEL: @test_y0f(
4106 // APPROX-NEXT:  entry:
4107 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4108 // APPROX-NEXT:    ret float [[CALL_I]]
4110 extern "C" __device__ float test_y0f(float x) {
4111   return y0f(x);
4114 // DEFAULT-LABEL: @test_y0(
4115 // DEFAULT-NEXT:  entry:
4116 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[X:%.*]]) #[[ATTR16]]
4117 // DEFAULT-NEXT:    ret double [[CALL_I]]
4119 // FINITEONLY-LABEL: @test_y0(
4120 // FINITEONLY-NEXT:  entry:
4121 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y0_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
4122 // FINITEONLY-NEXT:    ret double [[CALL_I]]
4124 // APPROX-LABEL: @test_y0(
4125 // APPROX-NEXT:  entry:
4126 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[X:%.*]]) #[[ATTR16]]
4127 // APPROX-NEXT:    ret double [[CALL_I]]
4129 extern "C" __device__ double test_y0(double x) {
4130   return y0(x);
4133 // DEFAULT-LABEL: @test_y1f(
4134 // DEFAULT-NEXT:  entry:
4135 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4136 // DEFAULT-NEXT:    ret float [[CALL_I]]
4138 // FINITEONLY-LABEL: @test_y1f(
4139 // FINITEONLY-NEXT:  entry:
4140 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y1_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
4141 // FINITEONLY-NEXT:    ret float [[CALL_I]]
4143 // APPROX-LABEL: @test_y1f(
4144 // APPROX-NEXT:  entry:
4145 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4146 // APPROX-NEXT:    ret float [[CALL_I]]
4148 extern "C" __device__ float test_y1f(float x) {
4149   return y1f(x);
4152 // DEFAULT-LABEL: @test_y1(
4153 // DEFAULT-NEXT:  entry:
4154 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[X:%.*]]) #[[ATTR16]]
4155 // DEFAULT-NEXT:    ret double [[CALL_I]]
4157 // FINITEONLY-LABEL: @test_y1(
4158 // FINITEONLY-NEXT:  entry:
4159 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y1_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
4160 // FINITEONLY-NEXT:    ret double [[CALL_I]]
4162 // APPROX-LABEL: @test_y1(
4163 // APPROX-NEXT:  entry:
4164 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[X:%.*]]) #[[ATTR16]]
4165 // APPROX-NEXT:    ret double [[CALL_I]]
4167 extern "C" __device__ double test_y1(double x) {
4168   return y1(x);
4171 // DEFAULT-LABEL: @test_ynf(
4172 // DEFAULT-NEXT:  entry:
4173 // DEFAULT-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
4174 // DEFAULT-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
4175 // DEFAULT-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
4176 // DEFAULT-NEXT:    ]
4177 // DEFAULT:       if.then.i:
4178 // DEFAULT-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[Y:%.*]]) #[[ATTR16]]
4179 // DEFAULT-NEXT:    br label [[_ZL3YNFIF_EXIT:%.*]]
4180 // DEFAULT:       if.then2.i:
4181 // DEFAULT-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[Y]]) #[[ATTR16]]
4182 // DEFAULT-NEXT:    br label [[_ZL3YNFIF_EXIT]]
4183 // DEFAULT:       if.end4.i:
4184 // DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[Y]]) #[[ATTR16]]
4185 // DEFAULT-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[Y]]) #[[ATTR16]]
4186 // DEFAULT-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
4187 // DEFAULT-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3YNFIF_EXIT]]
4188 // DEFAULT:       for.body.i:
4189 // DEFAULT-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
4190 // DEFAULT-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
4191 // DEFAULT-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
4192 // DEFAULT-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4193 // DEFAULT-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to float
4194 // DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[CONV_I]], [[Y]]
4195 // DEFAULT-NEXT:    [[MUL8_I:%.*]] = fmul contract float [[__X1_0_I3]], [[DIV_I]]
4196 // DEFAULT-NEXT:    [[SUB_I]] = fsub contract float [[MUL8_I]], [[__X0_0_I2]]
4197 // DEFAULT-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
4198 // DEFAULT-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
4199 // DEFAULT-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3YNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP24:![0-9]+]]
4200 // DEFAULT:       _ZL3ynfif.exit:
4201 // 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]] ]
4202 // DEFAULT-NEXT:    ret float [[RETVAL_0_I]]
4204 // FINITEONLY-LABEL: @test_ynf(
4205 // FINITEONLY-NEXT:  entry:
4206 // FINITEONLY-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
4207 // FINITEONLY-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
4208 // FINITEONLY-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
4209 // FINITEONLY-NEXT:    ]
4210 // FINITEONLY:       if.then.i:
4211 // FINITEONLY-NEXT:    [[CALL_I20_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y0_f32(float noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR16]]
4212 // FINITEONLY-NEXT:    br label [[_ZL3YNFIF_EXIT:%.*]]
4213 // FINITEONLY:       if.then2.i:
4214 // FINITEONLY-NEXT:    [[CALL_I22_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y1_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
4215 // FINITEONLY-NEXT:    br label [[_ZL3YNFIF_EXIT]]
4216 // FINITEONLY:       if.end4.i:
4217 // FINITEONLY-NEXT:    [[CALL_I_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y0_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
4218 // FINITEONLY-NEXT:    [[CALL_I21_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_y1_f32(float noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
4219 // FINITEONLY-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
4220 // FINITEONLY-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3YNFIF_EXIT]]
4221 // FINITEONLY:       for.body.i:
4222 // FINITEONLY-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
4223 // FINITEONLY-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
4224 // FINITEONLY-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
4225 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4226 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to float
4227 // FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float [[CONV_I]], [[Y]]
4228 // FINITEONLY-NEXT:    [[MUL8_I:%.*]] = fmul nnan ninf contract float [[__X1_0_I3]], [[DIV_I]]
4229 // FINITEONLY-NEXT:    [[SUB_I]] = fsub nnan ninf contract float [[MUL8_I]], [[__X0_0_I2]]
4230 // FINITEONLY-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
4231 // FINITEONLY-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
4232 // FINITEONLY-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3YNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP24:![0-9]+]]
4233 // FINITEONLY:       _ZL3ynfif.exit:
4234 // 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]] ]
4235 // FINITEONLY-NEXT:    ret float [[RETVAL_0_I]]
4237 // APPROX-LABEL: @test_ynf(
4238 // APPROX-NEXT:  entry:
4239 // APPROX-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
4240 // APPROX-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
4241 // APPROX-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
4242 // APPROX-NEXT:    ]
4243 // APPROX:       if.then.i:
4244 // APPROX-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[Y:%.*]]) #[[ATTR16]]
4245 // APPROX-NEXT:    br label [[_ZL3YNFIF_EXIT:%.*]]
4246 // APPROX:       if.then2.i:
4247 // APPROX-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[Y]]) #[[ATTR16]]
4248 // APPROX-NEXT:    br label [[_ZL3YNFIF_EXIT]]
4249 // APPROX:       if.end4.i:
4250 // APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_y0_f32(float noundef [[Y]]) #[[ATTR16]]
4251 // APPROX-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef float @__ocml_y1_f32(float noundef [[Y]]) #[[ATTR16]]
4252 // APPROX-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
4253 // APPROX-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL3YNFIF_EXIT]]
4254 // APPROX:       for.body.i:
4255 // APPROX-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
4256 // APPROX-NEXT:    [[__X1_0_I3:%.*]] = phi float [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
4257 // APPROX-NEXT:    [[__X0_0_I2:%.*]] = phi float [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
4258 // APPROX-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4259 // APPROX-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to float
4260 // APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[CONV_I]], [[Y]]
4261 // APPROX-NEXT:    [[MUL8_I:%.*]] = fmul contract float [[__X1_0_I3]], [[DIV_I]]
4262 // APPROX-NEXT:    [[SUB_I]] = fsub contract float [[MUL8_I]], [[__X0_0_I2]]
4263 // APPROX-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
4264 // APPROX-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
4265 // APPROX-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL3YNFIF_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP24:![0-9]+]]
4266 // APPROX:       _ZL3ynfif.exit:
4267 // 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]] ]
4268 // APPROX-NEXT:    ret float [[RETVAL_0_I]]
4270 extern "C" __device__ float test_ynf(int x, float y) {
4271   return ynf(x, y);
4274 // DEFAULT-LABEL: @test_yn(
4275 // DEFAULT-NEXT:  entry:
4276 // DEFAULT-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
4277 // DEFAULT-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
4278 // DEFAULT-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
4279 // DEFAULT-NEXT:    ]
4280 // DEFAULT:       if.then.i:
4281 // DEFAULT-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[Y:%.*]]) #[[ATTR16]]
4282 // DEFAULT-NEXT:    br label [[_ZL2YNID_EXIT:%.*]]
4283 // DEFAULT:       if.then2.i:
4284 // DEFAULT-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[Y]]) #[[ATTR16]]
4285 // DEFAULT-NEXT:    br label [[_ZL2YNID_EXIT]]
4286 // DEFAULT:       if.end4.i:
4287 // DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[Y]]) #[[ATTR16]]
4288 // DEFAULT-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[Y]]) #[[ATTR16]]
4289 // DEFAULT-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
4290 // DEFAULT-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2YNID_EXIT]]
4291 // DEFAULT:       for.body.i:
4292 // DEFAULT-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
4293 // DEFAULT-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
4294 // DEFAULT-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
4295 // DEFAULT-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4296 // DEFAULT-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to double
4297 // DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[CONV_I]], [[Y]]
4298 // DEFAULT-NEXT:    [[MUL8_I:%.*]] = fmul contract double [[__X1_0_I3]], [[DIV_I]]
4299 // DEFAULT-NEXT:    [[SUB_I]] = fsub contract double [[MUL8_I]], [[__X0_0_I2]]
4300 // DEFAULT-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
4301 // DEFAULT-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
4302 // DEFAULT-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2YNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP25:![0-9]+]]
4303 // DEFAULT:       _ZL2ynid.exit:
4304 // 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]] ]
4305 // DEFAULT-NEXT:    ret double [[RETVAL_0_I]]
4307 // FINITEONLY-LABEL: @test_yn(
4308 // FINITEONLY-NEXT:  entry:
4309 // FINITEONLY-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
4310 // FINITEONLY-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
4311 // FINITEONLY-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
4312 // FINITEONLY-NEXT:    ]
4313 // FINITEONLY:       if.then.i:
4314 // FINITEONLY-NEXT:    [[CALL_I20_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y0_f64(double noundef nofpclass(nan inf) [[Y:%.*]]) #[[ATTR16]]
4315 // FINITEONLY-NEXT:    br label [[_ZL2YNID_EXIT:%.*]]
4316 // FINITEONLY:       if.then2.i:
4317 // FINITEONLY-NEXT:    [[CALL_I22_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y1_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
4318 // FINITEONLY-NEXT:    br label [[_ZL2YNID_EXIT]]
4319 // FINITEONLY:       if.end4.i:
4320 // FINITEONLY-NEXT:    [[CALL_I_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y0_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
4321 // FINITEONLY-NEXT:    [[CALL_I21_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) double @__ocml_y1_f64(double noundef nofpclass(nan inf) [[Y]]) #[[ATTR16]]
4322 // FINITEONLY-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
4323 // FINITEONLY-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2YNID_EXIT]]
4324 // FINITEONLY:       for.body.i:
4325 // FINITEONLY-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
4326 // FINITEONLY-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
4327 // FINITEONLY-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
4328 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4329 // FINITEONLY-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to double
4330 // FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract double [[CONV_I]], [[Y]]
4331 // FINITEONLY-NEXT:    [[MUL8_I:%.*]] = fmul nnan ninf contract double [[__X1_0_I3]], [[DIV_I]]
4332 // FINITEONLY-NEXT:    [[SUB_I]] = fsub nnan ninf contract double [[MUL8_I]], [[__X0_0_I2]]
4333 // FINITEONLY-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
4334 // FINITEONLY-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
4335 // FINITEONLY-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2YNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP25:![0-9]+]]
4336 // FINITEONLY:       _ZL2ynid.exit:
4337 // 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]] ]
4338 // FINITEONLY-NEXT:    ret double [[RETVAL_0_I]]
4340 // APPROX-LABEL: @test_yn(
4341 // APPROX-NEXT:  entry:
4342 // APPROX-NEXT:    switch i32 [[X:%.*]], label [[IF_END4_I:%.*]] [
4343 // APPROX-NEXT:    i32 0, label [[IF_THEN_I:%.*]]
4344 // APPROX-NEXT:    i32 1, label [[IF_THEN2_I:%.*]]
4345 // APPROX-NEXT:    ]
4346 // APPROX:       if.then.i:
4347 // APPROX-NEXT:    [[CALL_I20_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[Y:%.*]]) #[[ATTR16]]
4348 // APPROX-NEXT:    br label [[_ZL2YNID_EXIT:%.*]]
4349 // APPROX:       if.then2.i:
4350 // APPROX-NEXT:    [[CALL_I22_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[Y]]) #[[ATTR16]]
4351 // APPROX-NEXT:    br label [[_ZL2YNID_EXIT]]
4352 // APPROX:       if.end4.i:
4353 // APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef double @__ocml_y0_f64(double noundef [[Y]]) #[[ATTR16]]
4354 // APPROX-NEXT:    [[CALL_I21_I:%.*]] = tail call contract noundef double @__ocml_y1_f64(double noundef [[Y]]) #[[ATTR16]]
4355 // APPROX-NEXT:    [[CMP7_I1:%.*]] = icmp sgt i32 [[X]], 1
4356 // APPROX-NEXT:    br i1 [[CMP7_I1]], label [[FOR_BODY_I:%.*]], label [[_ZL2YNID_EXIT]]
4357 // APPROX:       for.body.i:
4358 // APPROX-NEXT:    [[__I_0_I4:%.*]] = phi i32 [ [[INC_I:%.*]], [[FOR_BODY_I]] ], [ 1, [[IF_END4_I]] ]
4359 // APPROX-NEXT:    [[__X1_0_I3:%.*]] = phi double [ [[SUB_I:%.*]], [[FOR_BODY_I]] ], [ [[CALL_I21_I]], [[IF_END4_I]] ]
4360 // APPROX-NEXT:    [[__X0_0_I2:%.*]] = phi double [ [[__X1_0_I3]], [[FOR_BODY_I]] ], [ [[CALL_I_I]], [[IF_END4_I]] ]
4361 // APPROX-NEXT:    [[MUL_I:%.*]] = shl nuw nsw i32 [[__I_0_I4]], 1
4362 // APPROX-NEXT:    [[CONV_I:%.*]] = sitofp i32 [[MUL_I]] to double
4363 // APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[CONV_I]], [[Y]]
4364 // APPROX-NEXT:    [[MUL8_I:%.*]] = fmul contract double [[__X1_0_I3]], [[DIV_I]]
4365 // APPROX-NEXT:    [[SUB_I]] = fsub contract double [[MUL8_I]], [[__X0_0_I2]]
4366 // APPROX-NEXT:    [[INC_I]] = add nuw nsw i32 [[__I_0_I4]], 1
4367 // APPROX-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC_I]], [[X]]
4368 // APPROX-NEXT:    br i1 [[EXITCOND_NOT]], label [[_ZL2YNID_EXIT]], label [[FOR_BODY_I]], !llvm.loop [[LOOP25:![0-9]+]]
4369 // APPROX:       _ZL2ynid.exit:
4370 // 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]] ]
4371 // APPROX-NEXT:    ret double [[RETVAL_0_I]]
4373 extern "C" __device__ double test_yn(int x, double y) {
4374   return yn(x, y);
4377 // DEFAULT-LABEL: @test___cosf(
4378 // DEFAULT-NEXT:  entry:
4379 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4380 // DEFAULT-NEXT:    ret float [[CALL_I]]
4382 // FINITEONLY-LABEL: @test___cosf(
4383 // FINITEONLY-NEXT:  entry:
4384 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_native_cos_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
4385 // FINITEONLY-NEXT:    ret float [[CALL_I]]
4387 // APPROX-LABEL: @test___cosf(
4388 // APPROX-NEXT:  entry:
4389 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4390 // APPROX-NEXT:    ret float [[CALL_I]]
4392 extern "C" __device__ float test___cosf(float x) {
4393   return __cosf(x);
4396 // DEFAULT-LABEL: @test___exp10f(
4397 // DEFAULT-NEXT:  entry:
4398 // DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], 0x400A934F00000000
4399 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4400 // DEFAULT-NEXT:    ret float [[TMP0]]
4402 // FINITEONLY-LABEL: @test___exp10f(
4403 // FINITEONLY-NEXT:  entry:
4404 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[X:%.*]], 0x400A934F00000000
4405 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4406 // FINITEONLY-NEXT:    ret float [[TMP0]]
4408 // APPROX-LABEL: @test___exp10f(
4409 // APPROX-NEXT:  entry:
4410 // APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], 0x400A934F00000000
4411 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4412 // APPROX-NEXT:    ret float [[TMP0]]
4414 extern "C" __device__ float test___exp10f(float x) {
4415   return __exp10f(x);
4418 // DEFAULT-LABEL: @test___expf(
4419 // DEFAULT-NEXT:  entry:
4420 // DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], 0x3FF7154760000000
4421 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4422 // DEFAULT-NEXT:    ret float [[TMP0]]
4424 // FINITEONLY-LABEL: @test___expf(
4425 // FINITEONLY-NEXT:  entry:
4426 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[X:%.*]], 0x3FF7154760000000
4427 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4428 // FINITEONLY-NEXT:    ret float [[TMP0]]
4430 // APPROX-LABEL: @test___expf(
4431 // APPROX-NEXT:  entry:
4432 // APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], 0x3FF7154760000000
4433 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.exp2.f32(float [[MUL_I]])
4434 // APPROX-NEXT:    ret float [[TMP0]]
4436 extern "C" __device__ float test___expf(float x) {
4437   return __expf(x);
4440 // DEFAULT-LABEL: @test___fadd_rn(
4441 // DEFAULT-NEXT:  entry:
4442 // DEFAULT-NEXT:    [[ADD_I:%.*]] = fadd contract float [[X:%.*]], [[Y:%.*]]
4443 // DEFAULT-NEXT:    ret float [[ADD_I]]
4445 // FINITEONLY-LABEL: @test___fadd_rn(
4446 // FINITEONLY-NEXT:  entry:
4447 // FINITEONLY-NEXT:    [[ADD_I:%.*]] = fadd nnan ninf contract float [[X:%.*]], [[Y:%.*]]
4448 // FINITEONLY-NEXT:    ret float [[ADD_I]]
4450 // APPROX-LABEL: @test___fadd_rn(
4451 // APPROX-NEXT:  entry:
4452 // APPROX-NEXT:    [[ADD_I:%.*]] = fadd contract float [[X:%.*]], [[Y:%.*]]
4453 // APPROX-NEXT:    ret float [[ADD_I]]
4455 extern "C" __device__ float test___fadd_rn(float x, float y) {
4456   return __fadd_rn(x, y);
4459 // DEFAULT-LABEL: @test___fdividef(
4460 // DEFAULT-NEXT:  entry:
4461 // DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[X:%.*]], [[Y:%.*]]
4462 // DEFAULT-NEXT:    ret float [[DIV_I]]
4464 // FINITEONLY-LABEL: @test___fdividef(
4465 // FINITEONLY-NEXT:  entry:
4466 // FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float [[X:%.*]], [[Y:%.*]]
4467 // FINITEONLY-NEXT:    ret float [[DIV_I]]
4469 // APPROX-LABEL: @test___fdividef(
4470 // APPROX-NEXT:  entry:
4471 // APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float [[X:%.*]], [[Y:%.*]]
4472 // APPROX-NEXT:    ret float [[DIV_I]]
4474 extern "C" __device__ float test___fdividef(float x, float y) {
4475   return __fdividef(x, y);
4478 // DEFAULT-LABEL: @test__fmaf_rn(
4479 // DEFAULT-NEXT:  entry:
4480 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
4481 // DEFAULT-NEXT:    ret float [[TMP0]]
4483 // FINITEONLY-LABEL: @test__fmaf_rn(
4484 // FINITEONLY-NEXT:  entry:
4485 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
4486 // FINITEONLY-NEXT:    ret float [[TMP0]]
4488 // APPROX-LABEL: @test__fmaf_rn(
4489 // APPROX-NEXT:  entry:
4490 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.fma.f32(float [[X:%.*]], float [[Y:%.*]], float [[Z:%.*]])
4491 // APPROX-NEXT:    ret float [[TMP0]]
4493 extern "C" __device__ float test__fmaf_rn(float x, float y, float z) {
4494   return __fmaf_rn(x, y, z);
4497 // DEFAULT-LABEL: @test___fmul_rn(
4498 // DEFAULT-NEXT:  entry:
4499 // DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], [[Y:%.*]]
4500 // DEFAULT-NEXT:    ret float [[MUL_I]]
4502 // FINITEONLY-LABEL: @test___fmul_rn(
4503 // FINITEONLY-NEXT:  entry:
4504 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[X:%.*]], [[Y:%.*]]
4505 // FINITEONLY-NEXT:    ret float [[MUL_I]]
4507 // APPROX-LABEL: @test___fmul_rn(
4508 // APPROX-NEXT:  entry:
4509 // APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[X:%.*]], [[Y:%.*]]
4510 // APPROX-NEXT:    ret float [[MUL_I]]
4512 extern "C" __device__ float test___fmul_rn(float x, float y) {
4513   return __fmul_rn(x, y);
4516 // DEFAULT-LABEL: @test___frcp_rn(
4517 // DEFAULT-NEXT:  entry:
4518 // DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract float 1.000000e+00, [[X:%.*]]
4519 // DEFAULT-NEXT:    ret float [[DIV_I]]
4521 // FINITEONLY-LABEL: @test___frcp_rn(
4522 // FINITEONLY-NEXT:  entry:
4523 // FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract float 1.000000e+00, [[X:%.*]]
4524 // FINITEONLY-NEXT:    ret float [[DIV_I]]
4526 // APPROX-LABEL: @test___frcp_rn(
4527 // APPROX-NEXT:  entry:
4528 // APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract float 1.000000e+00, [[X:%.*]]
4529 // APPROX-NEXT:    ret float [[DIV_I]]
4531 extern "C" __device__ float test___frcp_rn(float x) {
4532   return __frcp_rn(x);
4535 // DEFAULT-LABEL: @test___frsqrt_rn(
4536 // DEFAULT-NEXT:  entry:
4537 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.rsq.f32(float [[X:%.*]])
4538 // DEFAULT-NEXT:    ret float [[TMP0]]
4540 // FINITEONLY-LABEL: @test___frsqrt_rn(
4541 // FINITEONLY-NEXT:  entry:
4542 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.amdgcn.rsq.f32(float [[X:%.*]])
4543 // FINITEONLY-NEXT:    ret float [[TMP0]]
4545 // APPROX-LABEL: @test___frsqrt_rn(
4546 // APPROX-NEXT:  entry:
4547 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.rsq.f32(float [[X:%.*]])
4548 // APPROX-NEXT:    ret float [[TMP0]]
4550 extern "C" __device__ float test___frsqrt_rn(float x) {
4551   return __frsqrt_rn(x);
4554 // DEFAULT-LABEL: @test___fsqrt_rn(
4555 // DEFAULT-NEXT:  entry:
4556 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_sqrt_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4557 // DEFAULT-NEXT:    ret float [[CALL_I]]
4559 // FINITEONLY-LABEL: @test___fsqrt_rn(
4560 // FINITEONLY-NEXT:  entry:
4561 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_native_sqrt_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
4562 // FINITEONLY-NEXT:    ret float [[CALL_I]]
4564 // APPROX-LABEL: @test___fsqrt_rn(
4565 // APPROX-NEXT:  entry:
4566 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_sqrt_f32(float noundef [[X:%.*]]) #[[ATTR14]]
4567 // APPROX-NEXT:    ret float [[CALL_I]]
4569 extern "C" __device__ float test___fsqrt_rn(float x) {
4570   return __fsqrt_rn(x);
4573 // DEFAULT-LABEL: @test___fsub_rn(
4574 // DEFAULT-NEXT:  entry:
4575 // DEFAULT-NEXT:    [[SUB_I:%.*]] = fsub contract float [[X:%.*]], [[Y:%.*]]
4576 // DEFAULT-NEXT:    ret float [[SUB_I]]
4578 // FINITEONLY-LABEL: @test___fsub_rn(
4579 // FINITEONLY-NEXT:  entry:
4580 // FINITEONLY-NEXT:    [[SUB_I:%.*]] = fsub nnan ninf contract float [[X:%.*]], [[Y:%.*]]
4581 // FINITEONLY-NEXT:    ret float [[SUB_I]]
4583 // APPROX-LABEL: @test___fsub_rn(
4584 // APPROX-NEXT:  entry:
4585 // APPROX-NEXT:    [[SUB_I:%.*]] = fsub contract float [[X:%.*]], [[Y:%.*]]
4586 // APPROX-NEXT:    ret float [[SUB_I]]
4588 extern "C" __device__ float test___fsub_rn(float x, float y) {
4589   return __fsub_rn(x, y);
4592 // DEFAULT-LABEL: @test___log10f(
4593 // DEFAULT-NEXT:  entry:
4594 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log10.f32(float [[X:%.*]])
4595 // DEFAULT-NEXT:    ret float [[TMP0]]
4597 // FINITEONLY-LABEL: @test___log10f(
4598 // FINITEONLY-NEXT:  entry:
4599 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.log10.f32(float [[X:%.*]])
4600 // FINITEONLY-NEXT:    ret float [[TMP0]]
4602 // APPROX-LABEL: @test___log10f(
4603 // APPROX-NEXT:  entry:
4604 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log10.f32(float [[X:%.*]])
4605 // APPROX-NEXT:    ret float [[TMP0]]
4607 extern "C" __device__ float test___log10f(float x) {
4608   return __log10f(x);
4611 // DEFAULT-LABEL: @test___log2f(
4612 // DEFAULT-NEXT:  entry:
4613 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.log.f32(float [[X:%.*]])
4614 // DEFAULT-NEXT:    ret float [[TMP0]]
4616 // FINITEONLY-LABEL: @test___log2f(
4617 // FINITEONLY-NEXT:  entry:
4618 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.amdgcn.log.f32(float [[X:%.*]])
4619 // FINITEONLY-NEXT:    ret float [[TMP0]]
4621 // APPROX-LABEL: @test___log2f(
4622 // APPROX-NEXT:  entry:
4623 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.amdgcn.log.f32(float [[X:%.*]])
4624 // APPROX-NEXT:    ret float [[TMP0]]
4626 extern "C" __device__ float test___log2f(float x) {
4627   return __log2f(x);
4630 // DEFAULT-LABEL: @test___logf(
4631 // DEFAULT-NEXT:  entry:
4632 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log.f32(float [[X:%.*]])
4633 // DEFAULT-NEXT:    ret float [[TMP0]]
4635 // FINITEONLY-LABEL: @test___logf(
4636 // FINITEONLY-NEXT:  entry:
4637 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.log.f32(float [[X:%.*]])
4638 // FINITEONLY-NEXT:    ret float [[TMP0]]
4640 // APPROX-LABEL: @test___logf(
4641 // APPROX-NEXT:  entry:
4642 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.log.f32(float [[X:%.*]])
4643 // APPROX-NEXT:    ret float [[TMP0]]
4645 extern "C" __device__ float test___logf(float x) {
4646   return __logf(x);
4649 // DEFAULT-LABEL: @test___powf(
4650 // DEFAULT-NEXT:  entry:
4651 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pow_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR15]]
4652 // DEFAULT-NEXT:    ret float [[CALL_I]]
4654 // FINITEONLY-LABEL: @test___powf(
4655 // FINITEONLY-NEXT:  entry:
4656 // 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:%.*]]) #[[ATTR15]]
4657 // FINITEONLY-NEXT:    ret float [[CALL_I]]
4659 // APPROX-LABEL: @test___powf(
4660 // APPROX-NEXT:  entry:
4661 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_pow_f32(float noundef [[X:%.*]], float noundef [[Y:%.*]]) #[[ATTR15]]
4662 // APPROX-NEXT:    ret float [[CALL_I]]
4664 extern "C" __device__ float test___powf(float x, float y) {
4665   return __powf(x, y);
4668 // DEFAULT-LABEL: @test___saturatef(
4669 // DEFAULT-NEXT:  entry:
4670 // DEFAULT-NEXT:    [[CMP_I:%.*]] = fcmp contract olt float [[X:%.*]], 0.000000e+00
4671 // DEFAULT-NEXT:    [[CMP1_I:%.*]] = fcmp contract ogt float [[X]], 1.000000e+00
4672 // DEFAULT-NEXT:    [[COND_I:%.*]] = select contract i1 [[CMP1_I]], float 1.000000e+00, float [[X]]
4673 // DEFAULT-NEXT:    [[COND5_I:%.*]] = select contract i1 [[CMP_I]], float 0.000000e+00, float [[COND_I]]
4674 // DEFAULT-NEXT:    ret float [[COND5_I]]
4676 // FINITEONLY-LABEL: @test___saturatef(
4677 // FINITEONLY-NEXT:  entry:
4678 // FINITEONLY-NEXT:    [[CMP_I:%.*]] = fcmp nnan ninf contract olt float [[X:%.*]], 0.000000e+00
4679 // FINITEONLY-NEXT:    [[CMP1_I:%.*]] = fcmp nnan ninf contract ogt float [[X]], 1.000000e+00
4680 // FINITEONLY-NEXT:    [[COND_I:%.*]] = select nnan ninf contract i1 [[CMP1_I]], float 1.000000e+00, float [[X]]
4681 // FINITEONLY-NEXT:    [[COND5_I:%.*]] = select nnan ninf contract i1 [[CMP_I]], float 0.000000e+00, float [[COND_I]]
4682 // FINITEONLY-NEXT:    ret float [[COND5_I]]
4684 // APPROX-LABEL: @test___saturatef(
4685 // APPROX-NEXT:  entry:
4686 // APPROX-NEXT:    [[CMP_I:%.*]] = fcmp contract olt float [[X:%.*]], 0.000000e+00
4687 // APPROX-NEXT:    [[CMP1_I:%.*]] = fcmp contract ogt float [[X]], 1.000000e+00
4688 // APPROX-NEXT:    [[COND_I:%.*]] = select contract i1 [[CMP1_I]], float 1.000000e+00, float [[X]]
4689 // APPROX-NEXT:    [[COND5_I:%.*]] = select contract i1 [[CMP_I]], float 0.000000e+00, float [[COND_I]]
4690 // APPROX-NEXT:    ret float [[COND5_I]]
4692 extern "C" __device__ float test___saturatef(float x) {
4693   return __saturatef(x);
4696 // DEFAULT-LABEL: @test___sincosf(
4697 // DEFAULT-NEXT:  entry:
4698 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4699 // DEFAULT-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
4700 // DEFAULT-NEXT:    [[CALL1_I:%.*]] = tail call contract float @__ocml_native_cos_f32(float noundef [[X]]) #[[ATTR16]]
4701 // DEFAULT-NEXT:    store float [[CALL1_I]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
4702 // DEFAULT-NEXT:    ret void
4704 // FINITEONLY-LABEL: @test___sincosf(
4705 // FINITEONLY-NEXT:  entry:
4706 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract nofpclass(nan inf) float @__ocml_native_sin_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
4707 // FINITEONLY-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
4708 // FINITEONLY-NEXT:    [[CALL1_I:%.*]] = tail call nnan ninf contract nofpclass(nan inf) float @__ocml_native_cos_f32(float noundef nofpclass(nan inf) [[X]]) #[[ATTR16]]
4709 // FINITEONLY-NEXT:    store float [[CALL1_I]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
4710 // FINITEONLY-NEXT:    ret void
4712 // APPROX-LABEL: @test___sincosf(
4713 // APPROX-NEXT:  entry:
4714 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4715 // APPROX-NEXT:    store float [[CALL_I]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA16]]
4716 // APPROX-NEXT:    [[CALL1_I:%.*]] = tail call contract float @__ocml_native_cos_f32(float noundef [[X]]) #[[ATTR16]]
4717 // APPROX-NEXT:    store float [[CALL1_I]], ptr [[Z:%.*]], align 4, !tbaa [[TBAA16]]
4718 // APPROX-NEXT:    ret void
4720 extern "C" __device__ void test___sincosf(float x, float *y, float *z) {
4721   __sincosf(x, y, z);
4724 // DEFAULT-LABEL: @test___sinf(
4725 // DEFAULT-NEXT:  entry:
4726 // DEFAULT-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4727 // DEFAULT-NEXT:    ret float [[CALL_I]]
4729 // FINITEONLY-LABEL: @test___sinf(
4730 // FINITEONLY-NEXT:  entry:
4731 // FINITEONLY-NEXT:    [[CALL_I:%.*]] = tail call nnan ninf contract noundef nofpclass(nan inf) float @__ocml_native_sin_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR16]]
4732 // FINITEONLY-NEXT:    ret float [[CALL_I]]
4734 // APPROX-LABEL: @test___sinf(
4735 // APPROX-NEXT:  entry:
4736 // APPROX-NEXT:    [[CALL_I:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4737 // APPROX-NEXT:    ret float [[CALL_I]]
4739 extern "C" __device__ float test___sinf(float x) {
4740   return __sinf(x);
4743 // DEFAULT-LABEL: @test___tanf(
4744 // DEFAULT-NEXT:  entry:
4745 // DEFAULT-NEXT:    [[CALL_I3_I:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4746 // DEFAULT-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X]]) #[[ATTR16]]
4747 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.amdgcn.rcp.f32(float [[CALL_I_I]])
4748 // DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract float [[CALL_I3_I]], [[TMP0]]
4749 // DEFAULT-NEXT:    ret float [[MUL_I]]
4751 // FINITEONLY-LABEL: @test___tanf(
4752 // FINITEONLY-NEXT:  entry:
4753 // 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:%.*]]) #[[ATTR16]]
4754 // 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]]) #[[ATTR16]]
4755 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract float @llvm.amdgcn.rcp.f32(float [[CALL_I_I]])
4756 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract float [[CALL_I3_I]], [[TMP0]]
4757 // FINITEONLY-NEXT:    ret float [[MUL_I]]
4759 // APPROX-LABEL: @test___tanf(
4760 // APPROX-NEXT:  entry:
4761 // APPROX-NEXT:    [[CALL_I3_I:%.*]] = tail call contract noundef float @__ocml_native_sin_f32(float noundef [[X:%.*]]) #[[ATTR16]]
4762 // APPROX-NEXT:    [[CALL_I_I:%.*]] = tail call contract noundef float @__ocml_native_cos_f32(float noundef [[X]]) #[[ATTR16]]
4763 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract float @llvm.amdgcn.rcp.f32(float [[CALL_I_I]])
4764 // APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract float [[CALL_I3_I]], [[TMP0]]
4765 // APPROX-NEXT:    ret float [[MUL_I]]
4767 extern "C" __device__ float test___tanf(float x) {
4768   return __tanf(x);
4771 // DEFAULT-LABEL: @test___dadd_rn(
4772 // DEFAULT-NEXT:  entry:
4773 // DEFAULT-NEXT:    [[ADD_I:%.*]] = fadd contract double [[X:%.*]], [[Y:%.*]]
4774 // DEFAULT-NEXT:    ret double [[ADD_I]]
4776 // FINITEONLY-LABEL: @test___dadd_rn(
4777 // FINITEONLY-NEXT:  entry:
4778 // FINITEONLY-NEXT:    [[ADD_I:%.*]] = fadd nnan ninf contract double [[X:%.*]], [[Y:%.*]]
4779 // FINITEONLY-NEXT:    ret double [[ADD_I]]
4781 // APPROX-LABEL: @test___dadd_rn(
4782 // APPROX-NEXT:  entry:
4783 // APPROX-NEXT:    [[ADD_I:%.*]] = fadd contract double [[X:%.*]], [[Y:%.*]]
4784 // APPROX-NEXT:    ret double [[ADD_I]]
4786 extern "C" __device__ double test___dadd_rn(double x, double y) {
4787   return __dadd_rn(x, y);
4790 // DEFAULT-LABEL: @test___ddiv_rn(
4791 // DEFAULT-NEXT:  entry:
4792 // DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[X:%.*]], [[Y:%.*]]
4793 // DEFAULT-NEXT:    ret double [[DIV_I]]
4795 // FINITEONLY-LABEL: @test___ddiv_rn(
4796 // FINITEONLY-NEXT:  entry:
4797 // FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract double [[X:%.*]], [[Y:%.*]]
4798 // FINITEONLY-NEXT:    ret double [[DIV_I]]
4800 // APPROX-LABEL: @test___ddiv_rn(
4801 // APPROX-NEXT:  entry:
4802 // APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract double [[X:%.*]], [[Y:%.*]]
4803 // APPROX-NEXT:    ret double [[DIV_I]]
4805 extern "C" __device__ double test___ddiv_rn(double x, double y) {
4806   return __ddiv_rn(x, y);
4809 // DEFAULT-LABEL: @test___dmul_rn(
4810 // DEFAULT-NEXT:  entry:
4811 // DEFAULT-NEXT:    [[MUL_I:%.*]] = fmul contract double [[X:%.*]], [[Y:%.*]]
4812 // DEFAULT-NEXT:    ret double [[MUL_I]]
4814 // FINITEONLY-LABEL: @test___dmul_rn(
4815 // FINITEONLY-NEXT:  entry:
4816 // FINITEONLY-NEXT:    [[MUL_I:%.*]] = fmul nnan ninf contract double [[X:%.*]], [[Y:%.*]]
4817 // FINITEONLY-NEXT:    ret double [[MUL_I]]
4819 // APPROX-LABEL: @test___dmul_rn(
4820 // APPROX-NEXT:  entry:
4821 // APPROX-NEXT:    [[MUL_I:%.*]] = fmul contract double [[X:%.*]], [[Y:%.*]]
4822 // APPROX-NEXT:    ret double [[MUL_I]]
4824 extern "C" __device__ double test___dmul_rn(double x, double y) {
4825   return __dmul_rn(x, y);
4828 // DEFAULT-LABEL: @test___drcp_rn(
4829 // DEFAULT-NEXT:  entry:
4830 // DEFAULT-NEXT:    [[DIV_I:%.*]] = fdiv contract double 1.000000e+00, [[X:%.*]]
4831 // DEFAULT-NEXT:    ret double [[DIV_I]]
4833 // FINITEONLY-LABEL: @test___drcp_rn(
4834 // FINITEONLY-NEXT:  entry:
4835 // FINITEONLY-NEXT:    [[DIV_I:%.*]] = fdiv nnan ninf contract double 1.000000e+00, [[X:%.*]]
4836 // FINITEONLY-NEXT:    ret double [[DIV_I]]
4838 // APPROX-LABEL: @test___drcp_rn(
4839 // APPROX-NEXT:  entry:
4840 // APPROX-NEXT:    [[DIV_I:%.*]] = fdiv contract double 1.000000e+00, [[X:%.*]]
4841 // APPROX-NEXT:    ret double [[DIV_I]]
4843 extern "C" __device__ double test___drcp_rn(double x) {
4844   return __drcp_rn(x);
4847 // DEFAULT-LABEL: @test___dsqrt_rn(
4848 // DEFAULT-NEXT:  entry:
4849 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
4850 // DEFAULT-NEXT:    ret double [[TMP0]]
4852 // FINITEONLY-LABEL: @test___dsqrt_rn(
4853 // FINITEONLY-NEXT:  entry:
4854 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
4855 // FINITEONLY-NEXT:    ret double [[TMP0]]
4857 // APPROX-LABEL: @test___dsqrt_rn(
4858 // APPROX-NEXT:  entry:
4859 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.sqrt.f64(double [[X:%.*]])
4860 // APPROX-NEXT:    ret double [[TMP0]]
4862 extern "C" __device__ double test___dsqrt_rn(double x) {
4863   return __dsqrt_rn(x);
4866 // DEFAULT-LABEL: @test__fma_rn(
4867 // DEFAULT-NEXT:  entry:
4868 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
4869 // DEFAULT-NEXT:    ret double [[TMP0]]
4871 // FINITEONLY-LABEL: @test__fma_rn(
4872 // FINITEONLY-NEXT:  entry:
4873 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
4874 // FINITEONLY-NEXT:    ret double [[TMP0]]
4876 // APPROX-LABEL: @test__fma_rn(
4877 // APPROX-NEXT:  entry:
4878 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.fma.f64(double [[X:%.*]], double [[Y:%.*]], double [[Z:%.*]])
4879 // APPROX-NEXT:    ret double [[TMP0]]
4881 extern "C" __device__ double test__fma_rn(double x, double y, double z) {
4882   return __fma_rn(x, y, z);
4885 // DEFAULT-LABEL: @test_float_min(
4886 // DEFAULT-NEXT:  entry:
4887 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
4888 // DEFAULT-NEXT:    ret float [[TMP0]]
4890 // FINITEONLY-LABEL: @test_float_min(
4891 // FINITEONLY-NEXT:  entry:
4892 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
4893 // FINITEONLY-NEXT:    ret float [[TMP0]]
4895 // APPROX-LABEL: @test_float_min(
4896 // APPROX-NEXT:  entry:
4897 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.minnum.f32(float [[X:%.*]], float [[Y:%.*]])
4898 // APPROX-NEXT:    ret float [[TMP0]]
4900 extern "C" __device__ float test_float_min(float x, float y) {
4901   return min(x, y);
4904 // DEFAULT-LABEL: @test_float_max(
4905 // DEFAULT-NEXT:  entry:
4906 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
4907 // DEFAULT-NEXT:    ret float [[TMP0]]
4909 // FINITEONLY-LABEL: @test_float_max(
4910 // FINITEONLY-NEXT:  entry:
4911 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
4912 // FINITEONLY-NEXT:    ret float [[TMP0]]
4914 // APPROX-LABEL: @test_float_max(
4915 // APPROX-NEXT:  entry:
4916 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef float @llvm.maxnum.f32(float [[X:%.*]], float [[Y:%.*]])
4917 // APPROX-NEXT:    ret float [[TMP0]]
4919 extern "C" __device__ float test_float_max(float x, float y) {
4920   return max(x, y);
4923 // DEFAULT-LABEL: @test_double_min(
4924 // DEFAULT-NEXT:  entry:
4925 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
4926 // DEFAULT-NEXT:    ret double [[TMP0]]
4928 // FINITEONLY-LABEL: @test_double_min(
4929 // FINITEONLY-NEXT:  entry:
4930 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
4931 // FINITEONLY-NEXT:    ret double [[TMP0]]
4933 // APPROX-LABEL: @test_double_min(
4934 // APPROX-NEXT:  entry:
4935 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.minnum.f64(double [[X:%.*]], double [[Y:%.*]])
4936 // APPROX-NEXT:    ret double [[TMP0]]
4938 extern "C" __device__ double test_double_min(double x, double y) {
4939   return min(x, y);
4942 // DEFAULT-LABEL: @test_double_max(
4943 // DEFAULT-NEXT:  entry:
4944 // DEFAULT-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
4945 // DEFAULT-NEXT:    ret double [[TMP0]]
4947 // FINITEONLY-LABEL: @test_double_max(
4948 // FINITEONLY-NEXT:  entry:
4949 // FINITEONLY-NEXT:    [[TMP0:%.*]] = tail call nnan ninf contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
4950 // FINITEONLY-NEXT:    ret double [[TMP0]]
4952 // APPROX-LABEL: @test_double_max(
4953 // APPROX-NEXT:  entry:
4954 // APPROX-NEXT:    [[TMP0:%.*]] = tail call contract noundef double @llvm.maxnum.f64(double [[X:%.*]], double [[Y:%.*]])
4955 // APPROX-NEXT:    ret double [[TMP0]]
4957 extern "C" __device__ double test_double_max(double x, double y) {
4958   return max(x, y);
4960 // CHECK-LABEL: @test_int_min(
4961 // CHECK-NEXT:  entry:
4962 // CHECK-NEXT:    [[COND_I:%.*]] = tail call noundef i32 @llvm.smin.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
4963 // CHECK-NEXT:    ret i32 [[COND_I]]
4965 extern "C" __device__ int test_int_min(int x, int y) {
4966   return min(x, y);
4969 // CHECK-LABEL: @test_int_max(
4970 // CHECK-NEXT:  entry:
4971 // CHECK-NEXT:    [[COND_I:%.*]] = tail call noundef i32 @llvm.smax.i32(i32 [[X:%.*]], i32 [[Y:%.*]])
4972 // CHECK-NEXT:    ret i32 [[COND_I]]
4974 extern "C" __device__ int test_int_max(int x, int y) {
4975   return max(x, y);