mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-18 10:24:45 +00:00
Add an explicit insert point argument to SplitBlockAndInsertIfThen.
Currently SplitBlockAndInsertIfThen requires that branch condition is an Instruction itself, which is very inconvenient, because it is sometimes an Operator, or even a Constant. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@197677 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -617,7 +617,7 @@ bool AddressSanitizer::instrumentMemIntrinsic(MemIntrinsic *MI) {
|
||||
|
||||
Value *Cmp = IRB.CreateICmpNE(Length,
|
||||
Constant::getNullValue(Length->getType()));
|
||||
InsertBefore = SplitBlockAndInsertIfThen(cast<Instruction>(Cmp), false);
|
||||
InsertBefore = SplitBlockAndInsertIfThen(Cmp, InsertBefore, false);
|
||||
}
|
||||
|
||||
instrumentMemIntrinsicParam(MI, Dst, Length, InsertBefore, true);
|
||||
@@ -780,7 +780,7 @@ void AddressSanitizer::instrumentAddress(Instruction *OrigIns,
|
||||
|
||||
if (ClAlwaysSlowPath || (TypeSize < 8 * Granularity)) {
|
||||
TerminatorInst *CheckTerm =
|
||||
SplitBlockAndInsertIfThen(cast<Instruction>(Cmp), false);
|
||||
SplitBlockAndInsertIfThen(Cmp, InsertBefore, false);
|
||||
assert(dyn_cast<BranchInst>(CheckTerm)->isUnconditional());
|
||||
BasicBlock *NextBB = CheckTerm->getSuccessor(0);
|
||||
IRB.SetInsertPoint(CheckTerm);
|
||||
@@ -791,7 +791,7 @@ void AddressSanitizer::instrumentAddress(Instruction *OrigIns,
|
||||
BranchInst *NewTerm = BranchInst::Create(CrashBlock, NextBB, Cmp2);
|
||||
ReplaceInstWithInst(CheckTerm, NewTerm);
|
||||
} else {
|
||||
CrashTerm = SplitBlockAndInsertIfThen(cast<Instruction>(Cmp), true);
|
||||
CrashTerm = SplitBlockAndInsertIfThen(Cmp, InsertBefore, true);
|
||||
}
|
||||
|
||||
Instruction *Crash = generateCrashCode(
|
||||
@@ -1188,7 +1188,7 @@ bool AddressSanitizer::InjectCoverage(Function &F) {
|
||||
Load->setAtomic(Monotonic);
|
||||
Load->setAlignment(1);
|
||||
Value *Cmp = IRB.CreateICmpEQ(Constant::getNullValue(Int8Ty), Load);
|
||||
Instruction *Ins = SplitBlockAndInsertIfThen(cast<Instruction>(Cmp), false);
|
||||
Instruction *Ins = SplitBlockAndInsertIfThen(Cmp, IP, false);
|
||||
IRB.SetInsertPoint(Ins);
|
||||
// We pass &F to __sanitizer_cov. We could avoid this and rely on
|
||||
// GET_CALLER_PC, but having the PC of the first instruction is just nice.
|
||||
@@ -1448,8 +1448,7 @@ void FunctionStackPoisoner::poisonStack() {
|
||||
kAsanOptionDetectUAR, IRB.getInt32Ty());
|
||||
Value *Cmp = IRB.CreateICmpNE(IRB.CreateLoad(OptionDetectUAR),
|
||||
Constant::getNullValue(IRB.getInt32Ty()));
|
||||
Instruction *Term =
|
||||
SplitBlockAndInsertIfThen(cast<Instruction>(Cmp), false);
|
||||
Instruction *Term = SplitBlockAndInsertIfThen(Cmp, InsBefore, false);
|
||||
BasicBlock *CmpBlock = cast<Instruction>(Cmp)->getParent();
|
||||
IRBuilder<> IRBIf(Term);
|
||||
LocalStackBase = IRBIf.CreateCall2(
|
||||
@@ -1529,8 +1528,7 @@ void FunctionStackPoisoner::poisonStack() {
|
||||
// **SavedFlagPtr(LocalStackBase) = 0
|
||||
// FIXME: if LocalStackBase != OrigStackBase don't call poisonRedZones.
|
||||
Value *Cmp = IRBRet.CreateICmpNE(LocalStackBase, OrigStackBase);
|
||||
TerminatorInst *PoisonTerm =
|
||||
SplitBlockAndInsertIfThen(cast<Instruction>(Cmp), false);
|
||||
TerminatorInst *PoisonTerm = SplitBlockAndInsertIfThen(Cmp, Ret, false);
|
||||
IRBuilder<> IRBPoison(PoisonTerm);
|
||||
int ClassSize = kMinStackMallocSize << StackMallocIdx;
|
||||
SetShadowToStackAfterReturnInlined(IRBPoison, ShadowBase,
|
||||
|
Reference in New Issue
Block a user