[llvm-commits] CAST patch: #3: lib/Transforms (except instcombine)

Chris Lattner clattner at apple.com
Tue Nov 21 07:56:53 PST 2006


On Nov 21, 2006, at 12:01 AM, Reid Spencer wrote:

> FYI ..
>
> On Mon, 2006-11-20 at 14:48 -0800, Chris Lattner wrote:
>
>> --- lib/Transforms/Scalar/ScalarReplAggregates.cpp 8 Nov 2006  
>> 06:47:33
>> -0000 1.49
>> +++ lib/Transforms/Scalar/ScalarReplAggregates.cpp 18 Nov 2006
>> 19:22:21 -0000
>> @@ -649,13 +649,13 @@ void SROA::ConvertUsesToScalar(Value *Pt
>>                                       "tmp", SI);
>>          } else {
>>            // If SV is signed, convert it to unsigned, so that the
>> next cast zero
>>            // extends the value.
>>            if (SV->getType()->isSigned())
>> -            SV = new CastInst(SV,
>> SV->getType()->getUnsignedVersion(),
>> +            SV = CastInst::getCast(SV,
>> SV->getType()->getUnsignedVersion(),
>>                                SV->getName(), SI);
>> -          SV = new CastInst(SV, Old->getType(), SV->getName(), SI);
>> +          SV = CastInst::getCast(SV, Old->getType(), SV->getName(),
>> SI);
>>            if (Offset && Offset < TD.getTypeSize(SV->getType())*8)
>>              SV = new ShiftInst(Instruction::Shl, SV,
>>                                 ConstantInt::get(Type::UByteTy,
>> Offset),
>>                                 SV->getName()+".adj", SI);
>>            // Mask out the bits we are about to insert from the old
>> value.
>>
>>
>> These two casts should just be:
>>
>>
>>            // Always zero extend the value.
>>                      if (different size)
>>              SV = new ZExtInst(SV, Old->getType(), SV->getName(),  
>> SI);
>>    else
>>  SV = new BitCast(..)
>>            if (Offset && Offset < TD.getTypeSize(SV->getType())*8)
>>              SV = new ShiftInst(Instruction::Shl, SV,
>>                                 ConstantInt::get(Type::UByteTy,
>> Offset),
>>                                 SV->getName()+".adj", SI);
>>            // Mask out the bits we are about to insert from the old
>> value.
>
> I tried this. It causes ZExt failures. I undid the change. The  
> might be
> some cases where sizeof(SV->getType()) == sizeof(Old->getType()).

In that case, won't the bitcast work?

-Chris



More information about the llvm-commits mailing list