================
@@ -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

Reply via email to