<div dir="ltr">Test case?</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Apr 5, 2018 at 5:41 PM Dávid Bolvanský via Phabricator <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">xbolva00 created this revision.<br>
xbolva00 added reviewers: dlj, ab, spatel, dblaikie.<br>
Herald added a subscriber: llvm-commits.<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="https://reviews.llvm.org/D45344" rel="noreferrer" target="_blank">https://reviews.llvm.org/D45344</a><br>
<br>
Files:<br>
  SimplifyLibCalls.cpp<br>
<br>
<br>
Index: SimplifyLibCalls.cpp<br>
===================================================================<br>
--- SimplifyLibCalls.cpp<br>
+++ SimplifyLibCalls.cpp<br>
@@ -840,12 +840,8 @@<br>
   if (!FillValue || FillValue->getZExtValue() != 0)<br>
     return nullptr;<br>
<br>
-  // TODO: We should handle the case where the malloc has more than one use.<br>
-  // This is necessary to optimize common patterns such as when the result of<br>
-  // the malloc is checked against null or when a memset intrinsic is used in<br>
-  // place of a memset library call.<br>
   auto *Malloc = dyn_cast<CallInst>(Memset->getArgOperand(0));<br>
-  if (!Malloc || !Malloc->hasOneUse())<br>
+  if (!Malloc)<br>
     return nullptr;<br>
<br>
   // Is the inner call really malloc()?<br>
@@ -2219,7 +2215,8 @@<br>
       return optimizeLog(CI, Builder);<br>
     case Intrinsic::sqrt:<br>
       return optimizeSqrt(CI, Builder);<br>
-    // TODO: Use foldMallocMemset() with memset intrinsic.<br>
+    case Intrinsic::memset:<br>
+      return foldMallocMemset(CI, Builder, *TLI);<br>
     default:<br>
       return nullptr;<br>
     }<br>
@@ -2393,7 +2390,8 @@<br>
<br>
 Value *FortifiedLibCallSimplifier::optimizeMemSetChk(CallInst *CI,<br>
                                                      IRBuilder<> &B) {<br>
-  // TODO: Try foldMallocMemset() here.<br>
+  if (auto *Calloc = foldMallocMemset(CI, B, *TLI))<br>
+    return Calloc;<br>
<br>
   if (isFortifiedCallFoldable(CI, 3, 2, false)) {<br>
     Value *Val = B.CreateIntCast(CI->getArgOperand(1), B.getInt8Ty(), false);<br>
<br>
<br>
</blockquote></div>