mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-16 14:31:59 +00:00
Code Custodian:
- Widespread trailing space removal - A dash of OCD spacing to block align enums - joined a line that probably needed 80 cols a while back git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168566 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f4f14f68f6
commit
170a15e98d
@ -50,10 +50,10 @@ class ArchiveMember : public ilist_node<ArchiveMember> {
|
||||
SVR4SymbolTableFlag = 1, ///< Member is a SVR4 symbol table
|
||||
BSD4SymbolTableFlag = 2, ///< Member is a BSD4 symbol table
|
||||
LLVMSymbolTableFlag = 4, ///< Member is an LLVM symbol table
|
||||
BitcodeFlag = 8, ///< Member is bitcode
|
||||
HasPathFlag = 16, ///< Member has a full or partial path
|
||||
BitcodeFlag = 8, ///< Member is bitcode
|
||||
HasPathFlag = 16, ///< Member has a full or partial path
|
||||
HasLongFilenameFlag = 32, ///< Member uses the long filename syntax
|
||||
StringTableFlag = 64 ///< Member is an ar(1) format string table
|
||||
StringTableFlag = 64 ///< Member is an ar(1) format string table
|
||||
};
|
||||
|
||||
/// @}
|
||||
|
@ -26,8 +26,8 @@
|
||||
namespace llvm {
|
||||
namespace bitc {
|
||||
enum StandardWidths {
|
||||
BlockIDWidth = 8, // We use VBR-8 for block IDs.
|
||||
CodeLenWidth = 4, // Codelen are VBR-4.
|
||||
BlockIDWidth = 8, // We use VBR-8 for block IDs.
|
||||
CodeLenWidth = 4, // Codelen are VBR-4.
|
||||
BlockSizeWidth = 32 // BlockSize up to 2^32 32-bit words = 16GB per block.
|
||||
};
|
||||
|
||||
@ -69,10 +69,11 @@ namespace bitc {
|
||||
enum BlockInfoCodes {
|
||||
// DEFINE_ABBREV has magic semantics here, applying to the current SETBID'd
|
||||
// block, instead of the BlockInfo block.
|
||||
|
||||
BLOCKINFO_CODE_SETBID = 1, // SETBID: [blockid#]
|
||||
BLOCKINFO_CODE_BLOCKNAME = 2, // BLOCKNAME: [name]
|
||||
BLOCKINFO_CODE_SETRECORDNAME = 3 // BLOCKINFO_CODE_SETRECORDNAME: [id, name]
|
||||
|
||||
BLOCKINFO_CODE_SETBID = 1, // SETBID: [blockid#]
|
||||
BLOCKINFO_CODE_BLOCKNAME = 2, // BLOCKNAME: [name]
|
||||
BLOCKINFO_CODE_SETRECORDNAME = 3 // BLOCKINFO_CODE_SETRECORDNAME:
|
||||
// [id, name]
|
||||
};
|
||||
|
||||
} // End bitc namespace
|
||||
@ -99,7 +100,7 @@ public:
|
||||
explicit BitCodeAbbrevOp(Encoding E, uint64_t Data = 0)
|
||||
: Val(Data), IsLiteral(false), Enc(E) {}
|
||||
|
||||
bool isLiteral() const { return IsLiteral; }
|
||||
bool isLiteral() const { return IsLiteral; }
|
||||
bool isEncoding() const { return !IsLiteral; }
|
||||
|
||||
// Accessors for literals.
|
||||
@ -138,18 +139,18 @@ public:
|
||||
if (C >= 'a' && C <= 'z') return C-'a';
|
||||
if (C >= 'A' && C <= 'Z') return C-'A'+26;
|
||||
if (C >= '0' && C <= '9') return C-'0'+26+26;
|
||||
if (C == '.') return 62;
|
||||
if (C == '_') return 63;
|
||||
if (C == '.') return 62;
|
||||
if (C == '_') return 63;
|
||||
llvm_unreachable("Not a value Char6 character!");
|
||||
}
|
||||
|
||||
static char DecodeChar6(unsigned V) {
|
||||
assert((V & ~63) == 0 && "Not a Char6 encoded character!");
|
||||
if (V < 26) return V+'a';
|
||||
if (V < 26+26) return V-26+'A';
|
||||
if (V < 26) return V+'a';
|
||||
if (V < 26+26) return V-26+'A';
|
||||
if (V < 26+26+10) return V-26-26+'0';
|
||||
if (V == 62) return '.';
|
||||
if (V == 63) return '_';
|
||||
if (V == 62) return '.';
|
||||
if (V == 63) return '_';
|
||||
llvm_unreachable("Not a value Char6 character!");
|
||||
}
|
||||
|
||||
|
@ -35,12 +35,12 @@ public:
|
||||
unsigned BlockID;
|
||||
std::vector<BitCodeAbbrev*> Abbrevs;
|
||||
std::string Name;
|
||||
|
||||
|
||||
std::vector<std::pair<unsigned, std::string> > RecordNames;
|
||||
};
|
||||
private:
|
||||
OwningPtr<StreamableMemoryObject> BitcodeBytes;
|
||||
|
||||
|
||||
std::vector<BlockInfo> BlockInfoRecords;
|
||||
|
||||
/// IgnoreBlockInfoNames - This is set to true if we don't care about the
|
||||
@ -86,7 +86,7 @@ public:
|
||||
/// name information.
|
||||
void CollectBlockInfoNames() { IgnoreBlockInfoNames = false; }
|
||||
bool isIgnoringBlockInfoNames() { return IgnoreBlockInfoNames; }
|
||||
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Block Manipulation
|
||||
//===--------------------------------------------------------------------===//
|
||||
@ -95,7 +95,7 @@ public:
|
||||
/// block info block for this Bitstream. We only process it for the first
|
||||
/// cursor that walks over it.
|
||||
bool hasBlockInfoRecords() const { return !BlockInfoRecords.empty(); }
|
||||
|
||||
|
||||
/// getBlockInfo - If there is block info for the specified ID, return it,
|
||||
/// otherwise return null.
|
||||
const BlockInfo *getBlockInfo(unsigned BlockID) const {
|
||||
@ -126,74 +126,74 @@ class BitstreamCursor {
|
||||
friend class Deserializer;
|
||||
BitstreamReader *BitStream;
|
||||
size_t NextChar;
|
||||
|
||||
|
||||
/// CurWord - This is the current data we have pulled from the stream but have
|
||||
/// not returned to the client.
|
||||
uint32_t CurWord;
|
||||
|
||||
|
||||
/// BitsInCurWord - This is the number of bits in CurWord that are valid. This
|
||||
/// is always from [0...31] inclusive.
|
||||
unsigned BitsInCurWord;
|
||||
|
||||
|
||||
// CurCodeSize - This is the declared size of code values used for the current
|
||||
// block, in bits.
|
||||
unsigned CurCodeSize;
|
||||
|
||||
|
||||
/// CurAbbrevs - Abbrevs installed at in this block.
|
||||
std::vector<BitCodeAbbrev*> CurAbbrevs;
|
||||
|
||||
|
||||
struct Block {
|
||||
unsigned PrevCodeSize;
|
||||
std::vector<BitCodeAbbrev*> PrevAbbrevs;
|
||||
explicit Block(unsigned PCS) : PrevCodeSize(PCS) {}
|
||||
};
|
||||
|
||||
|
||||
/// BlockScope - This tracks the codesize of parent blocks.
|
||||
SmallVector<Block, 8> BlockScope;
|
||||
|
||||
|
||||
public:
|
||||
BitstreamCursor() : BitStream(0), NextChar(0) {
|
||||
}
|
||||
BitstreamCursor(const BitstreamCursor &RHS) : BitStream(0), NextChar(0) {
|
||||
operator=(RHS);
|
||||
}
|
||||
|
||||
|
||||
explicit BitstreamCursor(BitstreamReader &R) : BitStream(&R) {
|
||||
NextChar = 0;
|
||||
CurWord = 0;
|
||||
BitsInCurWord = 0;
|
||||
CurCodeSize = 2;
|
||||
}
|
||||
|
||||
|
||||
void init(BitstreamReader &R) {
|
||||
freeState();
|
||||
|
||||
|
||||
BitStream = &R;
|
||||
NextChar = 0;
|
||||
CurWord = 0;
|
||||
BitsInCurWord = 0;
|
||||
CurCodeSize = 2;
|
||||
}
|
||||
|
||||
|
||||
~BitstreamCursor() {
|
||||
freeState();
|
||||
}
|
||||
|
||||
|
||||
void operator=(const BitstreamCursor &RHS) {
|
||||
freeState();
|
||||
|
||||
|
||||
BitStream = RHS.BitStream;
|
||||
NextChar = RHS.NextChar;
|
||||
CurWord = RHS.CurWord;
|
||||
BitsInCurWord = RHS.BitsInCurWord;
|
||||
CurCodeSize = RHS.CurCodeSize;
|
||||
|
||||
|
||||
// Copy abbreviations, and bump ref counts.
|
||||
CurAbbrevs = RHS.CurAbbrevs;
|
||||
for (unsigned i = 0, e = static_cast<unsigned>(CurAbbrevs.size());
|
||||
i != e; ++i)
|
||||
CurAbbrevs[i]->addRef();
|
||||
|
||||
|
||||
// Copy block scope and bump ref counts.
|
||||
BlockScope = RHS.BlockScope;
|
||||
for (unsigned S = 0, e = static_cast<unsigned>(BlockScope.size());
|
||||
@ -204,14 +204,14 @@ public:
|
||||
Abbrevs[i]->addRef();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void freeState() {
|
||||
// Free all the Abbrevs.
|
||||
for (unsigned i = 0, e = static_cast<unsigned>(CurAbbrevs.size());
|
||||
i != e; ++i)
|
||||
CurAbbrevs[i]->dropRef();
|
||||
CurAbbrevs.clear();
|
||||
|
||||
|
||||
// Free all the Abbrevs in the block scope.
|
||||
for (unsigned S = 0, e = static_cast<unsigned>(BlockScope.size());
|
||||
S != e; ++S) {
|
||||
@ -222,10 +222,10 @@ public:
|
||||
}
|
||||
BlockScope.clear();
|
||||
}
|
||||
|
||||
|
||||
/// GetAbbrevIDWidth - Return the number of bits used to encode an abbrev #.
|
||||
unsigned GetAbbrevIDWidth() const { return CurCodeSize; }
|
||||
|
||||
|
||||
bool isEndPos(size_t pos) {
|
||||
return BitStream->getBitcodeBytes().isObjectEnd(static_cast<uint64_t>(pos));
|
||||
}
|
||||
@ -255,37 +255,37 @@ public:
|
||||
bool AtEndOfStream() {
|
||||
return isEndPos(NextChar) && BitsInCurWord == 0;
|
||||
}
|
||||
|
||||
|
||||
/// GetCurrentBitNo - Return the bit # of the bit we are reading.
|
||||
uint64_t GetCurrentBitNo() const {
|
||||
return NextChar*CHAR_BIT - BitsInCurWord;
|
||||
}
|
||||
|
||||
|
||||
BitstreamReader *getBitStreamReader() {
|
||||
return BitStream;
|
||||
}
|
||||
const BitstreamReader *getBitStreamReader() const {
|
||||
return BitStream;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/// JumpToBit - Reset the stream to the specified bit number.
|
||||
void JumpToBit(uint64_t BitNo) {
|
||||
uintptr_t ByteNo = uintptr_t(BitNo/8) & ~3;
|
||||
uintptr_t WordBitNo = uintptr_t(BitNo) & 31;
|
||||
assert(canSkipToPos(ByteNo) && "Invalid location");
|
||||
|
||||
|
||||
// Move the cursor to the right word.
|
||||
NextChar = ByteNo;
|
||||
BitsInCurWord = 0;
|
||||
CurWord = 0;
|
||||
|
||||
|
||||
// Skip over any bits that are already consumed.
|
||||
if (WordBitNo)
|
||||
Read(static_cast<unsigned>(WordBitNo));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
uint32_t Read(unsigned NumBits) {
|
||||
assert(NumBits <= 32 && "Cannot return more than 32 bits!");
|
||||
// If the field is fully contained by CurWord, return it quickly.
|
||||
@ -473,7 +473,7 @@ private:
|
||||
// If the abbrev specifies the literal value to use, use it.
|
||||
Vals.push_back(Op.getLiteralValue());
|
||||
}
|
||||
|
||||
|
||||
void ReadAbbreviatedField(const BitCodeAbbrevOp &Op,
|
||||
SmallVectorImpl<uint64_t> &Vals) {
|
||||
assert(!Op.isLiteral() && "Use ReadAbbreviatedLiteral for literals!");
|
||||
@ -494,13 +494,13 @@ private:
|
||||
}
|
||||
public:
|
||||
|
||||
/// getAbbrev - Return the abbreviation for the specified AbbrevId.
|
||||
/// getAbbrev - Return the abbreviation for the specified AbbrevId.
|
||||
const BitCodeAbbrev *getAbbrev(unsigned AbbrevID) {
|
||||
unsigned AbbrevNo = AbbrevID-bitc::FIRST_APPLICATION_ABBREV;
|
||||
assert(AbbrevNo < CurAbbrevs.size() && "Invalid abbrev #!");
|
||||
return CurAbbrevs[AbbrevNo];
|
||||
}
|
||||
|
||||
|
||||
unsigned ReadRecord(unsigned AbbrevID, SmallVectorImpl<uint64_t> &Vals,
|
||||
const char **BlobStart = 0, unsigned *BlobLen = 0) {
|
||||
if (AbbrevID == bitc::UNABBREV_RECORD) {
|
||||
@ -516,7 +516,7 @@ public:
|
||||
for (unsigned i = 0, e = Abbv->getNumOperandInfos(); i != e; ++i) {
|
||||
const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i);
|
||||
if (Op.isLiteral()) {
|
||||
ReadAbbreviatedLiteral(Op, Vals);
|
||||
ReadAbbreviatedLiteral(Op, Vals);
|
||||
} else if (Op.getEncoding() == BitCodeAbbrevOp::Array) {
|
||||
// Array case. Read the number of elements as a vbr6.
|
||||
unsigned NumElts = ReadVBR(6);
|
||||
@ -535,7 +535,7 @@ public:
|
||||
|
||||
// Figure out where the end of this blob will be including tail padding.
|
||||
size_t NewEnd = NextChar+((NumElts+3)&~3);
|
||||
|
||||
|
||||
// If this would read off the end of the bitcode file, just set the
|
||||
// record to empty and return.
|
||||
if (!canSkipToPos(NewEnd)) {
|
||||
@ -543,7 +543,7 @@ public:
|
||||
NextChar = BitStream->getBitcodeBytes().getExtent();
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// Otherwise, read the number of bytes. If we can return a reference to
|
||||
// the data, do so to avoid copying it.
|
||||
if (BlobStart) {
|
||||
@ -571,7 +571,7 @@ public:
|
||||
return ReadRecord(AbbrevID, Vals, &BlobStart, &BlobLen);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Abbrev Processing
|
||||
//===--------------------------------------------------------------------===//
|
||||
@ -594,14 +594,14 @@ public:
|
||||
}
|
||||
CurAbbrevs.push_back(Abbv);
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
|
||||
bool ReadBlockInfoBlock() {
|
||||
// If this is the second stream to get to the block info block, skip it.
|
||||
if (BitStream->hasBlockInfoRecords())
|
||||
return SkipBlock();
|
||||
|
||||
|
||||
if (EnterSubBlock(bitc::BLOCKINFO_BLOCK_ID)) return true;
|
||||
|
||||
SmallVector<uint64_t, 64> Record;
|
||||
@ -662,7 +662,7 @@ public:
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -273,7 +273,7 @@ public:
|
||||
|
||||
private:
|
||||
/// EmitAbbreviatedLiteral - Emit a literal value according to its abbrev
|
||||
/// record. This is a no-op, since the abbrev specifies the literal to use.
|
||||
/// record. This is a no-op, since the abbrev specifies the literal to use.
|
||||
template<typename uintty>
|
||||
void EmitAbbreviatedLiteral(const BitCodeAbbrevOp &Op, uintty V) {
|
||||
assert(Op.isLiteral() && "Not a literal");
|
||||
@ -282,13 +282,13 @@ private:
|
||||
assert(V == Op.getLiteralValue() &&
|
||||
"Invalid abbrev for record!");
|
||||
}
|
||||
|
||||
|
||||
/// EmitAbbreviatedField - Emit a single scalar field value with the specified
|
||||
/// encoding.
|
||||
template<typename uintty>
|
||||
void EmitAbbreviatedField(const BitCodeAbbrevOp &Op, uintty V) {
|
||||
assert(!Op.isLiteral() && "Literals should use EmitAbbreviatedLiteral!");
|
||||
|
||||
|
||||
// Encode the value as we are commanded.
|
||||
switch (Op.getEncoding()) {
|
||||
default: llvm_unreachable("Unknown encoding!");
|
||||
@ -305,7 +305,7 @@ private:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// EmitRecordWithAbbrevImpl - This is the core implementation of the record
|
||||
/// emission code. If BlobData is non-null, then it specifies an array of
|
||||
/// data that should be emitted as part of the Blob or Array operand that is
|
||||
@ -341,11 +341,11 @@ private:
|
||||
"Blob data and record entries specified for array!");
|
||||
// Emit a vbr6 to indicate the number of elements present.
|
||||
EmitVBR(static_cast<uint32_t>(BlobLen), 6);
|
||||
|
||||
|
||||
// Emit each field.
|
||||
for (unsigned i = 0; i != BlobLen; ++i)
|
||||
EmitAbbreviatedField(EltEnc, (unsigned char)BlobData[i]);
|
||||
|
||||
|
||||
// Know that blob data is consumed for assertion below.
|
||||
BlobData = 0;
|
||||
} else {
|
||||
@ -359,7 +359,7 @@ private:
|
||||
} else if (Op.getEncoding() == BitCodeAbbrevOp::Blob) {
|
||||
// If this record has blob data, emit it, otherwise we must have record
|
||||
// entries to encode this way.
|
||||
|
||||
|
||||
// Emit a vbr6 to indicate the number of elements present.
|
||||
if (BlobData) {
|
||||
EmitVBR(static_cast<uint32_t>(BlobLen), 6);
|
||||
@ -368,7 +368,7 @@ private:
|
||||
} else {
|
||||
EmitVBR(static_cast<uint32_t>(Vals.size()-RecordIdx), 6);
|
||||
}
|
||||
|
||||
|
||||
// Flush to a 32-bit alignment boundary.
|
||||
FlushToWord();
|
||||
|
||||
@ -376,7 +376,7 @@ private:
|
||||
if (BlobData) {
|
||||
for (unsigned i = 0; i != BlobLen; ++i)
|
||||
WriteByte((unsigned char)BlobData[i]);
|
||||
|
||||
|
||||
// Know that blob data is consumed for assertion below.
|
||||
BlobData = 0;
|
||||
} else {
|
||||
@ -399,7 +399,7 @@ private:
|
||||
assert(BlobData == 0 &&
|
||||
"Blob data specified for record that doesn't use it!");
|
||||
}
|
||||
|
||||
|
||||
public:
|
||||
|
||||
/// EmitRecord - Emit the specified record to the stream, using an abbrev if
|
||||
@ -420,10 +420,10 @@ public:
|
||||
|
||||
// Insert the code into Vals to treat it uniformly.
|
||||
Vals.insert(Vals.begin(), Code);
|
||||
|
||||
|
||||
EmitRecordWithAbbrev(Abbrev, Vals);
|
||||
}
|
||||
|
||||
|
||||
/// EmitRecordWithAbbrev - Emit a record with the specified abbreviation.
|
||||
/// Unlike EmitRecord, the code for the record should be included in Vals as
|
||||
/// the first entry.
|
||||
@ -431,7 +431,7 @@ public:
|
||||
void EmitRecordWithAbbrev(unsigned Abbrev, SmallVectorImpl<uintty> &Vals) {
|
||||
EmitRecordWithAbbrevImpl(Abbrev, Vals, StringRef());
|
||||
}
|
||||
|
||||
|
||||
/// EmitRecordWithBlob - Emit the specified record to the stream, using an
|
||||
/// abbrev that includes a blob at the end. The blob data to emit is
|
||||
/// specified by the pointer and length specified at the end. In contrast to
|
||||
@ -461,7 +461,7 @@ public:
|
||||
return EmitRecordWithAbbrevImpl(Abbrev, Vals, StringRef(ArrayData,
|
||||
ArrayLen));
|
||||
}
|
||||
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Abbrev Emission
|
||||
//===--------------------------------------------------------------------===//
|
||||
|
@ -30,7 +30,7 @@ LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef,
|
||||
LLVMModuleRef *OutModule,
|
||||
char **OutMessage) {
|
||||
std::string Message;
|
||||
|
||||
|
||||
*OutModule = wrap(ParseBitcodeFile(unwrap(MemBuf), *unwrap(ContextRef),
|
||||
&Message));
|
||||
if (!*OutModule) {
|
||||
@ -38,19 +38,19 @@ LLVMBool LLVMParseBitcodeInContext(LLVMContextRef ContextRef,
|
||||
*OutMessage = strdup(Message.c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Reads a module from the specified path, returning via the OutModule parameter
|
||||
a module provider which performs lazy deserialization. Returns 0 on success.
|
||||
Optionally returns a human-readable error message via OutMessage. */
|
||||
Optionally returns a human-readable error message via OutMessage. */
|
||||
LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef,
|
||||
LLVMMemoryBufferRef MemBuf,
|
||||
LLVMModuleRef *OutM,
|
||||
char **OutMessage) {
|
||||
std::string Message;
|
||||
|
||||
|
||||
*OutM = wrap(getLazyBitcodeModule(unwrap(MemBuf), *unwrap(ContextRef),
|
||||
&Message));
|
||||
if (!*OutM) {
|
||||
@ -58,7 +58,7 @@ LLVMBool LLVMGetBitcodeModuleInContext(LLVMContextRef ContextRef,
|
||||
*OutMessage = strdup(Message.c_str());
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
@ -1194,7 +1194,7 @@ bool BitcodeReader::ParseConstants() {
|
||||
dyn_cast_or_null<VectorType>(getTypeByID(Record[0]));
|
||||
if (OpTy == 0) return Error("Invalid CE_EXTRACTELT record");
|
||||
Constant *Op0 = ValueList.getConstantFwdRef(Record[1], OpTy);
|
||||
Constant *Op1 = ValueList.getConstantFwdRef(Record[2],
|
||||
Constant *Op1 = ValueList.getConstantFwdRef(Record[2],
|
||||
Type::getInt32Ty(Context));
|
||||
V = ConstantExpr::getExtractElement(Op0, Op1);
|
||||
break;
|
||||
@ -1206,7 +1206,7 @@ bool BitcodeReader::ParseConstants() {
|
||||
Constant *Op0 = ValueList.getConstantFwdRef(Record[0], OpTy);
|
||||
Constant *Op1 = ValueList.getConstantFwdRef(Record[1],
|
||||
OpTy->getElementType());
|
||||
Constant *Op2 = ValueList.getConstantFwdRef(Record[2],
|
||||
Constant *Op2 = ValueList.getConstantFwdRef(Record[2],
|
||||
Type::getInt32Ty(Context));
|
||||
V = ConstantExpr::getInsertElement(Op0, Op1, Op2);
|
||||
break;
|
||||
|
@ -27,14 +27,14 @@
|
||||
namespace llvm {
|
||||
class MemoryBuffer;
|
||||
class LLVMContext;
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// BitcodeReaderValueList Class
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
class BitcodeReaderValueList {
|
||||
std::vector<WeakVH> ValuePtrs;
|
||||
|
||||
|
||||
/// ResolveConstants - As we resolve forward-referenced constants, we add
|
||||
/// information about them to this vector. This allows us to resolve them in
|
||||
/// bulk instead of resolving each reference at a time. See the code in
|
||||
@ -57,17 +57,17 @@ public:
|
||||
void push_back(Value *V) {
|
||||
ValuePtrs.push_back(V);
|
||||
}
|
||||
|
||||
|
||||
void clear() {
|
||||
assert(ResolveConstants.empty() && "Constants not resolved?");
|
||||
ValuePtrs.clear();
|
||||
}
|
||||
|
||||
|
||||
Value *operator[](unsigned i) const {
|
||||
assert(i < ValuePtrs.size());
|
||||
return ValuePtrs[i];
|
||||
}
|
||||
|
||||
|
||||
Value *back() const { return ValuePtrs.back(); }
|
||||
void pop_back() { ValuePtrs.pop_back(); }
|
||||
bool empty() const { return ValuePtrs.empty(); }
|
||||
@ -75,12 +75,12 @@ public:
|
||||
assert(N <= size() && "Invalid shrinkTo request!");
|
||||
ValuePtrs.resize(N);
|
||||
}
|
||||
|
||||
|
||||
Constant *getConstantFwdRef(unsigned Idx, Type *Ty);
|
||||
Value *getValueFwdRef(unsigned Idx, Type *Ty);
|
||||
|
||||
|
||||
void AssignValue(Value *V, unsigned Idx);
|
||||
|
||||
|
||||
/// ResolveConstantForwardRefs - Once all constants are read, this method bulk
|
||||
/// resolves any forward references.
|
||||
void ResolveConstantForwardRefs();
|
||||
@ -93,7 +93,7 @@ public:
|
||||
|
||||
class BitcodeReaderMDValueList {
|
||||
std::vector<WeakVH> MDValuePtrs;
|
||||
|
||||
|
||||
LLVMContext &Context;
|
||||
public:
|
||||
BitcodeReaderMDValueList(LLVMContext& C) : Context(C) {}
|
||||
@ -106,12 +106,12 @@ public:
|
||||
Value *back() const { return MDValuePtrs.back(); }
|
||||
void pop_back() { MDValuePtrs.pop_back(); }
|
||||
bool empty() const { return MDValuePtrs.empty(); }
|
||||
|
||||
|
||||
Value *operator[](unsigned i) const {
|
||||
assert(i < MDValuePtrs.size());
|
||||
return MDValuePtrs[i];
|
||||
}
|
||||
|
||||
|
||||
void shrinkTo(unsigned N) {
|
||||
assert(N <= size() && "Invalid shrinkTo request!");
|
||||
MDValuePtrs.resize(N);
|
||||
@ -131,9 +131,9 @@ class BitcodeReader : public GVMaterializer {
|
||||
DataStreamer *LazyStreamer;
|
||||
uint64_t NextUnreadBit;
|
||||
bool SeenValueSymbolTable;
|
||||
|
||||
|
||||
const char *ErrorString;
|
||||
|
||||
|
||||
std::vector<Type*> TypeList;
|
||||
BitcodeReaderValueList ValueList;
|
||||
BitcodeReaderMDValueList MDValueList;
|
||||
@ -142,38 +142,38 @@ class BitcodeReader : public GVMaterializer {
|
||||
|
||||
std::vector<std::pair<GlobalVariable*, unsigned> > GlobalInits;
|
||||
std::vector<std::pair<GlobalAlias*, unsigned> > AliasInits;
|
||||
|
||||
|
||||
/// MAttributes - The set of attributes by index. Index zero in the
|
||||
/// file is for null, and is thus not represented here. As such all indices
|
||||
/// are off by one.
|
||||
std::vector<AttrListPtr> MAttributes;
|
||||
|
||||
|
||||
/// FunctionBBs - While parsing a function body, this is a list of the basic
|
||||
/// blocks for the function.
|
||||
std::vector<BasicBlock*> FunctionBBs;
|
||||
|
||||
|
||||
// When reading the module header, this list is populated with functions that
|
||||
// have bodies later in the file.
|
||||
std::vector<Function*> FunctionsWithBodies;
|
||||
|
||||
// When intrinsic functions are encountered which require upgrading they are
|
||||
// When intrinsic functions are encountered which require upgrading they are
|
||||
// stored here with their replacement function.
|
||||
typedef std::vector<std::pair<Function*, Function*> > UpgradedIntrinsicMap;
|
||||
UpgradedIntrinsicMap UpgradedIntrinsics;
|
||||
|
||||
// Map the bitcode's custom MDKind ID to the Module's MDKind ID.
|
||||
DenseMap<unsigned, unsigned> MDKindMap;
|
||||
|
||||
|
||||
// Several operations happen after the module header has been read, but
|
||||
// before function bodies are processed. This keeps track of whether
|
||||
// we've done this yet.
|
||||
bool SeenFirstFunctionBody;
|
||||
|
||||
|
||||
/// DeferredFunctionInfo - When function bodies are initially scanned, this
|
||||
/// map contains info about where to find deferred function body in the
|
||||
/// stream.
|
||||
DenseMap<Function*, uint64_t> DeferredFunctionInfo;
|
||||
|
||||
|
||||
/// BlockAddrFwdRefs - These are blockaddr references to basic blocks. These
|
||||
/// are resolved lazily when functions are loaded.
|
||||
typedef std::pair<unsigned, GlobalVariable*> BlockAddrRefTy;
|
||||
@ -208,11 +208,11 @@ public:
|
||||
void materializeForwardReferencedFunctions();
|
||||
|
||||
void FreeState();
|
||||
|
||||
|
||||
/// setBufferOwned - If this is true, the reader will destroy the MemoryBuffer
|
||||
/// when the reader is destroyed.
|
||||
void setBufferOwned(bool Owned) { BufferOwned = Owned; }
|
||||
|
||||
|
||||
virtual bool isMaterializable(const GlobalValue *GV) const;
|
||||
virtual bool isDematerializable(const GlobalValue *GV) const;
|
||||
virtual bool Materialize(GlobalValue *GV, std::string *ErrInfo = 0);
|
||||
@ -224,7 +224,7 @@ public:
|
||||
return true;
|
||||
}
|
||||
const char *getErrorString() const { return ErrorString; }
|
||||
|
||||
|
||||
/// @brief Main interface to parsing a bitcode buffer.
|
||||
/// @returns true if an error occurred.
|
||||
bool ParseBitcodeInto(Module *M);
|
||||
@ -251,7 +251,7 @@ private:
|
||||
return MAttributes[i-1];
|
||||
return AttrListPtr();
|
||||
}
|
||||
|
||||
|
||||
/// getValueTypePair - Read a value/type pair out of the specified record from
|
||||
/// slot 'Slot'. Increment Slot past the number of slots used in the record.
|
||||
/// Return true on failure.
|
||||
@ -339,7 +339,7 @@ private:
|
||||
bool FindFunctionInStream(Function *F,
|
||||
DenseMap<Function*, uint64_t>::iterator DeferredFunctionInfoIterator);
|
||||
};
|
||||
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -17,12 +17,11 @@ using namespace llvm;
|
||||
|
||||
int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {
|
||||
std::string ErrorInfo;
|
||||
raw_fd_ostream OS(Path, ErrorInfo,
|
||||
raw_fd_ostream::F_Binary);
|
||||
|
||||
raw_fd_ostream OS(Path, ErrorInfo, raw_fd_ostream::F_Binary);
|
||||
|
||||
if (!ErrorInfo.empty())
|
||||
return -1;
|
||||
|
||||
|
||||
WriteBitcodeToFile(unwrap(M), OS);
|
||||
return 0;
|
||||
}
|
||||
@ -30,7 +29,7 @@ int LLVMWriteBitcodeToFile(LLVMModuleRef M, const char *Path) {
|
||||
int LLVMWriteBitcodeToFD(LLVMModuleRef M, int FD, int ShouldClose,
|
||||
int Unbuffered) {
|
||||
raw_fd_ostream OS(FD, ShouldClose, Unbuffered);
|
||||
|
||||
|
||||
WriteBitcodeToFile(unwrap(M), OS);
|
||||
return 0;
|
||||
}
|
||||
|
@ -256,16 +256,16 @@ static void WriteTypeTable(const ValueEnumerator &VE, BitstreamWriter &Stream) {
|
||||
|
||||
switch (T->getTypeID()) {
|
||||
default: llvm_unreachable("Unknown type!");
|
||||
case Type::VoidTyID: Code = bitc::TYPE_CODE_VOID; break;
|
||||
case Type::HalfTyID: Code = bitc::TYPE_CODE_HALF; break;
|
||||
case Type::FloatTyID: Code = bitc::TYPE_CODE_FLOAT; break;
|
||||
case Type::DoubleTyID: Code = bitc::TYPE_CODE_DOUBLE; break;
|
||||
case Type::X86_FP80TyID: Code = bitc::TYPE_CODE_X86_FP80; break;
|
||||
case Type::FP128TyID: Code = bitc::TYPE_CODE_FP128; break;
|
||||
case Type::VoidTyID: Code = bitc::TYPE_CODE_VOID; break;
|
||||
case Type::HalfTyID: Code = bitc::TYPE_CODE_HALF; break;
|
||||
case Type::FloatTyID: Code = bitc::TYPE_CODE_FLOAT; break;
|
||||
case Type::DoubleTyID: Code = bitc::TYPE_CODE_DOUBLE; break;
|
||||
case Type::X86_FP80TyID: Code = bitc::TYPE_CODE_X86_FP80; break;
|
||||
case Type::FP128TyID: Code = bitc::TYPE_CODE_FP128; break;
|
||||
case Type::PPC_FP128TyID: Code = bitc::TYPE_CODE_PPC_FP128; break;
|
||||
case Type::LabelTyID: Code = bitc::TYPE_CODE_LABEL; break;
|
||||
case Type::MetadataTyID: Code = bitc::TYPE_CODE_METADATA; break;
|
||||
case Type::X86_MMXTyID: Code = bitc::TYPE_CODE_X86_MMX; break;
|
||||
case Type::LabelTyID: Code = bitc::TYPE_CODE_LABEL; break;
|
||||
case Type::MetadataTyID: Code = bitc::TYPE_CODE_METADATA; break;
|
||||
case Type::X86_MMXTyID: Code = bitc::TYPE_CODE_X86_MMX; break;
|
||||
case Type::IntegerTyID:
|
||||
// INTEGER: [width]
|
||||
Code = bitc::TYPE_CODE_INTEGER;
|
||||
|
@ -22,9 +22,9 @@ namespace {
|
||||
static char ID; // Pass identification, replacement for typeid
|
||||
explicit WriteBitcodePass(raw_ostream &o)
|
||||
: ModulePass(ID), OS(o) {}
|
||||
|
||||
|
||||
const char *getPassName() const { return "Bitcode Writer"; }
|
||||
|
||||
|
||||
bool runOnModule(Module &M) {
|
||||
WriteBitcodeToFile(&M, OS);
|
||||
return false;
|
||||
|
@ -95,7 +95,7 @@ ValueEnumerator::ValueEnumerator(const Module *M) {
|
||||
I->getAllMetadataOtherThanDebugLoc(MDs);
|
||||
for (unsigned i = 0, e = MDs.size(); i != e; ++i)
|
||||
EnumerateMetadata(MDs[i].second);
|
||||
|
||||
|
||||
if (!I->getDebugLoc().isUnknown()) {
|
||||
MDNode *Scope, *IA;
|
||||
I->getDebugLoc().getScopeAndInlinedAt(Scope, IA, I->getContext());
|
||||
@ -363,16 +363,16 @@ void ValueEnumerator::EnumerateType(Type *Ty) {
|
||||
if (StructType *STy = dyn_cast<StructType>(Ty))
|
||||
if (!STy->isLiteral())
|
||||
*TypeID = ~0U;
|
||||
|
||||
|
||||
// Enumerate all of the subtypes before we enumerate this type. This ensures
|
||||
// that the type will be enumerated in an order that can be directly built.
|
||||
for (Type::subtype_iterator I = Ty->subtype_begin(), E = Ty->subtype_end();
|
||||
I != E; ++I)
|
||||
EnumerateType(*I);
|
||||
|
||||
|
||||
// Refresh the TypeID pointer in case the table rehashed.
|
||||
TypeID = &TypeMap[Ty];
|
||||
|
||||
|
||||
// Check to see if we got the pointer another way. This can happen when
|
||||
// enumerating recursive types that hit the base case deeper than they start.
|
||||
//
|
||||
@ -380,10 +380,10 @@ void ValueEnumerator::EnumerateType(Type *Ty) {
|
||||
// then emit the definition now that all of its contents are available.
|
||||
if (*TypeID && *TypeID != ~0U)
|
||||
return;
|
||||
|
||||
|
||||
// Add this type now that its contents are all happily enumerated.
|
||||
Types.push_back(Ty);
|
||||
|
||||
|
||||
*TypeID = Types.size();
|
||||
}
|
||||
|
||||
@ -391,7 +391,7 @@ void ValueEnumerator::EnumerateType(Type *Ty) {
|
||||
// walk through it, enumerating the types of the constant.
|
||||
void ValueEnumerator::EnumerateOperandType(const Value *V) {
|
||||
EnumerateType(V->getType());
|
||||
|
||||
|
||||
if (const Constant *C = dyn_cast<Constant>(V)) {
|
||||
// If this constant is already enumerated, ignore it, we know its type must
|
||||
// be enumerated.
|
||||
@ -401,11 +401,11 @@ void ValueEnumerator::EnumerateOperandType(const Value *V) {
|
||||
// them.
|
||||
for (unsigned i = 0, e = C->getNumOperands(); i != e; ++i) {
|
||||
const Value *Op = C->getOperand(i);
|
||||
|
||||
|
||||
// Don't enumerate basic blocks here, this happens as operands to
|
||||
// blockaddress.
|
||||
if (isa<BasicBlock>(Op)) continue;
|
||||
|
||||
|
||||
EnumerateOperandType(Op);
|
||||
}
|
||||
|
||||
@ -482,7 +482,7 @@ void ValueEnumerator::incorporateFunction(const Function &F) {
|
||||
if (N->isFunctionLocal() && N->getFunction())
|
||||
FnLocalMDVector.push_back(N);
|
||||
}
|
||||
|
||||
|
||||
if (!I->getType()->isVoidTy())
|
||||
EnumerateValue(I);
|
||||
}
|
||||
|
@ -51,15 +51,15 @@ private:
|
||||
ValueList MDValues;
|
||||
SmallVector<const MDNode *, 8> FunctionLocalMDs;
|
||||
ValueMapType MDValueMap;
|
||||
|
||||
|
||||
typedef DenseMap<void*, unsigned> AttributeMapType;
|
||||
AttributeMapType AttributeMap;
|
||||
std::vector<AttrListPtr> Attributes;
|
||||
|
||||
|
||||
/// GlobalBasicBlockIDs - This map memoizes the basic block ID's referenced by
|
||||
/// the "getGlobalBasicBlockID" method.
|
||||
mutable DenseMap<const BasicBlock*, unsigned> GlobalBasicBlockIDs;
|
||||
|
||||
|
||||
typedef DenseMap<const Instruction*, unsigned> InstructionMapType;
|
||||
InstructionMapType InstructionMap;
|
||||
unsigned InstructionCount;
|
||||
@ -67,7 +67,7 @@ private:
|
||||
/// BasicBlocks - This contains all the basic blocks for the currently
|
||||
/// incorporated function. Their reverse mapping is stored in ValueMap.
|
||||
std::vector<const BasicBlock*> BasicBlocks;
|
||||
|
||||
|
||||
/// When a function is incorporated, this is the size of the Values list
|
||||
/// before incorporation.
|
||||
unsigned NumModuleValues;
|
||||
@ -111,20 +111,20 @@ public:
|
||||
Start = FirstFuncConstantID;
|
||||
End = FirstInstID;
|
||||
}
|
||||
|
||||
|
||||
const ValueList &getValues() const { return Values; }
|
||||
const ValueList &getMDValues() const { return MDValues; }
|
||||
const SmallVector<const MDNode *, 8> &getFunctionLocalMDValues() const {
|
||||
const SmallVector<const MDNode *, 8> &getFunctionLocalMDValues() const {
|
||||
return FunctionLocalMDs;
|
||||
}
|
||||
const TypeList &getTypes() const { return Types; }
|
||||
const std::vector<const BasicBlock*> &getBasicBlocks() const {
|
||||
return BasicBlocks;
|
||||
return BasicBlocks;
|
||||
}
|
||||
const std::vector<AttrListPtr> &getAttributes() const {
|
||||
return Attributes;
|
||||
}
|
||||
|
||||
|
||||
/// getGlobalBasicBlockID - This returns the function-specific ID for the
|
||||
/// specified basic block. This is relatively expensive information, so it
|
||||
/// should only be used by rare constructs such as address-of-label.
|
||||
@ -138,7 +138,7 @@ public:
|
||||
|
||||
private:
|
||||
void OptimizeConstants(unsigned CstStart, unsigned CstEnd);
|
||||
|
||||
|
||||
void EnumerateMDNodeOperands(const MDNode *N);
|
||||
void EnumerateMetadata(const Value *MD);
|
||||
void EnumerateFunctionLocalMetadata(const MDNode *N);
|
||||
@ -147,7 +147,7 @@ private:
|
||||
void EnumerateType(Type *T);
|
||||
void EnumerateOperandType(const Value *V);
|
||||
void EnumerateAttributes(const AttrListPtr &PAL);
|
||||
|
||||
|
||||
void EnumerateValueSymbolTable(const ValueSymbolTable &ST);
|
||||
void EnumerateNamedMetadata(const Module *M);
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user