[clang] [Clang][CodeGen] Add metadata for load from reference (PR #98746)
Yingwei Zheng via cfe-commits
cfe-commits at lists.llvm.org
Fri May 23 00:34:25 PDT 2025
================
@@ -2916,9 +2916,30 @@ CodeGenFunction::EmitLoadOfReference(LValue RefLVal,
llvm::LoadInst *Load =
Builder.CreateLoad(RefLVal.getAddress(), RefLVal.isVolatile());
CGM.DecorateInstructionWithTBAA(Load, RefLVal.getTBAAInfo());
- return makeNaturalAddressForPointer(Load, RefLVal.getType()->getPointeeType(),
- CharUnits(), /*ForPointeeType=*/true,
- PointeeBaseInfo, PointeeTBAAInfo);
+ QualType PTy = RefLVal.getType()->getPointeeType();
+ if (!PTy->isIncompleteType()) {
+ llvm::LLVMContext &Ctx = getLLVMContext();
+ llvm::MDBuilder MDB(Ctx);
+ // Emit !nonnull metadata
+ if (CGM.getTypes().getTargetAddressSpace(PTy) == 0 &&
+ !CGM.getCodeGenOpts().NullPointerIsValid)
+ Load->setMetadata(llvm::LLVMContext::MD_nonnull,
+ llvm::MDNode::get(Ctx, {}));
+ // Emit !align metadata
+ if (PTy->isObjectType()) {
+ auto Align =
+ CGM.getNaturalPointeeTypeAlignment(RefLVal.getType()).getQuantity();
+ if (Align > 1) {
+ Load->setMetadata(
+ llvm::LLVMContext::MD_align,
+ llvm::MDNode::get(Ctx, MDB.createConstant(llvm::ConstantInt::get(
+ Builder.getInt64Ty(), Align))));
+ }
+ }
+ }
+ return makeNaturalAddressForPointer(Load, PTy, CharUnits(),
----------------
dtcxzyw wrote:
Done.
https://github.com/llvm/llvm-project/pull/98746
More information about the cfe-commits
mailing list