Skip to content

Commit bf8e92c

Browse files
committed
HIP: Use frexp builtins in math headers
1 parent bdbbdd8 commit bf8e92c

File tree

2 files changed

+16
-30
lines changed

2 files changed

+16
-30
lines changed

clang/lib/Headers/__clang_hip_math.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,7 @@ float fmodf(float __x, float __y) { return __ocml_fmod_f32(__x, __y); }
257257

258258
__DEVICE__
259259
float frexpf(float __x, int *__nptr) {
260-
*__nptr = __builtin_amdgcn_frexp_expf(__x);
261-
return __builtin_amdgcn_frexp_mantf(__x);
260+
return __builtin_frexpf(__x, __nptr);
262261
}
263262

264263
__DEVICE__
@@ -806,8 +805,7 @@ double fmod(double __x, double __y) { return __ocml_fmod_f64(__x, __y); }
806805

807806
__DEVICE__
808807
double frexp(double __x, int *__nptr) {
809-
*__nptr = __builtin_amdgcn_frexp_exp(__x);
810-
return __builtin_amdgcn_frexp_mant(__x);
808+
return __builtin_frexp(__x, __nptr);
811809
}
812810

813811
__DEVICE__

clang/test/Headers/__clang_hip_math.hip

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,37 +1061,25 @@ extern "C" __device__ double test_fmod(double x, double y) {
10611061
return fmod(x, y);
10621062
}
10631063

1064-
// DEFAULT-LABEL: @test_frexpf(
1065-
// DEFAULT-NEXT: entry:
1066-
// DEFAULT-NEXT: [[TMP0:%.*]] = tail call i32 @llvm.amdgcn.frexp.exp.i32.f32(float [[X:%.*]])
1067-
// DEFAULT-NEXT: store i32 [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12:![0-9]+]]
1068-
// DEFAULT-NEXT: [[TMP1:%.*]] = tail call contract float @llvm.amdgcn.frexp.mant.f32(float [[X]])
1069-
// DEFAULT-NEXT: ret float [[TMP1]]
1070-
//
1071-
// FINITEONLY-LABEL: @test_frexpf(
1072-
// FINITEONLY-NEXT: entry:
1073-
// FINITEONLY-NEXT: [[TMP0:%.*]] = tail call i32 @llvm.amdgcn.frexp.exp.i32.f32(float [[X:%.*]])
1074-
// FINITEONLY-NEXT: store i32 [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12:![0-9]+]]
1075-
// FINITEONLY-NEXT: [[TMP1:%.*]] = tail call nnan ninf contract float @llvm.amdgcn.frexp.mant.f32(float [[X]])
1076-
// FINITEONLY-NEXT: ret float [[TMP1]]
1064+
// CHECK-LABEL: @test_frexpf(
1065+
// CHECK-NEXT: entry:
1066+
// CHECK-NEXT: [[TMP0:%.*]] = tail call { float, i32 } @llvm.frexp.f32.i32(float [[X:%.*]])
1067+
// CHECK-NEXT: [[TMP1:%.*]] = extractvalue { float, i32 } [[TMP0]], 1
1068+
// CHECK-NEXT: store i32 [[TMP1]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12:![0-9]+]]
1069+
// CHECK-NEXT: [[TMP2:%.*]] = extractvalue { float, i32 } [[TMP0]], 0
1070+
// CHECK-NEXT: ret float [[TMP2]]
10771071
//
10781072
extern "C" __device__ float test_frexpf(float x, int* y) {
10791073
return frexpf(x, y);
10801074
}
10811075

1082-
// DEFAULT-LABEL: @test_frexp(
1083-
// DEFAULT-NEXT: entry:
1084-
// DEFAULT-NEXT: [[TMP0:%.*]] = tail call i32 @llvm.amdgcn.frexp.exp.i32.f64(double [[X:%.*]])
1085-
// DEFAULT-NEXT: store i32 [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12]]
1086-
// DEFAULT-NEXT: [[TMP1:%.*]] = tail call contract double @llvm.amdgcn.frexp.mant.f64(double [[X]])
1087-
// DEFAULT-NEXT: ret double [[TMP1]]
1088-
//
1089-
// FINITEONLY-LABEL: @test_frexp(
1090-
// FINITEONLY-NEXT: entry:
1091-
// FINITEONLY-NEXT: [[TMP0:%.*]] = tail call i32 @llvm.amdgcn.frexp.exp.i32.f64(double [[X:%.*]])
1092-
// FINITEONLY-NEXT: store i32 [[TMP0]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12]]
1093-
// FINITEONLY-NEXT: [[TMP1:%.*]] = tail call nnan ninf contract double @llvm.amdgcn.frexp.mant.f64(double [[X]])
1094-
// FINITEONLY-NEXT: ret double [[TMP1]]
1076+
// CHECK-LABEL: @test_frexp(
1077+
// CHECK-NEXT: entry:
1078+
// CHECK-NEXT: [[TMP0:%.*]] = tail call { double, i32 } @llvm.frexp.f64.i32(double [[X:%.*]])
1079+
// CHECK-NEXT: [[TMP1:%.*]] = extractvalue { double, i32 } [[TMP0]], 1
1080+
// CHECK-NEXT: store i32 [[TMP1]], ptr [[Y:%.*]], align 4, !tbaa [[TBAA12]]
1081+
// CHECK-NEXT: [[TMP2:%.*]] = extractvalue { double, i32 } [[TMP0]], 0
1082+
// CHECK-NEXT: ret double [[TMP2]]
10951083
//
10961084
extern "C" __device__ double test_frexp(double x, int* y) {
10971085
return frexp(x, y);

0 commit comments

Comments
 (0)