[llvm-commits] CVS: llvm/lib/VMCore/Constants.cpp
Chris Lattner
sabre at nondot.org
Sun Jan 14 17:23:45 PST 2007
On Mon, 15 Jan 2007, Reid Spencer wrote:
>> Constant *ConstantExpr::getTrunc(Constant *C, const Type *Ty) {
>> - assert(C->getType()->isInteger() && "Trunc operand must be integer");
>> + assert(C->getType()->isIntegral() && "Trunc operand must be integer");
>
> This makes no sense. How can you trunc i1 to something smaller? The
> rules for trunc are SrcSize > DestSize. If SrcSize is 1 bit, what size
> is Dest? 0?
It doesn't have to make sense.
>> assert(Ty->isIntegral() && "Trunc produces only integral");
>> assert(C->getType()->getPrimitiveSizeInBits() > Ty->getPrimitiveSizeInBits()&&
>> "SrcTy must be larger than DestTy for Trunc!");
This assertion already catches the case you care about. The check above
is cheaper.
>> @@ -1505,7 +1505,7 @@
>>
>> Constant *ConstantExpr::getSExt(Constant *C, const Type *Ty) {
>> assert(C->getType()->isIntegral() && "SEXt operand must be integral");
>> - assert(Ty->isInteger() && "SExt produces only integer");
>> + assert(Ty->isIntegral() && "SExt produces only integer");
>
> This also makes no sense. The destination type cannot be i1. Rules for
> SExt are that SrcSize < DestSize. If DestSize is 1 bit, what could
> SrcSize be? 0?
Likewise.
>> @@ -1514,7 +1514,7 @@
>>
>> Constant *ConstantExpr::getZExt(Constant *C, const Type *Ty) {
>> assert(C->getType()->isIntegral() && "ZEXt operand must be integral");
>> - assert(Ty->isInteger() && "ZExt produces only integer");
>> + assert(Ty->isIntegral() && "ZExt produces only integer");
>
> Same issue as for SExt.
Likewise.
>> assert(C->getType()->getPrimitiveSizeInBits() < Ty->getPrimitiveSizeInBits()&&
>> "SrcTy must be smaller than DestTy for ZExt!");
>>
>> @@ -1649,15 +1649,15 @@
>> case Instruction::Sub:
>> case Instruction::Mul:
>> assert(C1->getType() == C2->getType() && "Op types should be identical!");
>> - assert((C1->getType()->isInteger() || C1->getType()->isFloatingPoint() ||
>> + assert((C1->getType()->isIntegral() || C1->getType()->isFloatingPoint() ||
>
> This I was going to talk to you about. This will fix the current CEE
> problem, assuming it applies to Instruction::Add as well.
It is necessary, but not sufficient. A regression in ConstantRange also
had to be fixed (now done).
-Chris
--
http://nondot.org/sabre/
http://llvm.org/
More information about the llvm-commits
mailing list