[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