[llvm] [KnownFPClass] Combine fpext and fptrunc into a shared routine (PR #225188)

Eric Ross via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 21 13:47:23 PDT 2026


================
@@ -520,5 +520,86 @@ define double @ret_fpext_bf16_f64_nonorm_sub(bfloat nofpclass(norm sub) %arg0) {
   %ext = fpext bfloat %arg0 to double
   ret double %ext
 }
+
+define float @ret_fpext_bf16_f32__sub(bfloat nofpclass(nan inf zero norm) %arg0) {
+; CHECK-LABEL: define nofpclass(nan inf) float @ret_fpext_bf16_f32__sub
+; CHECK-SAME: (bfloat nofpclass(nan inf zero norm) [[ARG0:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
+; CHECK-NEXT:    ret float [[EXT]]
+;
+  %ext = fpext bfloat %arg0 to float
+  ret float %ext
+}
+
+define float @ret_fpext_bf16_f32__psub(bfloat nofpclass(nan inf zero nsub norm) %arg0) {
+; CHECK-LABEL: define nofpclass(nan inf nzero nsub nnorm) float @ret_fpext_bf16_f32__psub
+; CHECK-SAME: (bfloat nofpclass(nan inf zero nsub norm) [[ARG0:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
+; CHECK-NEXT:    ret float [[EXT]]
+;
+  %ext = fpext bfloat %arg0 to float
+  ret float %ext
+}
+
+define float @ret_fpext_bf16_f32__nsub(bfloat nofpclass(nan inf zero psub norm) %arg0) {
+; CHECK-LABEL: define nofpclass(nan inf pzero psub pnorm) float @ret_fpext_bf16_f32__nsub
+; CHECK-SAME: (bfloat nofpclass(nan inf zero psub norm) [[ARG0:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
+; CHECK-NEXT:    ret float [[EXT]]
+;
+  %ext = fpext bfloat %arg0 to float
+  ret float %ext
+}
+
+define float @ret_fpext_bf16_f32__norm(bfloat nofpclass(nan inf zero sub) %arg0) {
+; CHECK-LABEL: define nofpclass(nan) float @ret_fpext_bf16_f32__norm
+; CHECK-SAME: (bfloat nofpclass(nan inf zero sub) [[ARG0:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[EXT:%.*]] = fpext bfloat [[ARG0]] to float
+; CHECK-NEXT:    ret float [[EXT]]
+;
+  %ext = fpext bfloat %arg0 to float
+  ret float %ext
+}
+
+define fp128 @ret_fpext_f80_f128__sub(x86_fp80 nofpclass(nan inf zero norm) %arg0) {
----------------
ZERICO2005 wrote:

The test cases for `f32 = fpext(bf16)` and `f128 = fpext(f80)` should be fairly similar overall.

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


More information about the llvm-commits mailing list