<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jun 4, 2015 at 12:01 AM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: majnemer<br>
Date: Thu Jun  4 02:01:56 2015<br>
New Revision: 239015<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D239015-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=QjjC3Coj4uMUTR6wxsCNdOC49CGwy77ek2IeWs-jZ2Q&s=a5XPn6-XxMpRg8k3maTByNJs8SGMyK3Aj_ib3YAtZ-w&e=" target="_blank">http://llvm.org/viewvc/llvm-project?rev=239015&view=rev</a><br>
Log:<br>
[ConstantFold] Don't skip the first gep index when folding geps<br>
<br>
We neglected to check if the first index made the GEP ineligible for<br>
'inbounds'.<br></blockquote><div><br>Thanks!<br> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
This fixes PR23753.<br>
<br>
Added:<br>
    llvm/trunk/test/Transforms/LoopStrengthReduce/pr23753.ll<br>
Modified:<br>
    llvm/trunk/lib/IR/ConstantFold.cpp<br>
<br>
Modified: llvm/trunk/lib/IR/ConstantFold.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_IR_ConstantFold.cpp-3Frev-3D239015-26r1-3D239014-26r2-3D239015-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=QjjC3Coj4uMUTR6wxsCNdOC49CGwy77ek2IeWs-jZ2Q&s=HWcOqPpSAgBXECsVQ0d9Qh07lZGadNnmYFDDxV1jWjg&e=" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/ConstantFold.cpp?rev=239015&r1=239014&r2=239015&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/IR/ConstantFold.cpp (original)<br>
+++ llvm/trunk/lib/IR/ConstantFold.cpp Thu Jun  4 02:01:56 2015<br>
@@ -2165,9 +2165,9 @@ static Constant *ConstantFoldGetElementP<br>
   // factored out into preceding dimensions.<br>
   bool Unknown = false;<br>
   SmallVector<Constant *, 8> NewIdxs;<br>
-  Type *Ty = PointeeTy;<br>
-  Type *Prev = C->getType();<br>
-  for (unsigned i = 1, e = Idxs.size(); i != e;<br>
+  Type *Ty = C->getType();<br>
+  Type *Prev = nullptr;<br>
+  for (unsigned i = 0, e = Idxs.size(); i != e;<br>
        Prev = Ty, Ty = cast<CompositeType>(Ty)->getTypeAtIndex(Idxs[i]), ++i) {<br>
     if (ConstantInt *CI = dyn_cast<ConstantInt>(Idxs[i])) {<br>
       if (isa<ArrayType>(Ty) || isa<VectorType>(Ty))<br>
<br>
Added: llvm/trunk/test/Transforms/LoopStrengthReduce/pr23753.ll<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_Transforms_LoopStrengthReduce_pr23753.ll-3Frev-3D239015-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=QjjC3Coj4uMUTR6wxsCNdOC49CGwy77ek2IeWs-jZ2Q&s=cTlBoVBiYNAGE19P7WhMqXSINNHBvUZs8ekJYB63fMw&e=" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopStrengthReduce/pr23753.ll?rev=239015&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/Transforms/LoopStrengthReduce/pr23753.ll (added)<br>
+++ llvm/trunk/test/Transforms/LoopStrengthReduce/pr23753.ll Thu Jun  4 02:01:56 2015<br>
@@ -0,0 +1,29 @@<br>
+; RUN: opt < %s -loop-reduce -S | FileCheck %s<br>
+<br>
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"<br>
+target triple = "x86_64-unknown-linux-gnu"<br>
+<br>
+@a = external global i32, align 4<br>
+@d = external global i8, align 1<br>
+<br>
+; CHECK-LABEL: void @f<br>
+define void @f() {<br>
+entry:<br>
+  br label %for.body<br>
+<br>
+for.body:<br>
+  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.body ]<br>
+  %arrayidx = getelementptr inbounds i32, i32* @a, i64 %indvars.iv<br>
+  %cmp = icmp ne i32* %arrayidx, bitcast (i8* @d to i32*)<br>
+  %indvars.iv.next = add i64 %indvars.iv, 1<br>
+  br i1 %cmp, label %for.body, label %for.end<br>
+<br>
+; CHECK:       %[[phi:.*]] = phi i8* [ %[[gep:.*]], {{.*}} ], [ getelementptr (i8, i8* @d, i64 sub (i64 4, i64 ptrtoint (i32* @a to i64))), {{.*}} ]<br>
+; CHECK-NEXT:  %[[gep]]    = getelementptr i8, i8* %[[phi]], i64 -4<br>
+; CHECK-NEXT:  %[[cst:.*]] = bitcast i8* %[[gep]] to i32*<br>
+; CHECK-NEXT:  %[[cmp:.*]] = icmp ne i32* %[[cst]], null<br>
+; CHECK-NEXT:  br i1 %[[cmp]]<br>
+<br>
+for.end:<br>
+  ret void<br>
+}<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></div>