mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-21 01:06:46 +00: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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340456 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
39184e407c
commit
66ce6fc8af
@ -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…
x
Reference in New Issue
Block a user