Skip to content

Commit a348252

Browse files
committed
Created helper function for calling EmitScalarRangeCheck() and adding range metadata. Made getRangeForLoadFromType private function as it was before f25e687.
1 parent f25e687 commit a348252

File tree

3 files changed

+19
-20
lines changed

3 files changed

+19
-20
lines changed

clang/lib/CodeGen/CGAtomic.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -590,16 +590,7 @@ 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-
QualType Ty = E->getValueType();
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)) {
598-
Load->setMetadata(llvm::LLVMContext::MD_range, RangeInfo);
599-
Load->setMetadata(llvm::LLVMContext::MD_noundef,
600-
llvm::MDNode::get(CGF.getLLVMContext(), {}));
601-
}
602-
}
593+
CGF.maybeAttachRangeForLoad(Load, E->getValueType(), E->getExprLoc());
603594
CGF.Builder.CreateStore(Load, Dest);
604595
return;
605596
}

clang/lib/CodeGen/CGExpr.cpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,6 +1919,20 @@ llvm::MDNode *CodeGenFunction::getRangeForLoadFromType(QualType Ty) {
19191919
return MDHelper.createRange(Min, End);
19201920
}
19211921

1922+
void CodeGenFunction::maybeAttachRangeForLoad(llvm::LoadInst *Load, QualType Ty,
1923+
SourceLocation Loc) {
1924+
if (EmitScalarRangeCheck(Load, Ty, Loc)) {
1925+
// In order to prevent the optimizer from throwing away the check, don't
1926+
// attach range metadata to the load.
1927+
} else if (CGM.getCodeGenOpts().OptimizationLevel > 0) {
1928+
if (llvm::MDNode *RangeInfo = getRangeForLoadFromType(Ty)) {
1929+
Load->setMetadata(llvm::LLVMContext::MD_range, RangeInfo);
1930+
Load->setMetadata(llvm::LLVMContext::MD_noundef,
1931+
llvm::MDNode::get(CGM.getLLVMContext(), {}));
1932+
}
1933+
}
1934+
}
1935+
19221936
bool CodeGenFunction::EmitScalarRangeCheck(llvm::Value *Value, QualType Ty,
19231937
SourceLocation Loc) {
19241938
bool HasBoolCheck = SanOpts.has(SanitizerKind::Bool);
@@ -2037,15 +2051,7 @@ llvm::Value *CodeGenFunction::EmitLoadOfScalar(Address Addr, bool Volatile,
20372051

20382052
CGM.DecorateInstructionWithTBAA(Load, TBAAInfo);
20392053

2040-
if (EmitScalarRangeCheck(Load, Ty, Loc)) {
2041-
// In order to prevent the optimizer from throwing away the check, don't
2042-
// attach range metadata to the load.
2043-
} else if (CGM.getCodeGenOpts().OptimizationLevel > 0)
2044-
if (llvm::MDNode *RangeInfo = getRangeForLoadFromType(Ty)) {
2045-
Load->setMetadata(llvm::LLVMContext::MD_range, RangeInfo);
2046-
Load->setMetadata(llvm::LLVMContext::MD_noundef,
2047-
llvm::MDNode::get(getLLVMContext(), {}));
2048-
}
2054+
maybeAttachRangeForLoad(Load, Ty, Loc);
20492055

20502056
return EmitFromMemory(Load, Ty);
20512057
}

clang/lib/CodeGen/CodeGenFunction.h

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

5309-
llvm::MDNode *getRangeForLoadFromType(QualType Ty);
5309+
void maybeAttachRangeForLoad(llvm::LoadInst *Load, QualType Ty,
5310+
SourceLocation Loc);
53105311

53115312
private:
53125313
// Emits a convergence_loop instruction for the given |BB|, with |ParentToken|
@@ -5323,6 +5324,7 @@ class CodeGenFunction : public CodeGenTypeCache {
53235324
getOrEmitConvergenceEntryToken(llvm::Function *F);
53245325

53255326
private:
5327+
llvm::MDNode *getRangeForLoadFromType(QualType Ty);
53265328
void EmitReturnOfRValue(RValue RV, QualType Ty);
53275329

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

0 commit comments

Comments
 (0)