mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
[msan] Propagate condition origin in select instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@195349 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -2082,13 +2082,20 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
||||
// Origins are always i32, so any vector conditions must be flattened.
|
||||
// FIXME: consider tracking vector origins for app vectors?
|
||||
Value *Cond = I.getCondition();
|
||||
Value *CondShadow = getShadow(Cond);
|
||||
if (Cond->getType()->isVectorTy()) {
|
||||
Value *ConvertedShadow = convertToShadowTyNoVec(Cond, IRB);
|
||||
Cond = IRB.CreateICmpNE(ConvertedShadow,
|
||||
getCleanShadow(ConvertedShadow), "_mso_select");
|
||||
Type *FlatTy = getShadowTyNoVec(Cond->getType());
|
||||
Cond = IRB.CreateICmpNE(IRB.CreateBitCast(Cond, FlatTy),
|
||||
ConstantInt::getNullValue(FlatTy));
|
||||
CondShadow = IRB.CreateICmpNE(IRB.CreateBitCast(CondShadow, FlatTy),
|
||||
ConstantInt::getNullValue(FlatTy));
|
||||
}
|
||||
setOrigin(&I, IRB.CreateSelect(Cond,
|
||||
getOrigin(I.getTrueValue()), getOrigin(I.getFalseValue())));
|
||||
// a = select b, c, d
|
||||
// Oa = Sb ? Ob : (b ? Oc : Od)
|
||||
setOrigin(&I, IRB.CreateSelect(
|
||||
CondShadow, getOrigin(I.getCondition()),
|
||||
IRB.CreateSelect(Cond, getOrigin(I.getTrueValue()),
|
||||
getOrigin(I.getFalseValue()))));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user