diff options
| author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2016-07-26 00:05:14 +0000 |
|---|---|---|
| committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2016-07-26 00:05:14 +0000 |
| commit | 906f6fb565e7bf6cf54fed8955e371d735b06d78 (patch) | |
| tree | 7b4335a063124db9f77a7362d56a8d59e51a5600 /llvm/test/Transforms/SafeStack | |
| parent | d052efc3326f1fbe03a673413eee6a6cd8142898 (diff) | |
| download | bcm5719-llvm-906f6fb565e7bf6cf54fed8955e371d735b06d78.tar.gz bcm5719-llvm-906f6fb565e7bf6cf54fed8955e371d735b06d78.zip | |
[safestack] Fix stack guard live range.
Stack guard slot is live throughout the function.
llvm-svn: 276712
Diffstat (limited to 'llvm/test/Transforms/SafeStack')
| -rw-r--r-- | llvm/test/Transforms/SafeStack/coloring-ssp.ll | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SafeStack/coloring-ssp.ll b/llvm/test/Transforms/SafeStack/coloring-ssp.ll new file mode 100644 index 00000000000..d71babe200d --- /dev/null +++ b/llvm/test/Transforms/SafeStack/coloring-ssp.ll @@ -0,0 +1,34 @@ +; RUN: opt -safe-stack -S -mtriple=x86_64-pc-linux-gnu < %s -o - | FileCheck %s + +; %x and %y share a stack slot between them, but not with the stack guard. +define void @f() safestack sspreq { +; CHECK-LABEL: define void @f +entry: +; CHECK: %[[USP:.*]] = load i8*, i8** @__safestack_unsafe_stack_ptr +; CHECK: getelementptr i8, i8* %[[USP]], i32 -16 + +; CHECK: %[[A:.*]] = getelementptr i8, i8* %[[USP]], i32 -8 +; CHECK: %[[StackGuardSlot:.*]] = bitcast i8* %[[A]] to i8** +; CHECK: store i8* %{{.*}}, i8** %[[StackGuardSlot]] + + %x = alloca i64, align 8 + %y = alloca i64, align 8 + %x0 = bitcast i64* %x to i8* + %y0 = bitcast i64* %y to i8* + + call void @llvm.lifetime.start(i64 -1, i8* %x0) +; CHECK: getelementptr i8, i8* %[[USP]], i32 -16 + call void @capture64(i64* %x) + call void @llvm.lifetime.end(i64 -1, i8* %x0) + + call void @llvm.lifetime.start(i64 -1, i8* %y0) +; CHECK: getelementptr i8, i8* %[[USP]], i32 -16 + call void @capture64(i64* %y) + call void @llvm.lifetime.end(i64 -1, i8* %y0) + + ret void +} + +declare void @llvm.lifetime.start(i64, i8* nocapture) +declare void @llvm.lifetime.end(i64, i8* nocapture) +declare void @capture64(i64*) |

