On Fri, 2006-12-22 at 13:31 -0800, Chris Lattner wrote:

> 
> +  if (Res2 == CI) {
> +    // Make sure that sign of the Cmp and the sign of the Cast are
> the same.
> +    // For example, we might have:
> +    //    %A = sext short %X to uint
> +    //    %B = icmp ugt uint %A, 1330
> +    // It is incorrect to transform this into 
> +    //    %B = icmp ugt short %X, 1330 
> +    // because %A may have negative value. 
> +    //
> +    // However, it is OK if SrcTy is bool (See cast-set.ll testcase)
> +    // OR operation is EQ/NE.
> +    if (isSignedExt == isSignedCmp || SrcTy == Type::BoolTy ||
> ICI.isEquality())
> +      return new ICmpInst(ICI.getPredicate(), LHSCIOp, Res1);
> +    else
> +      return 0;
> +  }
> 
> 
> Can you explain why srcty == bool is a special case?

1. test/Regression/Transforms/InstCombine/JavaCompare.ll fails without
it.
2. Since Res1 is truncated to SrcTy, if the source of the LHS cast is
also bool,
   the compare is fine, type wise.
3. Since Res2 is Res1 casted back to the Cast's destination type and
Res2
   is equal to the RHS constant.

Without this we miss optimization opportunities.

Reid.


_______________________________________________
llvm-commits mailing list
llvm-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits

Reply via email to