[clang] [CIR] Implement 'bzero' builtin lowering in terms of cir.libc.memcpy (PR #184835)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 5 13:49:14 PST 2026
================
@@ -1575,8 +1575,20 @@ RValue CIRGenFunction::emitBuiltinExpr(const GlobalDecl &gd, unsigned builtinID,
case Builtin::BI__builtin_alloca_with_align_uninitialized:
case Builtin::BI__builtin_alloca_with_align:
case Builtin::BI__builtin_infer_alloc_token:
+ return errorBuiltinNYI(*this, e, builtinID);
case Builtin::BIbzero:
- case Builtin::BI__builtin_bzero:
+ case Builtin::BI__builtin_bzero: {
+ mlir::Location loc = getLoc(e->getSourceRange());
+ Address destPtr = emitPointerWithAlignment(e->getArg(0));
+ mlir::Value destPtrCast =
+ builder.createPtrBitcast(destPtr.getPointer(), cgm.voidTy);
+ mlir::Value size = emitScalarExpr(e->getArg(1));
+ mlir::Value zero = builder.getNullValue(builder.getUInt8Ty(), loc);
+ assert(!cir::MissingFeatures::sanitizers());
+ builder.createMemSet(loc, destPtrCast, zero, size);
----------------
andykaylor wrote:
Do we need alignment here? We're calling `emitPointerWithAlignment` to get an Address, but then by switching to mlir::Value, we're not passing that alignment on to the memset. The bitcast on line 1584 could be replaced by `destPtrCast = destPtr.withElementType(builder, cgm.voidTy);` to keep it as an address (`withElementType` inserts a bitcast), but we'd need a version of `createMemSet` that takes an Address and does something with the alignment.
https://github.com/llvm/llvm-project/pull/184835
More information about the cfe-commits
mailing list