AMDGPU: Force sign operand of f64 fcopysign to f32
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Thu, 26 Jan 2023 16:18:47 +0000 (12:18 -0400)
committerMatt Arsenault <arsenm2@gmail.com>
Sun, 5 Mar 2023 23:54:13 +0000 (19:54 -0400)
commit606a62ce27e602cfc12381dd9d1ec2d065aa075e
tree30f87b1a2e42137b9bcbc68dc8f36d5b4c75b170
parent7f8d844df5e91f8f689d0e9658e811d21bc4a605
AMDGPU: Force sign operand of f64 fcopysign to f32

The fcopysign DAG operation, unlike the IR one, allows
different types for the sign and magnitude. We can reduce
the bitwidth of the high operand since only the sign bit matters.

The default combine only introduces mixed fcopysign
operand types from fpext/fptrunc. We effectively do this
already during selection, but doing it earlier in the combiner
should expose new combine opportunities (e.g. the existing tests
now eliminate the load of the low half of the double). Unfortunately
this isn't enough to handle the case I'm interested in just yet.
llvm/lib/Target/AMDGPU/SIISelLowering.cpp
llvm/lib/Target/AMDGPU/SIISelLowering.h
llvm/test/CodeGen/AMDGPU/fnearbyint.ll