[llvm] [Analysis] Adding convert_from_arbitrary_fp support in computeKnownFPClass. (PR #208585)
Chirag Patel via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 10 18:51:50 PDT 2026
================
@@ -0,0 +1,41 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
+; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
+
+; Test 1: Float4E2M1FN has absolutely no NaN or Inf support.
+; The Attributor should deduce and attach nofpclass(nan inf) to the function return.
+define float @ret_arbitrary_fp_no_nan_no_inf(i8 %bits) {
+; CHECK-LABEL: define nofpclass(nan inf) float @ret_arbitrary_fp_no_nan_no_inf
+; CHECK-SAME: (i8 [[BITS:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT: %fp = call nofpclass(nan inf) float @llvm.convert.from.arbitrary.fp.f32.i8(i8 [[BITS]], metadata !"Float4E2M1FN") #[[ATTR2:[0-9]+]]
+; CHECK-NEXT: ret float %fp
+;
+ %fp = call float @llvm.convert.from.arbitrary.fp(i8 %bits, metadata !"Float4E2M1FN")
+ ret float %fp
+}
+
+; Test 2: Float8E4M3FN supports NaNs but lacks Infinities (NaNOnly).
+; The Attributor should safely deduce and attach nofpclass(inf) to the function return.
+define float @ret_arbitrary_fp_nan_only(i8 %bits) {
+; CHECK-LABEL: define nofpclass(inf) float @ret_arbitrary_fp_nan_only
+; CHECK-SAME: (i8 [[BITS:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT: %fp = call nofpclass(inf) float @llvm.convert.from.arbitrary.fp.f32.i8(i8 [[BITS]], metadata !"Float8E4M3FN") #[[ATTR2:[0-9]+]]
+; CHECK-NEXT: ret float %fp
+;
+ %fp = call float @llvm.convert.from.arbitrary.fp(i8 %bits, metadata !"Float8E4M3FN")
+ ret float %fp
+}
+
+; Test 3: Vector variation checking that your getScalarType() unpacks cleanly.
+; The Attributor should successfully attach nofpclass(nan inf) to the returning vector topology.
+define <4 x float> @ret_arbitrary_fp_vector(<4 x i8> %bits) {
+; CHECK-LABEL: define nofpclass(nan inf) <4 x float> @ret_arbitrary_fp_vector
+; CHECK-SAME: (<4 x i8> [[BITS:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT: %fp = call nofpclass(nan inf) <4 x float> @llvm.convert.from.arbitrary.fp.v4f32.v4i8(<4 x i8> [[BITS]], metadata !"Float4E2M1FN") #[[ATTR2:[0-9]+]]
+; CHECK-NEXT: ret <4 x float> %fp
+;
+ %fp = call <4 x float> @llvm.convert.from.arbitrary.fp.v4f32(<4 x i8> %bits, metadata !"Float4E2M1FN")
+ ret <4 x float> %fp
+}
+
----------------
ChiragPatel8 wrote:
Seems like lookup entries are not there while other things are present.
https://github.com/llvm/llvm-project/pull/208585
More information about the llvm-commits
mailing list