[llvm] [Analysis] Adding convert_from_arbitrary_fp support in computeKnownFPClass. (PR #208585)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 10 09:12:47 PDT 2026


================
@@ -0,0 +1,32 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt -S -passes=instcombine < %s | FileCheck %s
+
+; Test 1: Source format "Float4E2M1FN" structurally does not support NaN or Infinity.
+; InstCombine should completely optimize away the is.fpclass checks to 'false'.
+define i1 @test_no_nan_no_inf(i8 %bits) {
+; CHECK-LABEL: @test_no_nan_no_inf(
+; CHECK-NEXT:    ret i1 false
+;
+  ; Convert from a format that has no NaN and no Infinity
+  %fp = call float @llvm.convert.from.arbitrary.fp(i8 %bits, metadata !"Float4E2M1FN")
+  
+  ; Query if the result is either a NaN or an Infinity (fcNaN | fcInf = 3 | 512 = 515)
+  %is.nan.or.inf = call i1 @llvm.is.fpclass.f32(float %fp, i32 515)
+  ret i1 %is.nan.or.inf
+}
+
+; Test 2: Fast Math Flags (nnan) should also be respected and clear fcNaN.
+define i1 @test_fmf_nnan(i8 %bits) {
+; CHECK-LABEL: @test_fmf_nnan(
+; CHECK-NEXT:    ret i1 false
+;
+  ; Even if the format supported NaN, the 'nnan' flag forces fcNaN to clear
+  %fp = call nnan float @llvm.convert.from.arbitrary.fp(i8 %bits, metadata !"Float8E5M2")
+  
+  ; Query if the result is a NaN (fcNaN = 3)
+  %is.nan = call i1 @llvm.is.fpclass.f32(float %fp, i32 3)
+  ret i1 %is.nan
+}
+
+declare float @llvm.convert.from.arbitrary.fp(i8, metadata)
+declare i1 @llvm.is.fpclass.f32(float, i32)
----------------
arsenm wrote:

```suggestion
declare i1 @llvm.is.fpclass.f32(float, i32)

```

Newine error

https://github.com/llvm/llvm-project/pull/208585


More information about the llvm-commits mailing list