mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-01 07:30:31 +00:00
Support for llvm-bcanalyzer dumping of record array strings.
Summary: Adds support for automatically detecting and printing strings represented by Array abbrev operands, analogous to the string dumping performed for Blob abbrev operands. Enhanced the ThinLTO combined index test to check for the appropriate module and function strings. Reviewers: dexonsmith, joker.eph, davidxl Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D13553 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@249695 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4ecddf803a
commit
6b9f46e4e4
@ -8,13 +8,17 @@
|
||||
; RUN: not test -e %t3
|
||||
|
||||
; COMBINED: <MODULE_STRTAB_BLOCK
|
||||
; COMBINED-NEXT: <ENTRY
|
||||
; COMBINED-NEXT: <ENTRY
|
||||
; COMBINED-NEXT: <ENTRY {{.*}} record string = '{{.*}}/test/tools/gold/X86/Output/thinlto.ll.tmp{{.*}}.o'
|
||||
; COMBINED-NEXT: <ENTRY {{.*}} record string = '{{.*}}/test/tools/gold/X86/Output/thinlto.ll.tmp{{.*}}.o'
|
||||
; COMBINED-NEXT: </MODULE_STRTAB_BLOCK
|
||||
; COMBINED-NEXT: <FUNCTION_SUMMARY_BLOCK
|
||||
; COMBINED-NEXT: <COMBINED_ENTRY
|
||||
; COMBINED-NEXT: <COMBINED_ENTRY
|
||||
; COMBINED-NEXT: </FUNCTION_SUMMARY_BLOCK
|
||||
; COMBINED-NEXT: <VALUE_SYMTAB
|
||||
; COMBINED-NEXT: <COMBINED_FNENTRY {{.*}} record string = '{{f|g}}'
|
||||
; COMBINED-NEXT: <COMBINED_FNENTRY {{.*}} record string = '{{f|g}}'
|
||||
; COMBINED-NEXT: </VALUE_SYMTAB
|
||||
|
||||
define void @f() {
|
||||
entry:
|
||||
|
@ -499,14 +499,37 @@ static bool ParseBlock(BitstreamCursor &Stream, unsigned BlockID,
|
||||
GetCodeName(Code, BlockID, *Stream.getBitStreamReader(),
|
||||
CurStreamType))
|
||||
outs() << " codeid=" << Code;
|
||||
if (Entry.ID != bitc::UNABBREV_RECORD)
|
||||
const BitCodeAbbrev *Abbv = nullptr;
|
||||
if (Entry.ID != bitc::UNABBREV_RECORD) {
|
||||
Abbv = Stream.getAbbrev(Entry.ID);
|
||||
outs() << " abbrevid=" << Entry.ID;
|
||||
}
|
||||
|
||||
for (unsigned i = 0, e = Record.size(); i != e; ++i)
|
||||
outs() << " op" << i << "=" << (int64_t)Record[i];
|
||||
|
||||
outs() << "/>";
|
||||
|
||||
if (Abbv) {
|
||||
for (unsigned i = 1, e = Abbv->getNumOperandInfos(); i != e; ++i) {
|
||||
const BitCodeAbbrevOp &Op = Abbv->getOperandInfo(i);
|
||||
if (!Op.isEncoding() || Op.getEncoding() != BitCodeAbbrevOp::Array)
|
||||
continue;
|
||||
assert(i + 2 == e && "Array op not second to last");
|
||||
std::string Str;
|
||||
bool ArrayIsPrintable = true;
|
||||
for (unsigned j = i - 1, je = Record.size(); j != je; ++j) {
|
||||
if (!isprint(static_cast<unsigned char>(Record[j]))) {
|
||||
ArrayIsPrintable = false;
|
||||
break;
|
||||
}
|
||||
Str += (char)Record[j];
|
||||
}
|
||||
if (ArrayIsPrintable) outs() << " record string = '" << Str << "'";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (Blob.data()) {
|
||||
outs() << " blob data = ";
|
||||
if (ShowBinaryBlobs) {
|
||||
|
Loading…
Reference in New Issue
Block a user