mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[MSan] Introduce insertWarningFn(). NFC
This is a step towards the upcoming KMSAN implementation patch. KMSAN is going to use a different warning function, __msan_warning_32(uptr origin), so we'd better create the warning calls in one place. Differential Revision: https://reviews.llvm.org/D44513 llvm-svn: 327828
This commit is contained in:
parent
1b43f4f998
commit
67062fa83c
@ -866,6 +866,20 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
}
|
||||
}
|
||||
|
||||
/// \brief Helper function to insert a warning at IRB's current insert point.
|
||||
void insertWarningFn(IRBuilder<> &IRB, Value *Origin) {
|
||||
if (!Origin)
|
||||
Origin = (Value *)IRB.getInt32(0);
|
||||
if (MS.TrackOrigins) {
|
||||
IRB.CreateStore(Origin, MS.OriginTLS);
|
||||
}
|
||||
IRB.CreateCall(MS.WarningFn, {});
|
||||
IRB.CreateCall(MS.EmptyAsm, {});
|
||||
// FIXME: Insert UnreachableInst if !MS.Recover?
|
||||
// This may invalidate some of the following checks and needs to be done
|
||||
// at the very end.
|
||||
}
|
||||
|
||||
void materializeOneCheck(Instruction *OrigIns, Value *Shadow, Value *Origin,
|
||||
bool AsCall) {
|
||||
IRBuilder<> IRB(OrigIns);
|
||||
@ -876,15 +890,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
Constant *ConstantShadow = dyn_cast_or_null<Constant>(ConvertedShadow);
|
||||
if (ConstantShadow) {
|
||||
if (ClCheckConstantShadow && !ConstantShadow->isZeroValue()) {
|
||||
if (MS.TrackOrigins) {
|
||||
IRB.CreateStore(Origin ? (Value *)Origin : (Value *)IRB.getInt32(0),
|
||||
MS.OriginTLS);
|
||||
}
|
||||
IRB.CreateCall(MS.WarningFn, {});
|
||||
IRB.CreateCall(MS.EmptyAsm, {});
|
||||
// FIXME: Insert UnreachableInst if !MS.Recover?
|
||||
// This may invalidate some of the following checks and needs to be done
|
||||
// at the very end.
|
||||
insertWarningFn(IRB, Origin);
|
||||
}
|
||||
return;
|
||||
}
|
||||
@ -908,12 +914,7 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
/* Unreachable */ !MS.Recover, MS.ColdCallWeights);
|
||||
|
||||
IRB.SetInsertPoint(CheckTerm);
|
||||
if (MS.TrackOrigins) {
|
||||
IRB.CreateStore(Origin ? (Value *)Origin : (Value *)IRB.getInt32(0),
|
||||
MS.OriginTLS);
|
||||
}
|
||||
IRB.CreateCall(MS.WarningFn, {});
|
||||
IRB.CreateCall(MS.EmptyAsm, {});
|
||||
insertWarningFn(IRB, Origin);
|
||||
DEBUG(dbgs() << " CHECK: " << *Cmp << "\n");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user