Reid, I don't like this series of patches.  You're replacing one evil  
with another.  Please endeavor to figure out what type of cast is  
actually needed and put it in, rather than changing one sort of  
inferred cast into another.


> Index: llvm/lib/Analysis/ScalarEvolution.cpp
> diff -u llvm/lib/Analysis/ScalarEvolution.cpp:1.61 llvm/lib/ 
> Analysis/ScalarEvolution.cpp:1.62
> --- llvm/lib/Analysis/ScalarEvolution.cpp:1.61        Fri Dec  1 20:22:01  
> 2006
> +++ llvm/lib/Analysis/ScalarEvolution.cpp     Mon Dec  4 11:05:42 2006
> @@ -178,7 +178,8 @@
>    // Make sure that SCEVConstant instances are all unsigned.
>    if (V->getType()->isSigned()) {
>      const Type *NewTy = V->getType()->getUnsignedVersion();
> -    V = cast<ConstantInt>(ConstantExpr::getCast(V, NewTy));
> +    V = cast<ConstantInt>(
> +        ConstantExpr::getInferredCast(V, false, NewTy, false));
>    }

This is always a bitcast.

>    SCEVConstant *&R = (*SCEVConstants)[V];
> @@ -465,7 +466,7 @@
>      C = ConstantInt::get(Ty, Val);
>    else {
>      C = ConstantInt::get(Ty->getSignedVersion(), Val);
> -    C = ConstantExpr::getCast(C, Ty);
> +    C = ConstantExpr::getInferredCast(C, true, Ty, false);

With your constantint changes, you can just replace:

   else if (Ty->isSigned())
     C = ConstantInt::get(Ty, Val);
   else {
     C = ConstantInt::get(Ty->getSignedVersion(), Val);
     C = ConstantExpr::getInferredCast(C, true, Ty, false);
   }

with:

   else
     C = ConstantInt::get(Ty, Val);

Even if you kept the cast (which you shouldn't), it is always a bitcast.

> @@ -511,7 +512,8 @@
>      for (; NumSteps; --NumSteps)
>        Result *= Val-(NumSteps-1);
>      Constant *Res = ConstantInt::get(Type::ULongTy, Result);
> -    return SCEVUnknown::get(ConstantExpr::getCast(Res, V->getType 
> ()));
> +    return SCEVUnknown::get(
> +        ConstantExpr::getInferredCast(Res, false, V->getType(),  
> true));

I'd rather this be written as:

      if (V->getType() != Type::ULongTy)
        Res = ConstantExpr::getCast(Truncate, Res, V->getType());
      return Res;

>    }
>
>    const Type *Ty = V->getType();
> @@ -996,10 +998,11 @@
>        Constant *LHSCV = LHSC->getValue();
>        Constant *RHSCV = RHSC->getValue();
>        if (LHSCV->getType()->isUnsigned())
> -        LHSCV = ConstantExpr::getCast(LHSCV,
> -                                      LHSCV->getType()- 
> >getSignedVersion());
> +        LHSCV = ConstantExpr::getInferredCast(
> +            LHSCV, false, LHSCV->getType()->getSignedVersion(),  
> true);
>        if (RHSCV->getType()->isUnsigned())
> -        RHSCV = ConstantExpr::getCast(RHSCV, LHSCV->getType());
> +        RHSCV = ConstantExpr::getInferredCast(
> +            RHSCV, false, LHSCV->getType(), true);
>        return SCEVUnknown::get(ConstantExpr::getSDiv(LHSCV, RHSCV));
>      }
>    }

This is all dead now that types are signless for div, replace it with:

       return SCEVUnknown::get(ConstantExpr::getSDiv(LHSC->getValue 
(), RHSC->getValue()));

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

Reply via email to