<div dir="ltr">Thanks, fixed in r241054.<div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jun 29, 2015 at 3:58 PM, Michael Zolotukhin <span dir="ltr"><<a href="mailto:mzolotukhin@apple.com" target="_blank">mzolotukhin@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi David,<br>
<span><br>
> +; RUN: opt -slp-vectorizer -S %s<br>
</span>Is this a typo? Was it supposed to be ‘-loop-vectorize’?<br>
<br>
Thanks,<br>
Michael<br>
<div><div><br>
> On Jun 27, 2015, at 1:38 AM, David Majnemer <<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>> wrote:<br>
><br>
> Author: majnemer<br>
> Date: Sat Jun 27 03:38:17 2015<br>
> New Revision: 240877<br>
><br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D240877-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=f0Ep5Mnc1tu_ZE6OhmE9GYbjTGSedy7L5bzM7qTD9Dg&s=bonJE11wTQ1zeGihl8XezogU0m2SEp7BSqNlPzsIz5Q&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=240877&view=rev</a><br>
> Log:<br>
> [LoopVectorize] Pointer indicies may be wider than the pointer<br>
><br>
> If we are dealing with a pointer induction variable, isInductionPHI<br>
> gives back a step value of Stride / size of pointer.  However, we might<br>
> be indexing with a legal type wider than the pointer width.<br>
> Handle this by inserting casts where appropriate instead of crashing.<br>
><br>
> This fixes PR23954.<br>
><br>
> Added:<br>
>    llvm/trunk/test/Transforms/LoopVectorize/X86/ptr-indvar-crash.ll<br>
> Modified:<br>
>    llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp<br>
><br>
> Modified: llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp<br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_lib_Transforms_Vectorize_LoopVectorize.cpp-3Frev-3D240877-26r1-3D240876-26r2-3D240877-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=f0Ep5Mnc1tu_ZE6OhmE9GYbjTGSedy7L5bzM7qTD9Dg&s=hLbVZifeq-N2be-lxEwK6zV9wdYluv7lW-3Co6pTwDY&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp?rev=240877&r1=240876&r2=240877&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp (original)<br>
> +++ llvm/trunk/lib/Transforms/Vectorize/LoopVectorize.cpp Sat Jun 27 03:38:17 2015<br>
> @@ -850,6 +850,8 @@ public:<br>
>         return B.CreateAdd(StartValue, Index);<br>
><br>
>       case IK_PtrInduction:<br>
> +        assert(Index->getType() == StepValue->getType() &&<br>
> +               "Index type does not match StepValue type");<br>
>         if (StepValue->isMinusOne())<br>
>           Index = B.CreateNeg(Index);<br>
>         else if (!StepValue->isOne())<br>
> @@ -2798,7 +2800,10 @@ void InnerLoopVectorizer::createEmptyLoo<br>
>       break;<br>
>     }<br>
>     case LoopVectorizationLegality::IK_PtrInduction: {<br>
> -      EndValue = II.transform(BypassBuilder, CountRoundDown);<br>
> +      Value *CRD = BypassBuilder.CreateSExtOrTrunc(CountRoundDown,<br>
> +                                                   II.StepValue->getType(),<br>
> +                                                   "cast.crd");<br>
> +      EndValue = II.transform(BypassBuilder, CRD);<br>
>       EndValue->setName("ptr.ind.end");<br>
>       break;<br>
>     }<br>
> @@ -3448,12 +3453,14 @@ void InnerLoopVectorizer::widenPHIInstru<br>
>       // This is the normalized GEP that starts counting at zero.<br>
>       Value *NormalizedIdx =<br>
>           Builder.CreateSub(Induction, ExtendedIdx, "normalized.idx");<br>
> +      NormalizedIdx =<br>
> +          Builder.CreateSExtOrTrunc(NormalizedIdx, II.StepValue->getType());<br>
>       // This is the vector of results. Notice that we don't generate<br>
>       // vector geps because scalar geps result in better code.<br>
>       for (unsigned part = 0; part < UF; ++part) {<br>
>         if (VF == 1) {<br>
>           int EltIndex = part;<br>
> -          Constant *Idx = ConstantInt::get(Induction->getType(), EltIndex);<br>
> +          Constant *Idx = ConstantInt::get(NormalizedIdx->getType(), EltIndex);<br>
>           Value *GlobalIdx = Builder.CreateAdd(NormalizedIdx, Idx);<br>
>           Value *SclrGep = II.transform(Builder, GlobalIdx);<br>
>           SclrGep->setName("next.gep");<br>
> @@ -3464,7 +3471,7 @@ void InnerLoopVectorizer::widenPHIInstru<br>
>         Value *VecVal = UndefValue::get(VectorType::get(P->getType(), VF));<br>
>         for (unsigned int i = 0; i < VF; ++i) {<br>
>           int EltIndex = i + part * VF;<br>
> -          Constant *Idx = ConstantInt::get(Induction->getType(), EltIndex);<br>
> +          Constant *Idx = ConstantInt::get(NormalizedIdx->getType(), EltIndex);<br>
>           Value *GlobalIdx = Builder.CreateAdd(NormalizedIdx, Idx);<br>
>           Value *SclrGep = II.transform(Builder, GlobalIdx);<br>
>           SclrGep->setName("next.gep");<br>
><br>
> Added: llvm/trunk/test/Transforms/LoopVectorize/X86/ptr-indvar-crash.ll<br>
> URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_llvm_trunk_test_Transforms_LoopVectorize_X86_ptr-2Dindvar-2Dcrash.ll-3Frev-3D240877-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=f0Ep5Mnc1tu_ZE6OhmE9GYbjTGSedy7L5bzM7qTD9Dg&s=DKZbbUCk8Zj192g7JhfEXMrp_nDdqKlS7PxkbpTdzxo&e=" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/LoopVectorize/X86/ptr-indvar-crash.ll?rev=240877&view=auto</a><br>
> ==============================================================================<br>
> --- llvm/trunk/test/Transforms/LoopVectorize/X86/ptr-indvar-crash.ll (added)<br>
> +++ llvm/trunk/test/Transforms/LoopVectorize/X86/ptr-indvar-crash.ll Sat Jun 27 03:38:17 2015<br>
> @@ -0,0 +1,20 @@<br>
> +; RUN: opt -slp-vectorizer -S %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>
> +define void @f(i128 %p1) {<br>
> +entry:<br>
> +  br label %while.body<br>
> +<br>
> +while.body:<br>
> +  %p.05 = phi i8* [ %add.ptr, %while.body ], [ null, %entry ]<br>
> +  %p1.addr.04 = phi i128 [ %sub, %while.body ], [ %p1, %entry ]<br>
> +  %add.ptr = getelementptr inbounds i8, i8* %p.05, i32 2<br>
> +  %sub = add nsw i128 %p1.addr.04, -2<br>
> +  %tobool = icmp eq i128 %sub, 0<br>
> +  br i1 %tobool, label %while.end, label %while.body<br>
> +<br>
> +while.end:<br>
> +  ret void<br>
> +}<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br>
</div></div></blockquote></div><br></div></div>