When replacing certain AMDGPU library calls with constant data vectors, the existing implementation only handled single and double-precision floats. This change extends the functionality to also support half-precision floats. Additionally, it refactors the function responsible for generating constant float data vectors to improve readability and reduces code duplication. In tandem with this refactoring, the patch relaxes the check for constant data vectors to include any constant of vector type. This allows other constant vectors to be processed, such as those created from constant aggregate zeros (e.g. `<2 x float> zeroinitializer`). --------- Signed-off-by: Steffen Holst Larsen <sholstla@amd.com>
70 lines
2.1 KiB
LLVM
70 lines
2.1 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
|
|
; RUN: opt -S -mtriple=amdgcn-amd-amdhsa -passes=amdgpu-simplifylib %s | FileCheck %s
|
|
|
|
define float @test_tdo_scalar_f32_atanh() {
|
|
; CHECK-LABEL: define float @test_tdo_scalar_f32_atanh() {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: ret float 0.000000e+00
|
|
;
|
|
entry:
|
|
%c = call float @_Z5atanhf(float 0.000000e+00)
|
|
ret float %c
|
|
}
|
|
|
|
define <2 x float> @test_tdo_v2_f32_atanh() {
|
|
; CHECK-LABEL: define <2 x float> @test_tdo_v2_f32_atanh() {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: ret <2 x float> <float 0.000000e+00, float -0.000000e+00>
|
|
;
|
|
entry:
|
|
%c = call <2 x float> @_Z5atanhDv2_f(<2 x float> <float 0.000000e+00, float -0.000000e+00>)
|
|
ret <2 x float> %c
|
|
}
|
|
|
|
define half @test_tdo_scalar_f16_atanh() {
|
|
; CHECK-LABEL: define half @test_tdo_scalar_f16_atanh() {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: ret half 0xH0000
|
|
;
|
|
entry:
|
|
%c = call half @_Z5atanhDh(half 0.000000e+00)
|
|
ret half %c
|
|
}
|
|
|
|
define <2 x half> @test_tdo_v2_f16_atanh() {
|
|
; CHECK-LABEL: define <2 x half> @test_tdo_v2_f16_atanh() {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: ret <2 x half> <half 0xH0000, half 0xH8000>
|
|
;
|
|
entry:
|
|
%c = call <2 x half> @_Z5atanhDv2_Dh(<2 x half> <half 0.000000e+00, half -0.000000e+00>)
|
|
ret <2 x half> %c
|
|
}
|
|
|
|
define double @test_tdo_scalar_f64_atanh() {
|
|
; CHECK-LABEL: define double @test_tdo_scalar_f64_atanh() {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: ret double 0.000000e+00
|
|
;
|
|
entry:
|
|
%c = call double @_Z5atanhd(double 0.000000e+00)
|
|
ret double %c
|
|
}
|
|
|
|
define <2 x double> @test_tdo_v2_f64_atanh() {
|
|
; CHECK-LABEL: define <2 x double> @test_tdo_v2_f64_atanh() {
|
|
; CHECK-NEXT: [[ENTRY:.*:]]
|
|
; CHECK-NEXT: ret <2 x double> <double 0.000000e+00, double -0.000000e+00>
|
|
;
|
|
entry:
|
|
%c = call <2 x double> @_Z5atanhDv2_d(<2 x double> <double 0.000000e+00, double -0.000000e+00>)
|
|
ret <2 x double> %c
|
|
}
|
|
|
|
declare float @_Z5atanhf(float)
|
|
declare <2 x float> @_Z5atanhDv2_f(<2 x float>)
|
|
declare half @_Z5atanhDh(half)
|
|
declare <2 x half> @_Z5atanhDv2_Dh(<2 x half>)
|
|
declare double @_Z5atanhd(double)
|
|
declare <2 x double> @_Z5atanhDv2_d(<2 x double>)
|