mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
[SafeStack] Handle unreachable code with safe stack coloring.
Instead of asserting that the function doesn't have any unreachable code, just ignore it for the purpose of computing liveness. Differential Revision: https://reviews.llvm.org/D51070 llvm-svn: 340456
This commit is contained in:
parent
bd27c2c168
commit
d02128f555
@ -172,7 +172,9 @@ void StackColoring::calculateLocalLiveness() {
|
||||
BitVector LocalLiveIn;
|
||||
for (auto *PredBB : predecessors(BB)) {
|
||||
LivenessMap::const_iterator I = BlockLiveness.find(PredBB);
|
||||
assert(I != BlockLiveness.end() && "Predecessor not found");
|
||||
// If a predecessor is unreachable, ignore it.
|
||||
if (I == BlockLiveness.end())
|
||||
continue;
|
||||
LocalLiveIn |= I->second.LiveOut;
|
||||
}
|
||||
|
||||
|
23
test/Transforms/SafeStack/AArch64/unreachable.ll
Normal file
23
test/Transforms/SafeStack/AArch64/unreachable.ll
Normal file
@ -0,0 +1,23 @@
|
||||
; RUN: opt -safe-stack -safe-stack-coloring -S -mtriple=aarch64-linux-android < %s -o - | FileCheck %s
|
||||
|
||||
define void @foo() nounwind uwtable safestack {
|
||||
entry:
|
||||
; CHECK: %[[TP:.*]] = call i8* @llvm.thread.pointer()
|
||||
; CHECK: %[[SPA0:.*]] = getelementptr i8, i8* %[[TP]], i32 72
|
||||
; CHECK: %[[SPA:.*]] = bitcast i8* %[[SPA0]] to i8**
|
||||
; CHECK: %[[USP:.*]] = load i8*, i8** %[[SPA]]
|
||||
; CHECK: %[[USST:.*]] = getelementptr i8, i8* %[[USP]], i32 -16
|
||||
; CHECK: store i8* %[[USST]], i8** %[[SPA]]
|
||||
|
||||
%a = alloca i8, align 8
|
||||
br label %ret
|
||||
|
||||
ret:
|
||||
ret void
|
||||
|
||||
dead:
|
||||
call void @Capture(i8* %a)
|
||||
br label %ret
|
||||
}
|
||||
|
||||
declare void @Capture(i8*)
|
Loading…
Reference in New Issue
Block a user