================ @@ -0,0 +1,65 @@ +; Test copysign intrinsics involving half. +; +; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s + +declare half @llvm.copysign.f16(half, half) +declare float @llvm.copysign.f32(float, float) +declare double @llvm.copysign.f64(double, double) + +; Test f16 copies. +define half @f0(half %a, half %b) { +; CHECK-LABEL: f0: +; CHECK: brasl %r14, __extendhfsf2@PLT +; CHECK: brasl %r14, __extendhfsf2@PLT +; CHECK: cpsdr %f0, %f9, %f0 +; CHECK: brasl %r14, __truncsfhf2@PLT +; CHECK: br %r14 + %res = call half @llvm.copysign.f16(half %a, half %b) ---------------- tgross35 wrote:
(Nonblocker) a few other architectures use an asm lowering to avoid the calls here, it's just `(a & !MASK) | (Y & MASK)` with `MASK = 1 << 15`. https://github.com/llvm/llvm-project/pull/109164 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits