[llvm] [DAG] computeKnownFPClass - add ISD::EXTRACT_VECTOR_ELT handling (PR #190307)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 10 03:02:39 PDT 2026
================
@@ -22,6 +22,60 @@ define i8 @iszero_constant_v4f32() nounwind {
ret i8 %r
}
+define i1 @extract_idx0_const_vec_isnan() nounwind { ; vec = <QNaN, 2.0, +Inf, -Inf>, idx=0, isnan -> true
+; CHECK-LABEL: extract_idx0_const_vec_isnan:
+; CHECK: # %bb.0:
+; CHECK-NEXT: li a0, 1
+; CHECK-NEXT: ret
+ %elt = extractelement <4 x float> <float 0x7FF8000000000000, float 2.0, float 0x7FF0000000000000, float 0xFFF0000000000000>, i32 0
+ %res = call i1 @llvm.is.fpclass.f32(float %elt, i32 3) ; 0x3 = nan
+ ret i1 %res
+}
+
+define i1 @extract_idx1_const_vec_isnan() nounwind { ; vec = <QNaN, 2.0, +Inf, -Inf>, idx=1, isnan -> false
+; CHECK-LABEL: extract_idx1_const_vec_isnan:
+; CHECK: # %bb.0:
+; CHECK-NEXT: li a0, 0
+; CHECK-NEXT: ret
+ %elt = extractelement <4 x float> <float 0x7FF8000000000000, float 2.0, float 0x7FF0000000000000, float 0xFFF0000000000000>, i32 1
+ %res = call i1 @llvm.is.fpclass.f32(float %elt, i32 3) ; 0x3 = nan
+ ret i1 %res
+}
+
+define i1 @extract_oob_idx_const_vec_isnan() nounwind { ; vec = <QNaN, 2.0, +Inf, -Inf>, idx=6 (OOB), isnan -> poison
+; CHECK-LABEL: extract_oob_idx_const_vec_isnan:
+; CHECK: # %bb.0:
+; CHECK-NEXT: fclass.s a0, fa5
+; CHECK-NEXT: andi a0, a0, 768
+; CHECK-NEXT: snez a0, a0
+; CHECK-NEXT: ret
+ %elt = extractelement <4 x float> <float 0x7FF8000000000000, float 2.0, float 0x7FF0000000000000, float 0xFFF0000000000000>, i32 6
+ %res = call i1 @llvm.is.fpclass.f32(float %elt, i32 3) ; 0x3 = nan
+ ret i1 %res
+}
+
+define i1 @extract_fabs_unknown_idx_isneg(<4 x float> %a0, i32 %idx) nounwind {
+; CHECK-LABEL: extract_fabs_unknown_idx_isneg:
+; CHECK: # %bb.0:
+; CHECK-NEXT: li a0, 0
----------------
arsenm wrote:
This is still testing a value that is uniform across the vector. Better negative test would be a nonuniform value
https://github.com/llvm/llvm-project/pull/190307
More information about the llvm-commits
mailing list