Skip to content

Commit f25e687

Browse files
committed
Exposed getRangeForLoadFromType as a public method to support adding range! metadata for atomic loads.
1 parent df9c2bc commit f25e687

File tree

2 files changed

+6
-9
lines changed

2 files changed

+6
-9
lines changed

clang/lib/CodeGen/CGAtomic.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -590,21 +590,17 @@ static void EmitAtomicOp(CodeGenFunction &CGF, AtomicExpr *E, Address Dest,
590590
llvm::LoadInst *Load = CGF.Builder.CreateLoad(Ptr);
591591
Load->setAtomic(Order, Scope);
592592
Load->setVolatile(E->isVolatile());
593-
594593
QualType Ty = E->getValueType();
595-
if (CGF.CGM.getCodeGenOpts().OptimizationLevel > 0 && Ty->isBooleanType()) {
596-
llvm::MDBuilder MDHelper(CGF.getLLVMContext());
597-
llvm::APInt BooleanMin = llvm::APInt(CGF.getContext().getTypeSize(Ty), 0);
598-
llvm::APInt BooleanEnd = llvm::APInt(CGF.getContext().getTypeSize(Ty), 2);
599-
if (llvm::MDNode *RangeInfo =
600-
MDHelper.createRange(BooleanMin, BooleanEnd)) {
594+
if (CGF.EmitScalarRangeCheck(Load, Ty, E->getExprLoc())) {
595+
} else if (CGF.CGM.getCodeGenOpts().OptimizationLevel > 0) {
596+
CGF.getRangeForLoadFromType(Ty);
597+
if (llvm::MDNode *RangeInfo = CGF.getRangeForLoadFromType(Ty)) {
601598
Load->setMetadata(llvm::LLVMContext::MD_range, RangeInfo);
602599
Load->setMetadata(llvm::LLVMContext::MD_noundef,
603600
llvm::MDNode::get(CGF.getLLVMContext(), {}));
604601
}
605602
}
606603
CGF.Builder.CreateStore(Load, Dest);
607-
608604
return;
609605
}
610606

clang/lib/CodeGen/CodeGenFunction.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5306,6 +5306,8 @@ class CodeGenFunction : public CodeGenTypeCache {
53065306
unsigned NumElementsDst,
53075307
const llvm::Twine &Name = "");
53085308

5309+
llvm::MDNode *getRangeForLoadFromType(QualType Ty);
5310+
53095311
private:
53105312
// Emits a convergence_loop instruction for the given |BB|, with |ParentToken|
53115313
// as it's parent convergence instr.
@@ -5321,7 +5323,6 @@ class CodeGenFunction : public CodeGenTypeCache {
53215323
getOrEmitConvergenceEntryToken(llvm::Function *F);
53225324

53235325
private:
5324-
llvm::MDNode *getRangeForLoadFromType(QualType Ty);
53255326
void EmitReturnOfRValue(RValue RV, QualType Ty);
53265327

53275328
void deferPlaceholderReplacement(llvm::Instruction *Old, llvm::Value *New);

0 commit comments

Comments
 (0)