[llvm-commits] CVS: llvm/lib/Transforms/Scalar/IndVarSimplify.cpp

Zhou Sheng zhousheng00 at gmail.com
Tue Jul 3 22:34:06 PDT 2007


Hi Chris,



> > The condition "IterationCount->getType() != LargestType" doesn't
> > mean the IterationCount->getType's bitwidth < LargestType's
> > so, sometimes, (like in this testcase), it need a trunc not ext.
> > This patch is to fix it.
>
> Ah, I see.  Thank you for checking in the testcase.   The reason this
> looked fishy to me is that the code attempts to insert the IV as the
> largest type, but that it could then need a zero extend.   Doesn't
> this mean the zero extend case (which I know you didn't put in
> there :) is really dead?  If so, please remove it and switch back to
> a simple:
>
>     if (IterationCount->getType() != LargestType)
>       IterationCount = SCEVTruncateExpr::get(IterationCount,
> LargestType);


No, it's incorrect. That will fail
llvm/test/Transforms/IndVarSimplify/exit_value_tests.llx ( which got an
assertion)
i think we should keep the extend code.


Sheng.




Thanks!  If this doesn't make any sense, please feel free to ask for
> clarification :)
>
> -Chris
>
> > Sheng
> >
> >
> >
> >   DOUT << "INDVARS: New CanIV: " << *IndVar;
> >>
> >>    if (!isa<SCEVCouldNotCompute>(IterationCount)) {
> >> -    if (IterationCount->getType() != LargestType)
> >> +    if (IterationCount->getType()->getPrimitiveSizeInBits() <
> >> +        LargestType->getPrimitiveSizeInBits())
> >>        IterationCount = SCEVZeroExtendExpr::get(IterationCount,
> >> LargestType);
> >> +    else if (IterationCount->getType() != LargestType)
> >> +      IterationCount = SCEVTruncateExpr::get(IterationCount,
> >> LargestType);
> >>      if (Instruction *DI = LinearFunctionTestReplace(L,
> >> IterationCount,Rewriter))
> >>        DeadInsts.insert(DI);
> >>    }
> >
> >
> > <testcase.bc>
> > ; ModuleID = 'testcase.bc'
> > target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-
> > i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64"
> > target triple = "i686-pc-linux-gnu"
> >
> > define i32 @testcase(i5 zext  %k) {
> > entry:
> >       br label %bb2
> >
> > bb:           ; preds = %bb2
> >       %tmp1 = add i32 %tmp2, %result          ; <i32> [#uses=1]
> >       %indvar_next1 = add i5 %k_0, 1          ; <i5> [#uses=1]
> >       br label %bb2
> >
> > bb2:          ; preds = %bb, %entry
> >       %k_0 = phi i5 [ 0, %entry ], [ %indvar_next1, %bb ]             ;
> <i5> [#uses=2]
> >       %result = phi i32 [ 0, %entry ], [ %tmp1, %bb ]         ; <i32>
> [#uses=2]
> >       %tmp2 = zext i5 %k_0 to i32             ; <i32> [#uses=1]
> >       %exitcond = icmp eq i32 %tmp2, 16               ; <i1> [#uses=1]
> >       br i1 %exitcond, label %bb3, label %bb
> >
> > bb3:          ; preds = %bb2
> >       ret i32 %result
> > }
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20070704/9ca48814/attachment.html>


More information about the llvm-commits mailing list