================
@@ -465,3 +465,127 @@ __mmask64 test_kmov_q(__mmask64 A) {
return __builtin_ia32_kmovq(A);
}
+
+unsigned char test_kortestc_mask32_u8(__mmask32 __A, __mmask32 __B) {
+ // CIR-LABEL: _kortestc_mask32_u8
+ // CIR: [[ALL_ONES:%.*]] = cir.const #cir.int<4294967295> : !u32i
+ // CIR: [[LHS:%.*]] = cir.cast bitcast {{.*}} : !u32i -> !cir.vector<32 x
!cir.int<u, 1>>
+ // CIR: [[RHS:%.*]] = cir.cast bitcast {{.*}} : !u32i -> !cir.vector<32 x
!cir.int<u, 1>>
+ // CIR: [[OR:%.*]] = cir.binop(or, [[LHS]], [[RHS]]) : !cir.vector<32 x
!cir.int<u, 1>>
+ // CIR: [[OR_INT:%.*]] = cir.cast bitcast [[OR]] : !cir.vector<32 x
!cir.int<u, 1>> -> !u32i
+ // CIR: [[CMP:%.*]] = cir.cmp(eq, [[OR_INT]], [[ALL_ONES]]) : !u32i,
!cir.bool
+ // CIR: [[B2I:%.*]] = cir.cast bool_to_int [[CMP]] : !cir.bool -> !s32i
+ // CIR: cir.cast integral [[B2I]] : !s32i -> !u8i
+
+ // LLVM-LABEL: _kortestc_mask32_u8
+ // LLVM: [[LHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
+ // LLVM: [[RHS:%.*]] = bitcast i32 %{{.*}} to <32 x i1>
+ // LLVM: [[OR:%.*]] = or <32 x i1> [[LHS]], [[RHS]]
+ // LLVM: [[CAST:%.*]] = bitcast <32 x i1> [[OR]] to i32
+ // LLVM: [[CMP:%.*]] = icmp eq i32 [[CAST]], -1
+ // LLVM: [[ZEXT:%.*]] = zext i1 [[CMP]] to i32
+ // LLVM: trunc i32 [[ZEXT]] to i8
+
+ // OGCG-LABEL: _kortestc_mask32_u8
+ // OGCG: bitcast i32 %{{.*}} to <32 x i1>
+ // OGCG: bitcast i32 %{{.*}} to <32 x i1>
+ // OGCG: or <32 x i1> {{.*}}, {{.*}}
+ // OGCG: bitcast <32 x i1> {{.*}} to i32
+ // OGCG: icmp eq i32 {{.*}}, -1
+ // OGCG: zext i1 {{.*}} to i32
+ // OGCG: trunc i32 {{.*}} to i8
----------------
GeneraluseAI wrote:
Sure, just updated
https://github.com/llvm/llvm-project/pull/169985
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits