[clang] [CIR] Upstream CIR codegen for `lzcnt` and `tzcnt` x86 builtins (PR #168479)
Haocong Lu via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 18 19:52:13 PST 2025
================
@@ -86,13 +86,30 @@ mlir::Value CIRGenFunction::emitX86BuiltinExpr(unsigned builtinID,
return emitIntrinsicCallOp(*this, e, "x86.sse.sfence", voidTy);
case X86::BI_mm_prefetch:
case X86::BI__rdtsc:
- case X86::BI__builtin_ia32_rdtscp:
+ case X86::BI__builtin_ia32_rdtscp: {
+ cgm.errorNYI(e->getSourceRange(),
+ std::string("unimplemented X86 builtin call: ") +
+ getContext().BuiltinInfo.getName(builtinID));
+ return {};
+ }
case X86::BI__builtin_ia32_lzcnt_u16:
case X86::BI__builtin_ia32_lzcnt_u32:
- case X86::BI__builtin_ia32_lzcnt_u64:
+ case X86::BI__builtin_ia32_lzcnt_u64: {
+ mlir::Value isZeroPoison =
+ cir::ConstantOp::create(builder, getLoc(e->getExprLoc()),
+ cir::BoolAttr::get(&getMLIRContext(), false));
+ return emitIntrinsicCallOp(*this, e, "ctlz", ops[0].getType(),
+ mlir::ValueRange{ops[0], isZeroPoison});
+ }
case X86::BI__builtin_ia32_tzcnt_u16:
case X86::BI__builtin_ia32_tzcnt_u32:
- case X86::BI__builtin_ia32_tzcnt_u64:
+ case X86::BI__builtin_ia32_tzcnt_u64: {
+ mlir::Value isZeroPoison =
+ cir::ConstantOp::create(builder, getLoc(e->getExprLoc()),
+ cir::BoolAttr::get(&getMLIRContext(), false));
----------------
Luhaocong wrote:
done
https://github.com/llvm/llvm-project/pull/168479
More information about the cfe-commits
mailing list