Issue 98126
Summary PowerPC `fp128` -> `half` uses `__trunctfhf2` but should be `__trunckfhf2`
Labels new issue
Assignees
Reporter tgross35
    ```llvm
define half @trunckfhf(fp128 %a) unnamed_addr {
start:
  %_0 = fptrunc fp128 %a to half
  ret half %_0
}
```

Output on `powerpc64-unknown-linux-gnu`:

```asm
trunckfhf: # @trunckfhf
        .quad   .Lfunc_begin0
        .quad .TOC.@tocbase
        .quad   0
.Lfunc_begin0:
        mflr 0
 stdu 1, -112(1)
        std 0, 128(1)
        bl __trunctfhf2
 nop
        clrldi  3, 3, 48
        bl __gnu_h2f_ieee
 nop
        addi 1, 1, 112
        ld 0, 16(1)
        mtlr 0
 blr
        .long   0
        .quad   0
```

Note that this emits `__trunctfhf2`. According to https://gcc.gnu.org/wiki/Ieee128PowerPC (second table in section 2.2), `tf` is for whatever `long double` is in C, which on PPC is usually IBM double double, but `kf` is always for IEEE `binary128`. So it seems like this should instead emit a symbol named `__trunckfhf2`.

This would be consistent with other fptrunc operations for `fp128`, which lower to `kf` symbols (`__trunckfsf2`, `__trunckfdf2`).

There is more discussion at this thread https://github.com/llvm/llvm-project/issues/92866. Neither GCC nor LLVM provide this symbol yet in libgcc/compiler-rt, but I don't think that should block correcting the symbol name.

Tested at compiler explorer using `19.0.0git`. Link: https://llvm.godbolt.org/z/7MosczYcr
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to