<div dir="ltr">So, uh, why not make getConstantStringInfo work for this case too, rather than duplicate it?<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 5, 2016 at 12:18 PM, Li Huang via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">lihuang added a comment.<br>
<br>
Sure, I will rebase the patch after 265431.<br>
<span class=""><br>
<br>
================<br>
Comment at: lib/Transforms/Utils/SimplifyLibCalls.cpp:541-558<br>
@@ +540,20 @@<br>
+  // [0, strlen(s)] or the string has a single null terminator '\0' at the end.<br>
+  if (GEPOperator *GEP = dyn_cast<GEPOperator>(Src)) {<br>
+    if (GEP->getNumOperands() != 3)<br>
+      return nullptr;<br>
+<br>
+    // We only try to simplify strlen when the pointer s points to an array<br>
+    // of i8. Otherwise, we would need to scale the offset x before doing the<br>
+    // subtraction. This will make the optimization more complex, and it's not<br>
+    // very useful because calling strlen for a pointer of other types is<br>
+    // very uncommon.<br>
+    PointerType *PT = cast<PointerType>(GEP->getOperand(0)->getType());<br>
+    ArrayType *AT = dyn_cast<ArrayType>(PT->getElementType());<br>
+    if (!AT || !AT->getElementType()->isIntegerTy(8))<br>
+      return nullptr;<br>
+<br>
+    // First index should be 0.<br>
+    const ConstantInt *FirstIdx = dyn_cast<ConstantInt>(GEP->getOperand(1));<br>
+    if (!FirstIdx || !FirstIdx->isZero())<br>
+      return nullptr;<br>
+<br>
----------------<br>
</span><span class="">spatel wrote:<br>
> These checks are included in getConstantStringInfo(). You do not need to repeat them here?<br>
</span>Yes these lines are the same lines in getConstantStringInfo(). The reason I didn't use getConstantStringInfo() here is it only works for GEP with a constant offset. In this case, the offset is a variable, and we need the same checks.<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<a href="http://reviews.llvm.org/D18230" rel="noreferrer" target="_blank">http://reviews.llvm.org/D18230</a><br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br></div>