[llvm-commits] [llvm] r44858 - in /llvm/trunk: include/llvm/Bitcode/LLVMBitCodes.h include/llvm/DerivedTypes.h include/llvm/GlobalVariable.h include/llvm/Instructions.h lib/AsmParser/LLLexer.cpp lib/AsmParser/llvmAsmParser.y lib/Bitcode/Reader/BitcodeReader.cpp lib/Bitcode/Writer/BitcodeWriter.cpp lib/VMCore/AsmWriter.cpp lib/VMCore/Constants.cpp lib/VMCore/Globals.cpp lib/VMCore/Instructions.cpp lib/VMCore/Type.cpp test/Assembler/2007-12-11-AddressSpaces.ll tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp

Chris Lattner clattner at apple.com
Tue Dec 11 21:30:52 PST 2007


On Dec 11, 2007, at 9:16 PM, Christopher Lamb wrote:

>
> On Dec 11, 2007, at 4:12 PM, Chris Lattner wrote:
>
>> On Dec 11, 2007, at 12:59 AM, Christopher Lamb wrote:
>>
>>> =
>>> =
>>> ====================================================================
>>> ========
>>> --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
>>> +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Tue Dec 11
>>> 02:59:05 2007
>>> @@ -197,10 +197,14 @@
>>>        TypeVals.push_back(cast<IntegerType>(T)->getBitWidth());
>>>        break;
>>>      case Type::PointerTyID:
>>> +      const PointerType *PTy = cast<PointerType>(T);
>>> +      // POINTER: [pointee type] or [pointee type, address space]
>>>        Code = bitc::TYPE_CODE_POINTER;
>>> +      TypeVals.push_back(VE.getTypeID(PTy->getElementType()));
>>> +      if (unsigned AddressSpace = PTy->getAddressSpace())
>>> +        TypeVals.push_back(AddressSpace);
>>> +      else
>>> +        AbbrevToUse = PtrAbbrev;
>>>        break;
>>
>> This can be simplified.  In this code, I'd just unconditionally  
>> emit it:
>>
>>>      case Type::PointerTyID:
>>> +      const PointerType *PTy = cast<PointerType>(T);
>>> +      // POINTER: [pointee type] or [pointee type, address space]
>>>        Code = bitc::TYPE_CODE_POINTER;
>>> +      TypeVals.push_back(VE.getTypeID(PTy->getElementType()));
>>>        TypeVals.push_back(PTy->getAddressSpace());
>>>        AbbrevToUse = PtrAbbrev;
>>>        break;
>>
>> And change the abbreviation to match, which would apply only if the
>> addrspace is zero (and thus not encode it at all):
>>
>>    // Abbrev for TYPE_CODE_POINTER.
>>    BitCodeAbbrev *Abbv = new BitCodeAbbrev();
>>    Abbv->Add(BitCodeAbbrevOp(bitc::TYPE_CODE_POINTER));
>>    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed,
>>                              Log2_32_Ceil(VE.getTypes().size()+1)));
>>    Abbv->Add(BitCodeAbbrevOp(0));  // Addr space = 0.
>>    unsigned PtrAbbrev = Stream.EmitAbbrev(Abbv);
>>
>> The presence of the abbreviation means that any pointers with
>> addrspace 0 will not need per-instance space to represent this.
>
> This means moving the assert conditional into the if conditional and  
> removing the assert in BitstreamWriter.h. Sound OK?

Ah, right, sorry I misremembered.  In that case, make the PointerTyID  
handling code do something like:

   if (Addrspace == 0) AbbrevToUse = PtrAbbrev;

Thanks!

-Chris



More information about the llvm-commits mailing list