================
@@ -1620,12 +1645,68 @@ CIRGenFunction::emitX86BuiltinExpr(unsigned builtinID,
const CallExpr *expr) {
case X86::BI__builtin_ia32_fpclasspd128_mask:
case X86::BI__builtin_ia32_fpclasspd256_mask:
case X86::BI__builtin_ia32_fpclasspd512_mask:
+ cgm.errorNYI(expr->getSourceRange(),
+ std::string("unimplemented X86 builtin call: ") +
+ getContext().BuiltinInfo.getName(builtinID));
+ return mlir::Value{};
case X86::BI__builtin_ia32_vp2intersect_q_512:
case X86::BI__builtin_ia32_vp2intersect_q_256:
case X86::BI__builtin_ia32_vp2intersect_q_128:
case X86::BI__builtin_ia32_vp2intersect_d_512:
case X86::BI__builtin_ia32_vp2intersect_d_256:
- case X86::BI__builtin_ia32_vp2intersect_d_128:
+ case X86::BI__builtin_ia32_vp2intersect_d_128: {
+ unsigned numElts = cast<cir::VectorType>(ops[0].getType()).getSize();
+ mlir::Location loc = getLoc(expr->getExprLoc());
+ StringRef intrinsicName;
+
+ switch (builtinID) {
+ default:
+ llvm_unreachable("Unexpected builtin");
+ case X86::BI__builtin_ia32_vp2intersect_q_512:
+ intrinsicName = "x86.avx512.vp2intersect.q.512";
+ break;
+ case X86::BI__builtin_ia32_vp2intersect_q_256:
+ intrinsicName = "x86.avx512.vp2intersect.q.256";
+ break;
+ case X86::BI__builtin_ia32_vp2intersect_q_128:
+ intrinsicName = "x86.avx512.vp2intersect.q.128";
+ break;
+ case X86::BI__builtin_ia32_vp2intersect_d_512:
+ intrinsicName = "x86.avx512.vp2intersect.d.512";
+ break;
+ case X86::BI__builtin_ia32_vp2intersect_d_256:
+ intrinsicName = "x86.avx512.vp2intersect.d.256";
+ break;
+ case X86::BI__builtin_ia32_vp2intersect_d_128:
+ intrinsicName = "x86.avx512.vp2intersect.d.128";
+ break;
+ }
+
+ auto resVector = cir::VectorType::get(builder.getBoolTy(), numElts);
+ llvm::SmallVector<mlir::Type, 2> resultTypes = {resVector, resVector};
+
+ cir::RecordType resRecord =
+ cir::RecordType::get(&getMLIRContext(), resultTypes, false, false,
+ cir::RecordType::RecordKind::Struct);
+
+ llvm::SmallVector<mlir::Value, 2> callOps = {ops[0], ops[1]};
----------------
andykaylor wrote:
You don't need to create a local variable for this. Pass these operands
directly to `emitIntrinsicCallOp` using `mlir::ValueRange{op[0], op[1]}`
https://github.com/llvm/llvm-project/pull/172554
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits