[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