mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-02 07:32:52 +00:00
[msan] Fix handling of select with vector condition.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171069 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
50ec431c9f
commit
6607716368
@ -1566,9 +1566,18 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
|
|||||||
setShadow(&I, IRB.CreateSelect(I.getCondition(),
|
setShadow(&I, IRB.CreateSelect(I.getCondition(),
|
||||||
getShadow(I.getTrueValue()), getShadow(I.getFalseValue()),
|
getShadow(I.getTrueValue()), getShadow(I.getFalseValue()),
|
||||||
"_msprop"));
|
"_msprop"));
|
||||||
if (MS.TrackOrigins)
|
if (MS.TrackOrigins) {
|
||||||
setOrigin(&I, IRB.CreateSelect(I.getCondition(),
|
// Origins are always i32, so any vector conditions must be flattened.
|
||||||
|
// FIXME: consider tracking vector origins for app vectors?
|
||||||
|
Value *Cond = I.getCondition();
|
||||||
|
if (Cond->getType()->isVectorTy()) {
|
||||||
|
Value *ConvertedShadow = convertToShadowTyNoVec(Cond, IRB);
|
||||||
|
Cond = IRB.CreateICmpNE(ConvertedShadow,
|
||||||
|
getCleanShadow(ConvertedShadow), "_mso_select");
|
||||||
|
}
|
||||||
|
setOrigin(&I, IRB.CreateSelect(Cond,
|
||||||
getOrigin(I.getTrueValue()), getOrigin(I.getFalseValue())));
|
getOrigin(I.getTrueValue()), getOrigin(I.getFalseValue())));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void visitLandingPadInst(LandingPadInst &I) {
|
void visitLandingPadInst(LandingPadInst &I) {
|
||||||
|
@ -251,6 +251,23 @@ entry:
|
|||||||
; CHECK: ret i32
|
; CHECK: ret i32
|
||||||
|
|
||||||
|
|
||||||
|
; Check that we propagate origin for "select" with vector condition.
|
||||||
|
; Select condition is flattened to i1, which is then used to select one of the
|
||||||
|
; argument origins.
|
||||||
|
|
||||||
|
define <8 x i16> @SelectVector(<8 x i16> %a, <8 x i16> %b, <8 x i1> %c) nounwind uwtable readnone {
|
||||||
|
entry:
|
||||||
|
%cond = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %b
|
||||||
|
ret <8 x i16> %cond
|
||||||
|
}
|
||||||
|
|
||||||
|
; CHECK-ORIGINS: @SelectVector
|
||||||
|
; CHECK-ORIGINS: bitcast <8 x i1> {{.*}} to i8
|
||||||
|
; CHECK-ORIGINS: icmp ne i8
|
||||||
|
; CHECK-ORIGINS: select i1
|
||||||
|
; CHECK-ORIGINS: ret <8 x i16>
|
||||||
|
|
||||||
|
|
||||||
define i8* @IntToPtr(i64 %x) nounwind uwtable readnone {
|
define i8* @IntToPtr(i64 %x) nounwind uwtable readnone {
|
||||||
entry:
|
entry:
|
||||||
%0 = inttoptr i64 %x to i8*
|
%0 = inttoptr i64 %x to i8*
|
||||||
|
Loading…
Reference in New Issue
Block a user