<div dir="ltr">Ah, I see there's been a fair few of these smaller changes without pre-commit review. No worries - I'll keep an eye out for them for post-commit review. Thanks!</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jun 28, 2021 at 11:57 AM David Blaikie <<a href="mailto:dblaikie@gmail.com">dblaikie@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">If this came from a phab review - please make sure to include that in the commit message (& in cases where it's missed, could you follow-up with an email reply to the commit to link to the review).</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Jun 27, 2021 at 6:53 AM Nikita Popov via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Author: Nikita Popov<br>
Date: 2021-06-27T15:52:38+02:00<br>
New Revision: 81fcdae68c5ff656c30032fd26c6a21af4c51dbb<br>
<br>
URL: <a href="https://github.com/llvm/llvm-project/commit/81fcdae68c5ff656c30032fd26c6a21af4c51dbb" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/81fcdae68c5ff656c30032fd26c6a21af4c51dbb</a><br>
DIFF: <a href="https://github.com/llvm/llvm-project/commit/81fcdae68c5ff656c30032fd26c6a21af4c51dbb.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/81fcdae68c5ff656c30032fd26c6a21af4c51dbb.diff</a><br>
<br>
LOG: [MemCpyOpt] Support opaque pointers<br>
<br>
Added: <br>
<br>
<br>
Modified: <br>
    llvm/lib/IR/IRBuilder.cpp<br>
    llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp<br>
    llvm/test/Transforms/MemCpyOpt/memset-memcpy-redundant-memset.ll<br>
<br>
Removed: <br>
<br>
<br>
<br>
################################################################################<br>
diff  --git a/llvm/lib/IR/IRBuilder.cpp b/llvm/lib/IR/IRBuilder.cpp<br>
index ca6577330c8ee..3c55b7395864a 100644<br>
--- a/llvm/lib/IR/IRBuilder.cpp<br>
+++ b/llvm/lib/IR/IRBuilder.cpp<br>
@@ -62,7 +62,7 @@ Type *IRBuilderBase::getCurrentFunctionReturnType() const {<br>
<br>
 Value *IRBuilderBase::getCastedInt8PtrValue(Value *Ptr) {<br>
   auto *PT = cast<PointerType>(Ptr->getType());<br>
-  if (PT->getElementType()->isIntegerTy(8))<br>
+  if (PT->isOpaqueOrPointeeTypeMatches(getInt8Ty()))<br>
     return Ptr;<br>
<br>
   // Otherwise, we need to insert a bitcast.<br>
<br>
diff  --git a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp<br>
index db8d40b2bafaf..6016779ef3cfa 100644<br>
--- a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp<br>
+++ b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp<br>
@@ -1215,8 +1215,7 @@ bool MemCpyOptPass::processMemSetMemCpyDependence(MemCpyInst *MemCpy,<br>
   Value *MemsetLen = Builder.CreateSelect(<br>
       Ule, ConstantInt::getNullValue(DestSize->getType()), SizeDiff);<br>
   Instruction *NewMemSet = Builder.CreateMemSet(<br>
-      Builder.CreateGEP(Dest->getType()->getPointerElementType(), Dest,<br>
-                        SrcSize),<br>
+      Builder.CreateGEP(Builder.getInt8Ty(), Dest, SrcSize),<br>
       MemSet->getOperand(1), MemsetLen, MaybeAlign(Align));<br>
<br>
   if (MSSAU) {<br>
<br>
diff  --git a/llvm/test/Transforms/MemCpyOpt/memset-memcpy-redundant-memset.ll b/llvm/test/Transforms/MemCpyOpt/memset-memcpy-redundant-memset.ll<br>
index 10ec8b46dbd27..987321607b3db 100644<br>
--- a/llvm/test/Transforms/MemCpyOpt/memset-memcpy-redundant-memset.ll<br>
+++ b/llvm/test/Transforms/MemCpyOpt/memset-memcpy-redundant-memset.ll<br>
@@ -291,10 +291,27 @@ define void @test_must_alias_<br>
diff erent_size(i8* noalias %src, i64 %src_size, i8*<br>
   ret void<br>
 }<br>
<br>
+define void @test_opaque_ptrs(ptr %src, i64 %src_size, ptr noalias %dst, i64 %dst_size, i8 %c) {<br>
+; CHECK-LABEL: @test_opaque_ptrs(<br>
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp ule i64 [[DST_SIZE:%.*]], [[SRC_SIZE:%.*]]<br>
+; CHECK-NEXT:    [[TMP2:%.*]] = sub i64 [[DST_SIZE]], [[SRC_SIZE]]<br>
+; CHECK-NEXT:    [[TMP3:%.*]] = select i1 [[TMP1]], i64 0, i64 [[TMP2]]<br>
+; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr i8, ptr [[DST:%.*]], i64 [[SRC_SIZE]]<br>
+; CHECK-NEXT:    call void @llvm.memset.p0.i64(ptr align 1 [[TMP4]], i8 [[C:%.*]], i64 [[TMP3]], i1 false)<br>
+; CHECK-NEXT:    call void @llvm.memcpy.p0.p0.i64(ptr [[DST]], ptr [[SRC:%.*]], i64 [[SRC_SIZE]], i1 false)<br>
+; CHECK-NEXT:    ret void<br>
+;<br>
+  call void @llvm.memset.p0.i64(ptr %dst, i8 %c, i64 %dst_size, i1 false)<br>
+  call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %src_size, i1 false)<br>
+  ret void<br>
+}<br>
+<br>
 declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i1)<br>
 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture readonly, i64, i1)<br>
 declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i1)<br>
 declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture readonly, i32, i1)<br>
 declare void @llvm.memset.p0i8.i128(i8* nocapture, i8, i128, i1)<br>
 declare void @llvm.memcpy.p0i8.p0i8.i128(i8* nocapture, i8* nocapture readonly, i128, i1)<br>
+declare void @llvm.memset.p0.i64(ptr nocapture, i8, i64, i1)<br>
+declare void @llvm.memcpy.p0.p0.i64(ptr nocapture, ptr nocapture readonly, i64, i1)<br>
 declare void @call()<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>
</blockquote></div>