llvm-project/llvm/test/CodeGen/AMDGPU/amdgpu-simplify-libcall-tdo-sinh.ll
Steffen Larsen 5b156a4372
[AMDGPU] Add half vector support for table-driven libcall optimization (#178638)
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>
2026-03-04 08:42:44 +01:00

70 lines
2.0 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_sinh() {
; CHECK-LABEL: define float @test_tdo_scalar_f32_sinh() {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: ret float 0.000000e+00
;
entry:
%c = call float @_Z4sinhf(float 0.000000e+00)
ret float %c
}
define <2 x float> @test_tdo_v2_f32_sinh() {
; CHECK-LABEL: define <2 x float> @test_tdo_v2_f32_sinh() {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: ret <2 x float> zeroinitializer
;
entry:
%c = call <2 x float> @_Z4sinhDv2_f(<2 x float> zeroinitializer)
ret <2 x float> %c
}
define half @test_tdo_scalar_f16_sinh() {
; CHECK-LABEL: define half @test_tdo_scalar_f16_sinh() {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: ret half 0xH0000
;
entry:
%c = call half @_Z4sinhDh(half 0.000000e+00)
ret half %c
}
define <2 x half> @test_tdo_v2_f16_sinh() {
; CHECK-LABEL: define <2 x half> @test_tdo_v2_f16_sinh() {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: ret <2 x half> zeroinitializer
;
entry:
%c = call <2 x half> @_Z4sinhDv2_Dh(<2 x half> zeroinitializer)
ret <2 x half> %c
}
define double @test_tdo_scalar_f64_sinh() {
; CHECK-LABEL: define double @test_tdo_scalar_f64_sinh() {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: ret double 0.000000e+00
;
entry:
%c = call double @_Z4sinhd(double 0.000000e+00)
ret double %c
}
define <2 x double> @test_tdo_v2_f64_sinh() {
; CHECK-LABEL: define <2 x double> @test_tdo_v2_f64_sinh() {
; CHECK-NEXT: [[ENTRY:.*:]]
; CHECK-NEXT: ret <2 x double> zeroinitializer
;
entry:
%c = call <2 x double> @_Z4sinhDv2_d(<2 x double> zeroinitializer)
ret <2 x double> %c
}
declare float @_Z4sinhf(float)
declare <2 x float> @_Z4sinhDv2_f(<2 x float>)
declare half @_Z4sinhDh(half)
declare <2 x half> @_Z4sinhDv2_Dh(<2 x half>)
declare double @_Z4sinhd(double)
declare <2 x double> @_Z4sinhDv2_d(<2 x double>)