================
@@ -85,6 +85,71 @@ static mlir::Value getMaskVecValue(CIRGenBuilderTy &builder, 
mlir::Location loc,
   return maskVec;
 }
 
+static mlir::Value getBoolMaskVecValue(CIRGenBuilderTy &builder,
+                                       mlir::Location loc, mlir::Value mask,
+                                       unsigned numElems) {
+
+  cir::BoolType boolTy = builder.getBoolTy();
+  auto maskTy = cir::VectorType::get(
+      boolTy, cast<cir::IntType>(mask.getType()).getWidth());
+  mlir::Value maskVec = builder.createBitcast(mask, maskTy);
+
+  if (numElems < 8) {
+    SmallVector<mlir::Attribute, 4> indices;
+    mlir::Type i32Ty = builder.getSInt32Ty();
+    for (auto i : llvm::seq<unsigned>(0, numElems))
+      indices.push_back(cir::IntAttr::get(i32Ty, i));
+
+    maskVec = builder.createVecShuffle(loc, maskVec, maskVec, indices);
+  }
+  return maskVec;
+}
+
+// Helper function mirroring OG's bool Constant::isAllOnesValue()
+static bool isAllOnesValue(mlir::Value value) {
+  auto constOp = 
mlir::dyn_cast_or_null<cir::ConstantOp>(value.getDefiningOp());
+  if (!constOp)
+    return false;
+
+  // Check for -1 integers
+  if (auto intAttr = constOp.getValueAttr<cir::IntAttr>()) {
+    return intAttr.getValue().isAllOnes();
+  }
+
+  // Check for FP which are bitcasted from -1 integers
+  if (auto fpAttr = constOp.getValueAttr<cir::FPAttr>()) {
+    return fpAttr.getValue().bitcastToAPInt().isAllOnes();
+  }
+
+  // Check for constant vectors with splat values
+  if (cir::VectorType v = dyn_cast<cir::VectorType>(constOp.getType())) {
+    if (auto vecAttr = constOp.getValueAttr<mlir::DenseElementsAttr>()) {
+      if (vecAttr.isSplat()) {
+        auto splatAttr = vecAttr.getSplatValue<mlir::Attribute>();
+        if (auto splatInt = mlir::dyn_cast<cir::IntAttr>(splatAttr)) {
+          return splatInt.getValue().isAllOnes();
+        }
+      }
+    }
+  }
+
+  return false;
+}
----------------
xlauko wrote:

add this as method of `ConstatOp`

https://github.com/llvm/llvm-project/pull/170427
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to