Skip to content

Commit 85232b0

Browse files
committed
HIP: Directly call isfinite builtins
1 parent c26fe19 commit 85232b0

File tree

2 files changed

+11
-17
lines changed

2 files changed

+11
-17
lines changed

clang/lib/Headers/__clang_hip_math.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ __DEVICE__
268268
int ilogbf(float __x) { return __ocml_ilogb_f32(__x); }
269269

270270
__DEVICE__
271-
__RETURN_TYPE __finitef(float __x) { return __ocml_isfinite_f32(__x); }
271+
__RETURN_TYPE __finitef(float __x) { return __builtin_isfinite(__x); }
272272

273273
__DEVICE__
274274
__RETURN_TYPE __isinff(float __x) { return __builtin_isinf(__x); }
@@ -817,7 +817,7 @@ __DEVICE__
817817
int ilogb(double __x) { return __ocml_ilogb_f64(__x); }
818818

819819
__DEVICE__
820-
__RETURN_TYPE __finite(double __x) { return __ocml_isfinite_f64(__x); }
820+
__RETURN_TYPE __finite(double __x) { return __builtin_isfinite(__x); }
821821

822822
__DEVICE__
823823
__RETURN_TYPE __isinf(double __x) { return __builtin_isinf(__x); }

clang/test/Headers/__clang_hip_math.hip

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,43 +1155,37 @@ extern "C" __device__ int test_ilogb(double x) {
11551155

11561156
// DEFAULT-LABEL: @test___finitef(
11571157
// DEFAULT-NEXT: entry:
1158-
// DEFAULT-NEXT: [[CALL_I:%.*]] = tail call i32 @__ocml_isfinite_f32(float noundef [[X:%.*]]) #[[ATTR14]]
1159-
// DEFAULT-NEXT: [[TOBOOL_I:%.*]] = icmp ne i32 [[CALL_I]], 0
1160-
// DEFAULT-NEXT: [[CONV:%.*]] = zext i1 [[TOBOOL_I]] to i32
1158+
// DEFAULT-NEXT: [[TMP0:%.*]] = tail call contract float @llvm.fabs.f32(float [[X:%.*]]) #[[ATTR17:[0-9]+]]
1159+
// DEFAULT-NEXT: [[CMPINF_I:%.*]] = fcmp contract one float [[TMP0]], 0x7FF0000000000000
1160+
// DEFAULT-NEXT: [[CONV:%.*]] = zext i1 [[CMPINF_I]] to i32
11611161
// DEFAULT-NEXT: ret i32 [[CONV]]
11621162
//
11631163
// FINITEONLY-LABEL: @test___finitef(
11641164
// FINITEONLY-NEXT: entry:
1165-
// FINITEONLY-NEXT: [[CALL_I:%.*]] = tail call i32 @__ocml_isfinite_f32(float noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
1166-
// FINITEONLY-NEXT: [[TOBOOL_I:%.*]] = icmp ne i32 [[CALL_I]], 0
1167-
// FINITEONLY-NEXT: [[CONV:%.*]] = zext i1 [[TOBOOL_I]] to i32
1168-
// FINITEONLY-NEXT: ret i32 [[CONV]]
1165+
// FINITEONLY-NEXT: ret i32 1
11691166
//
11701167
extern "C" __device__ BOOL_TYPE test___finitef(float x) {
11711168
return __finitef(x);
11721169
}
11731170

11741171
// DEFAULT-LABEL: @test___finite(
11751172
// DEFAULT-NEXT: entry:
1176-
// DEFAULT-NEXT: [[CALL_I:%.*]] = tail call i32 @__ocml_isfinite_f64(double noundef [[X:%.*]]) #[[ATTR14]]
1177-
// DEFAULT-NEXT: [[TOBOOL_I:%.*]] = icmp ne i32 [[CALL_I]], 0
1178-
// DEFAULT-NEXT: [[CONV:%.*]] = zext i1 [[TOBOOL_I]] to i32
1173+
// DEFAULT-NEXT: [[TMP0:%.*]] = tail call contract double @llvm.fabs.f64(double [[X:%.*]]) #[[ATTR17]]
1174+
// DEFAULT-NEXT: [[CMPINF_I:%.*]] = fcmp contract one double [[TMP0]], 0x7FF0000000000000
1175+
// DEFAULT-NEXT: [[CONV:%.*]] = zext i1 [[CMPINF_I]] to i32
11791176
// DEFAULT-NEXT: ret i32 [[CONV]]
11801177
//
11811178
// FINITEONLY-LABEL: @test___finite(
11821179
// FINITEONLY-NEXT: entry:
1183-
// FINITEONLY-NEXT: [[CALL_I:%.*]] = tail call i32 @__ocml_isfinite_f64(double noundef nofpclass(nan inf) [[X:%.*]]) #[[ATTR14]]
1184-
// FINITEONLY-NEXT: [[TOBOOL_I:%.*]] = icmp ne i32 [[CALL_I]], 0
1185-
// FINITEONLY-NEXT: [[CONV:%.*]] = zext i1 [[TOBOOL_I]] to i32
1186-
// FINITEONLY-NEXT: ret i32 [[CONV]]
1180+
// FINITEONLY-NEXT: ret i32 1
11871181
//
11881182
extern "C" __device__ BOOL_TYPE test___finite(double x) {
11891183
return __finite(x);
11901184
}
11911185

11921186
// DEFAULT-LABEL: @test___isinff(
11931187
// DEFAULT-NEXT: entry:
1194-
// DEFAULT-NEXT: [[TMP0:%.*]] = tail call contract float @llvm.fabs.f32(float [[X:%.*]]) #[[ATTR17:[0-9]+]]
1188+
// DEFAULT-NEXT: [[TMP0:%.*]] = tail call contract float @llvm.fabs.f32(float [[X:%.*]]) #[[ATTR17]]
11951189
// DEFAULT-NEXT: [[CMPINF_I:%.*]] = fcmp contract oeq float [[TMP0]], 0x7FF0000000000000
11961190
// DEFAULT-NEXT: [[CONV:%.*]] = zext i1 [[CMPINF_I]] to i32
11971191
// DEFAULT-NEXT: ret i32 [[CONV]]

0 commit comments

Comments
 (0)