[llvm] [X86] int-to-fp-demanded.ll - add f16/bf16 signbit extraction tests (PR #189570)
Simon Pilgrim via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 31 02:25:03 PDT 2026
https://github.com/RKSimon created https://github.com/llvm/llvm-project/pull/189570
Based off original test from #189129
>From e27eaad0ed50c8ac40da401c3a0186556dfae49e Mon Sep 17 00:00:00 2001
From: Simon Pilgrim <llvm-dev at redking.me.uk>
Date: Tue, 31 Mar 2026 10:23:56 +0100
Subject: [PATCH] [X86] int-to-fp-demanded.ll - add f16/bf16 signbit extraction
tests
Based off original test from #189129
---
llvm/test/CodeGen/X86/int-to-fp-demanded.ll | 56 +++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/llvm/test/CodeGen/X86/int-to-fp-demanded.ll b/llvm/test/CodeGen/X86/int-to-fp-demanded.ll
index cdde03fb0534b..54e4db33e5f22 100644
--- a/llvm/test/CodeGen/X86/int-to-fp-demanded.ll
+++ b/llvm/test/CodeGen/X86/int-to-fp-demanded.ll
@@ -380,3 +380,59 @@ define i32 @uitofp_multiuse_okay(i32 %i_in) nounwind {
%r = and i32 %i, 2147483648
ret i32 %r
}
+
+define i16 @f16_bitcast_signbit(float %a) nounwind {
+; X86-LABEL: f16_bitcast_signbit:
+; X86: # %bb.0:
+; X86-NEXT: pushl %eax
+; X86-NEXT: flds {{[0-9]+}}(%esp)
+; X86-NEXT: fstps (%esp)
+; X86-NEXT: calll __truncsfhf2
+; X86-NEXT: # kill: def $ax killed $ax def $eax
+; X86-NEXT: andl $32768, %eax # imm = 0x8000
+; X86-NEXT: # kill: def $ax killed $ax killed $eax
+; X86-NEXT: popl %ecx
+; X86-NEXT: retl
+;
+; X64-LABEL: f16_bitcast_signbit:
+; X64: # %bb.0:
+; X64-NEXT: pushq %rax
+; X64-NEXT: callq __truncsfhf2 at PLT
+; X64-NEXT: pextrw $0, %xmm0, %eax
+; X64-NEXT: andl $32768, %eax # imm = 0x8000
+; X64-NEXT: # kill: def $ax killed $ax killed $eax
+; X64-NEXT: popq %rcx
+; X64-NEXT: retq
+ %bf = fptrunc float %a to half
+ %i = bitcast half %bf to i16
+ %r = and i16 %i, -32768
+ ret i16 %r
+}
+
+define i16 @bf16_bitcast_signbit(float %a) nounwind {
+; X86-LABEL: bf16_bitcast_signbit:
+; X86: # %bb.0:
+; X86-NEXT: pushl %eax
+; X86-NEXT: flds {{[0-9]+}}(%esp)
+; X86-NEXT: fstps (%esp)
+; X86-NEXT: calll __truncsfbf2
+; X86-NEXT: # kill: def $ax killed $ax def $eax
+; X86-NEXT: andl $32768, %eax # imm = 0x8000
+; X86-NEXT: # kill: def $ax killed $ax killed $eax
+; X86-NEXT: popl %ecx
+; X86-NEXT: retl
+;
+; X64-LABEL: bf16_bitcast_signbit:
+; X64: # %bb.0:
+; X64-NEXT: pushq %rax
+; X64-NEXT: callq __truncsfbf2 at PLT
+; X64-NEXT: pextrw $0, %xmm0, %eax
+; X64-NEXT: andl $32768, %eax # imm = 0x8000
+; X64-NEXT: # kill: def $ax killed $ax killed $eax
+; X64-NEXT: popq %rcx
+; X64-NEXT: retq
+ %bf = fptrunc float %a to bfloat
+ %i = bitcast bfloat %bf to i16
+ %r = and i16 %i, -32768
+ ret i16 %r
+}
More information about the llvm-commits
mailing list