<div dir="ltr">FYI, this caused the sanitizer bootstrap bot to start failing, and contains multiple bugs. I've essentially re-written this patch in r216871. I'll follow up on the original review thread with details, but wanted anyone bisecting or otherwise debugging to be aware of the potential for bugs here.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Aug 31, 2014 at 11:03 PM, Nick Lewycky <span dir="ltr"><<a href="mailto:nicholas@mxc.ca" target="_blank">nicholas@mxc.ca</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: nicholas<br>
Date: Mon Sep 1 01:03:11 2014<br>
New Revision: 216865<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=216865&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=216865&view=rev</a><br>
Log:<br>
Ignore lifetime intrinsics in use list for MemCpyOptimizer. Patch by Luqman Aden, review by Hal Finkel.<br>
<br>
Added:<br>
llvm/trunk/test/Transforms/MemCpyOpt/memcpy-to-memset-with-lifetimes.ll<br>
Modified:<br>
llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp<br>
<br>
Modified: llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp?rev=216865&r1=216864&r2=216865&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp?rev=216865&r1=216864&r2=216865&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp (original)<br>
+++ llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp Mon Sep 1 01:03:11 2014<br>
@@ -679,6 +679,10 @@ bool MemCpyOpt::performCallSlotOptzn(Ins<br>
srcUseList.push_back(UU);<br>
else<br>
return false;<br>
+ } else if (const IntrinsicInst *IT = dyn_cast<IntrinsicInst>(U)) {<br>
+ if (IT->getIntrinsicID() != Intrinsic::lifetime_start &&<br>
+ IT->getIntrinsicID() != Intrinsic::lifetime_end)<br>
+ continue;<br>
} else if (U != C && U != cpy) {<br>
return false;<br>
}<br>
<br>
Added: llvm/trunk/test/Transforms/MemCpyOpt/memcpy-to-memset-with-lifetimes.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/MemCpyOpt/memcpy-to-memset-with-lifetimes.ll?rev=216865&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/MemCpyOpt/memcpy-to-memset-with-lifetimes.ll?rev=216865&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/Transforms/MemCpyOpt/memcpy-to-memset-with-lifetimes.ll (added)<br>
+++ llvm/trunk/test/Transforms/MemCpyOpt/memcpy-to-memset-with-lifetimes.ll Mon Sep 1 01:03:11 2014<br>
@@ -0,0 +1,28 @@<br>
+; RUN: opt -basicaa -memcpyopt -instcombine -S < %s | FileCheck %s<br>
+<br>
+target datalayout = "e-i64:64-f80:128-n8:16:32:64-S128"<br>
+target triple = "x86_64-unknown-linux-gnu"<br>
+<br>
+define void @foo([8 x i64]* noalias nocapture sret dereferenceable(64)) {<br>
+entry-block:<br>
+ %a = alloca [8 x i64], align 8<br>
+ %1 = bitcast [8 x i64]* %a to i8*<br>
+ call void @llvm.lifetime.start(i64 64, i8* %1)<br>
+ call void @llvm.memset.p0i8.i64(i8* %1, i8 0, i64 64, i32 8, i1 false)<br>
+ %2 = bitcast [8 x i64]* %0 to i8*<br>
+ call void @llvm.memcpy.p0i8.p0i8.i64(i8* %2, i8* %1, i64 64, i32 8, i1 false)<br>
+ call void @llvm.lifetime.end(i64 64, i8* %1)<br>
+ ret void<br>
+<br>
+; CHECK-LABEL: @foo(<br>
+; CHECK: %1 = bitcast<br>
+; CHECK: call void @llvm.memset<br>
+; CHECK-NOT: call void @llvm.memcpy<br>
+; CHECK: ret void<br>
+}<br>
+<br>
+declare void @llvm.lifetime.start(i64, i8* nocapture) nounwind<br>
+declare void @llvm.lifetime.end(i64, i8* nocapture) nounwind<br>
+<br>
+declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i32, i1) nounwind<br>
+declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) nounwind<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>