diff options
| -rw-r--r-- | llvm/lib/Bytecode/Reader/ConstantReader.cpp | 3 | ||||
| -rw-r--r-- | llvm/lib/Bytecode/Reader/Reader.cpp | 13 | ||||
| -rw-r--r-- | llvm/lib/Bytecode/Reader/ReaderInternals.h | 2 | ||||
| -rw-r--r-- | llvm/lib/Bytecode/Writer/Writer.cpp | 10 | 
4 files changed, 18 insertions, 10 deletions
diff --git a/llvm/lib/Bytecode/Reader/ConstantReader.cpp b/llvm/lib/Bytecode/Reader/ConstantReader.cpp index ec39a9f64c7..405745d14ad 100644 --- a/llvm/lib/Bytecode/Reader/ConstantReader.cpp +++ b/llvm/lib/Bytecode/Reader/ConstantReader.cpp @@ -306,7 +306,8 @@ bool BytecodeParser::parseConstPoolValue(const uchar *&Buf,  	  BCR_TRACE(5, "Creating new forward ref variable!\n");  	  // Create a placeholder for the global variable reference... -	  GlobalVariable *GVar = new GlobalVariable(PT->getValueType(), false); +	  GlobalVariable *GVar = +	    new GlobalVariable(PT->getValueType(), false, true);  	  // Keep track of the fact that we have a forward ref to recycle it  	  GlobalRefs.insert(make_pair(make_pair(PT, Slot), GVar)); diff --git a/llvm/lib/Bytecode/Reader/Reader.cpp b/llvm/lib/Bytecode/Reader/Reader.cpp index a076bffb3a2..7f02b9339f8 100644 --- a/llvm/lib/Bytecode/Reader/Reader.cpp +++ b/llvm/lib/Bytecode/Reader/Reader.cpp @@ -265,9 +265,12 @@ bool BytecodeParser::ParseMethod(const uchar *&Buf, const uchar *EndBuf,    const MethodType  *MTy  = dyn_cast<const MethodType>(PMTy->getValueType());    if (MTy == 0) return failure(true);  // Not ptr to method! +  unsigned isInternal; +  if (read_vbr(Buf, EndBuf, isInternal)) return failure(true); +    unsigned MethSlot = MethodSignatureList.front().second;    MethodSignatureList.pop_front(); -  Method *M = new Method(MTy); +  Method *M = new Method(MTy, isInternal != 0);    BCR_TRACE(2, "METHOD TYPE: " << MTy << endl); @@ -380,8 +383,9 @@ bool BytecodeParser::ParseModuleGlobalInfo(const uchar *&Buf, const uchar *End,    unsigned VarType;    if (read_vbr(Buf, End, VarType)) return failure(true);    while (VarType != Type::VoidTyID) { // List is terminated by Void -    // VarType Fields: bit0 = isConstant, bit1 = hasInitializer, bit2+ = slot# -    const Type *Ty = getType(VarType >> 2); +    // VarType Fields: bit0 = isConstant, bit1 = hasInitializer, +    // bit2 = isInternal, bit3+ = slot# +    const Type *Ty = getType(VarType >> 3);      if (!Ty || !Ty->isPointerType()) {         Error = "Global not pointer type!  Ty = " + Ty->getDescription();        return failure(true);  @@ -404,7 +408,8 @@ bool BytecodeParser::ParseModuleGlobalInfo(const uchar *&Buf, const uchar *End,      }      // Create the global variable... -    GlobalVariable *GV = new GlobalVariable(ElTy, VarType & 1, Initializer); +    GlobalVariable *GV = new GlobalVariable(ElTy, VarType & 1, VarType & 4, +					    Initializer);      int DestSlot = insertValue(GV, ModuleValues);      if (DestSlot == -1) return failure(true); diff --git a/llvm/lib/Bytecode/Reader/ReaderInternals.h b/llvm/lib/Bytecode/Reader/ReaderInternals.h index 50eed193939..fb34169d795 100644 --- a/llvm/lib/Bytecode/Reader/ReaderInternals.h +++ b/llvm/lib/Bytecode/Reader/ReaderInternals.h @@ -149,7 +149,7 @@ struct BBPlaceHolderHelper : public BasicBlock {  struct MethPlaceHolderHelper : public Method {    MethPlaceHolderHelper(const Type *Ty)  -    : Method(cast<const MethodType>(Ty)) { +    : Method(cast<const MethodType>(Ty), true) {    }  }; diff --git a/llvm/lib/Bytecode/Writer/Writer.cpp b/llvm/lib/Bytecode/Writer/Writer.cpp index d0b2eb40b05..c8ce40ba622 100644 --- a/llvm/lib/Bytecode/Writer/Writer.cpp +++ b/llvm/lib/Bytecode/Writer/Writer.cpp @@ -121,9 +121,10 @@ void BytecodeWriter::outputModuleInfoBlock(const Module *M) {      int Slot = Table.getValSlot(GV->getType());      assert(Slot != -1 && "Module global vars is broken!"); -    // Fields: bit0 = isConstant, bit1 = hasInitializer, bit2+ = slot# -    unsigned oSlot = ((unsigned)Slot << 2) | (GV->hasInitializer() << 1) |  -                        GV->isConstant(); +    // Fields: bit0 = isConstant, bit1 = hasInitializer, bit2=InternalLinkage, +    // bit3+ = slot# +    unsigned oSlot = ((unsigned)Slot << 3) | (GV->hasInternalLinkage() << 2) | +                     (GV->hasInitializer() << 1) | GV->isConstant();      output_vbr(oSlot, Out);      // If we have an initializer, output it now. @@ -150,9 +151,10 @@ void BytecodeWriter::outputModuleInfoBlock(const Module *M) {  void BytecodeWriter::processMethod(const Method *M) {    BytecodeBlock MethodBlock(BytecodeFormat::Method, Out); - +  output_vbr((unsigned)M->hasInternalLinkage(), Out);    // Only output the constant pool and other goodies if needed...    if (!M->isExternal()) { +      // Get slot information about the method...      Table.incorporateMethod(M);  | 

