[llvm] r277067 - maned
David Majnemer via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 28 17:16:19 PDT 2016
Did you intend to commit with this message?
On Thu, Jul 28, 2016 at 6:50 PM, Vitaly Buka via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: vitalybuka
> Date: Thu Jul 28 17:50:45 2016
> New Revision: 277067
>
> URL: http://llvm.org/viewvc/llvm-project?rev=277067&view=rev
> Log:
> maned
>
> Added:
> llvm/trunk/test/Transforms/InstCombine/lifetime-asan.ll
> Modified:
> llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
>
> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp?rev=277067&r1=277066&r2=277067&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp (original)
> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp Thu Jul 28
> 17:50:45 2016
> @@ -1211,10 +1211,6 @@ static bool removeTriviallyEmptyRange(In
> unsigned EndID, InstCombiner &IC) {
> assert(I.getIntrinsicID() == StartID &&
> "Start intrinsic does not have expected ID");
> - // Even if the range is empty asan need to poison memory to detect
> invalid
> - // access latter.
> - if (ClUseAfterScope)
> - return false;
> BasicBlock::iterator BI(I), BE(I.getParent()->end());
> for (++BI; BI != BE; ++BI) {
> if (auto *E = dyn_cast<IntrinsicInst>(BI)) {
> @@ -2248,11 +2244,18 @@ Instruction *InstCombiner::visitCallInst
> return eraseInstFromFunction(CI);
> break;
> }
> - case Intrinsic::lifetime_start:
> + case Intrinsic::lifetime_start: {
> + const Function *func = II->getFunction();
> + // Asan needs to poison memory to detect invalid access possible even
> for
> + // empty lifetime range.
> + if (func && func->hasFnAttribute(Attribute::SanitizeAddress))
> + break;
> +
> if (removeTriviallyEmptyRange(*II, Intrinsic::lifetime_start,
> Intrinsic::lifetime_end, *this))
> return nullptr;
> break;
> + }
> case Intrinsic::assume: {
> Value *IIOperand = II->getArgOperand(0);
> // Remove an assume if it is immediately followed by an identical
> assume.
> @@ -2483,7 +2486,6 @@ static IntrinsicInst *findInitTrampoline
>
> /// Improvements for call and invoke instructions.
> Instruction *InstCombiner::visitCallSite(CallSite CS) {
> -
> if (isAllocLikeFn(CS.getInstruction(), TLI))
> return visitAllocSite(*CS.getInstruction());
>
>
> Added: llvm/trunk/test/Transforms/InstCombine/lifetime-asan.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/lifetime-asan.ll?rev=277067&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/InstCombine/lifetime-asan.ll (added)
> +++ llvm/trunk/test/Transforms/InstCombine/lifetime-asan.ll Thu Jul 28
> 17:50:45 2016
> @@ -0,0 +1,37 @@
> +; RUN: opt < %s -instcombine -S | FileCheck %s
> +
> +declare void @llvm.lifetime.start(i64, i8* nocapture)
> +declare void @llvm.lifetime.end(i64, i8* nocapture)
> +declare void @foo(i8* nocapture)
> +
> +define void @asan() sanitize_address {
> +entry:
> + ; CHECK-LABEL: @asan(
> + %text = alloca [1 x i8], align 1
> + %0 = getelementptr inbounds [1 x i8], [1 x i8]* %text, i64 0, i64 0
> +
> + call void @llvm.lifetime.start(i64 1, i8* %0)
> + call void @llvm.lifetime.end(i64 1, i8* %0)
> + ; CHECK: call void @llvm.lifetime.start
> + ; CHECK-NEXT: call void @llvm.lifetime.end
> +
> + call void @foo(i8* %0) ; Keep alloca alive
> +
> + ret void
> +}
> +
> +
> +define void @no_asan() {
> +entry:
> + ; CHECK-LABEL: @no_asan(
> + %text = alloca [1 x i8], align 1
> + %0 = getelementptr inbounds [1 x i8], [1 x i8]* %text, i64 0, i64 0
> +
> + call void @llvm.lifetime.start(i64 1, i8* %0)
> + call void @llvm.lifetime.end(i64 1, i8* %0)
> + ; CHECK-NO: call void @llvm.lifetime
> +
> + call void @foo(i8* %0) ; Keep alloca alive
> +
> + ret void
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160728/93b68a2b/attachment.html>
More information about the llvm-commits
mailing list