[llvm] r276712 - [safestack] Fix stack guard live range.
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 10 13:14:21 PDT 2016
Merged to 3.9 in r278283, as suggested on PR28863.
On Mon, Jul 25, 2016 at 5:05 PM, Evgeniy Stepanov via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: eugenis
> Date: Mon Jul 25 19:05:14 2016
> New Revision: 276712
>
> URL: http://llvm.org/viewvc/llvm-project?rev=276712&view=rev
> Log:
> [safestack] Fix stack guard live range.
>
> Stack guard slot is live throughout the function.
>
> Added:
> llvm/trunk/test/Transforms/SafeStack/coloring-ssp.ll
> Modified:
> llvm/trunk/lib/CodeGen/SafeStack.cpp
> llvm/trunk/lib/CodeGen/SafeStackColoring.cpp
>
> Modified: llvm/trunk/lib/CodeGen/SafeStack.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SafeStack.cpp?rev=276712&r1=276711&r2=276712&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SafeStack.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SafeStack.cpp Mon Jul 25 19:05:14 2016
> @@ -530,7 +530,7 @@ Value *SafeStack::moveStaticAllocasToUns
> unsigned Align =
> std::max(DL->getPrefTypeAlignment(Ty), StackGuardSlot->getAlignment());
> SSL.addObject(StackGuardSlot, getStaticAllocaAllocationSize(StackGuardSlot),
> - Align, SSC.getLiveRange(StackGuardSlot));
> + Align, SSC.getFullLiveRange());
> }
>
> for (Argument *Arg : ByValArguments) {
>
> Modified: llvm/trunk/lib/CodeGen/SafeStackColoring.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SafeStackColoring.cpp?rev=276712&r1=276711&r2=276712&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/SafeStackColoring.cpp (original)
> +++ llvm/trunk/lib/CodeGen/SafeStackColoring.cpp Mon Jul 25 19:05:14 2016
> @@ -25,7 +25,9 @@ static cl::opt<bool> ClColoring("safe-st
> cl::Hidden, cl::init(true));
>
> const StackColoring::LiveRange &StackColoring::getLiveRange(AllocaInst *AI) {
> - return LiveRanges[AllocaNumbering[AI]];
> + const auto IT = AllocaNumbering.find(AI);
> + assert(IT != AllocaNumbering.end());
> + return LiveRanges[IT->second];
> }
>
> bool StackColoring::readMarker(Instruction *I, bool *IsStart) {
>
> Added: llvm/trunk/test/Transforms/SafeStack/coloring-ssp.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SafeStack/coloring-ssp.ll?rev=276712&view=auto
> ==============================================================================
> --- llvm/trunk/test/Transforms/SafeStack/coloring-ssp.ll (added)
> +++ llvm/trunk/test/Transforms/SafeStack/coloring-ssp.ll Mon Jul 25 19:05:14 2016
> @@ -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*)
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list