================
@@ -546,11 +568,51 @@ mlir::Value CIRGenFunction::emitX86BuiltinExpr(unsigned
builtinID,
case X86::BI__builtin_ia32_kshiftliqi:
case X86::BI__builtin_ia32_kshiftlihi:
case X86::BI__builtin_ia32_kshiftlisi:
- case X86::BI__builtin_ia32_kshiftlidi:
+ case X86::BI__builtin_ia32_kshiftlidi: {
+ unsigned shiftVal =
+ ops[1].getDefiningOp<cir::ConstantOp>().getIntValue().getZExtValue() &
+ 0xff;
+ auto numElts = cast<cir::IntType>(ops[0].getType()).getWidth();
+
+ if (shiftVal >= numElts)
+ return builder.getNullValue(ops[0].getType(), getLoc(e->getExprLoc()));
+
+ mlir::Value in = getMaskVecValue(*this, e, ops[0], numElts);
+
+ SmallVector<int64_t, 64> indices;
+ for (auto i : llvm::seq<unsigned>(0, numElts))
+ indices.push_back(numElts + i - shiftVal);
+
+ mlir::Value zero =
+ builder.getNullValue(in.getType(), getLoc(e->getExprLoc()));
+ mlir::Value sv =
+ builder.createVecShuffle(getLoc(e->getExprLoc()), zero, in, indices);
+ return builder.createBitcast(sv, ops[0].getType());
+ }
case X86::BI__builtin_ia32_kshiftriqi:
case X86::BI__builtin_ia32_kshiftrihi:
case X86::BI__builtin_ia32_kshiftrisi:
- case X86::BI__builtin_ia32_kshiftridi:
+ case X86::BI__builtin_ia32_kshiftridi: {
+ unsigned shiftVal =
+ ops[1].getDefiningOp<cir::ConstantOp>().getIntValue().getZExtValue() &
+ 0xff;
+ auto numElts = cast<cir::IntType>(ops[0].getType()).getWidth();
----------------
bcardosolopes wrote:
@ahmednoursphinx thanks for reviewing this PR but your suggestion goes against
the code style we use for ClangIR:
https://llvm.github.io/clangir/GettingStarted/coding-guideline.html, we use
camelBack. The actual name change is fine, but it should be `numElems` if
anything.
https://github.com/llvm/llvm-project/pull/168591
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits