[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