[llvm] 47f3d90 - [X86] int-to-fp-demanded.ll - add f16/bf16 signbit extraction tests (#189570)

via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 31 02:53:37 PDT 2026


Author: Simon Pilgrim
Date: 2026-03-31T09:53:32Z
New Revision: 47f3d90dacb92ac2281ae259bd3be6584b386253

URL: https://github.com/llvm/llvm-project/commit/47f3d90dacb92ac2281ae259bd3be6584b386253
DIFF: https://github.com/llvm/llvm-project/commit/47f3d90dacb92ac2281ae259bd3be6584b386253.diff

LOG: [X86] int-to-fp-demanded.ll - add f16/bf16 signbit extraction tests (#189570)

Based off original test from #189129

Added: 
    

Modified: 
    llvm/test/CodeGen/X86/int-to-fp-demanded.ll

Removed: 
    


################################################################################
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