Skip to content

Commit b55d404

Browse files
committed
For quality compilers: make shadow loading order deterministic
1 parent 1a66bd1 commit b55d404

File tree

1 file changed

+6
-4
lines changed

1 file changed

+6
-4
lines changed

llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2634,16 +2634,18 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
26342634
OddMask.push_back(X + 1);
26352635
}
26362636

2637+
Value *FirstArgShadow = getShadow(&I, 0);
26372638
Value *EvenShadow;
26382639
Value *OddShadow;
26392640
if (I.arg_size() == 2) {
2641+
Value *SecondArgShadow = getShadow(&I, 1);
26402642
EvenShadow =
2641-
IRB.CreateShuffleVector(getShadow(&I, 0), getShadow(&I, 1), EvenMask);
2643+
IRB.CreateShuffleVector(FirstArgShadow, SecondArgShadow, EvenMask);
26422644
OddShadow =
2643-
IRB.CreateShuffleVector(getShadow(&I, 0), getShadow(&I, 1), OddMask);
2645+
IRB.CreateShuffleVector(FirstArgShadow, SecondArgShadow, OddMask);
26442646
} else {
2645-
EvenShadow = IRB.CreateShuffleVector(getShadow(&I, 0), EvenMask);
2646-
OddShadow = IRB.CreateShuffleVector(getShadow(&I, 0), OddMask);
2647+
EvenShadow = IRB.CreateShuffleVector(FirstArgShadow, EvenMask);
2648+
OddShadow = IRB.CreateShuffleVector(FirstArgShadow, OddMask);
26472649
}
26482650

26492651
Value *OrShadow = IRB.CreateOr(EvenShadow, OddShadow);

0 commit comments

Comments
 (0)