[clang] [CIR][X86] Add support for kunpck builtins (PR #168757)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 19 16:03:00 PST 2025
================
@@ -33,6 +33,28 @@ static mlir::Value emitIntrinsicCallOp(CIRGenFunction &cgf, const CallExpr *e,
.getResult();
}
+static mlir::Value getMaskVecValue(CIRGenBuilderTy &builder, mlir::Value mask,
+ unsigned numElems) {
+ auto maskIntType = mlir::cast<cir::IntType>(mask.getType());
+ unsigned maskWidth = maskIntType.getWidth();
+
+ // Create a vector of bool type with maskWidth elements
+ auto maskVecType =
+ cir::VectorType::get(builder.getContext(),
+ cir::BoolType::get(builder.getContext()), maskWidth);
+ mlir::Value maskVec = builder.createBitcast(mask, maskVecType);
+
+ // If we have less than 8 elements, then the starting mask was an i8 and
+ // we need to extract down to the right number of elements.
+ if (numElems < 8) {
+ llvm::SmallVector<int64_t, 4> indices;
+ for (unsigned i = 0; i != numElems; ++i)
+ indices.push_back(i);
----------------
andykaylor wrote:
```suggestion
SmallVector<mlir::Attribute, 4> indices;
mlir::Type i32Ty = getSInt32Ty();
for (auto i : llvm::seq<unsigned>(0, numElems))
indices.push_back(cir::IntAttr::get(i32Ty, i);
```
If we don't do this here, `createVecShuffle` will loop through the vector again to do this.
https://github.com/llvm/llvm-project/pull/168757
More information about the cfe-commits
mailing list