diff options
-rw-r--r-- | llvm/test/tools/gold/X86/thinlto.ll | 8 | ||||
-rw-r--r-- | llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp | 25 |
2 files changed, 30 insertions, 3 deletions
diff --git a/llvm/test/tools/gold/X86/thinlto.ll b/llvm/test/tools/gold/X86/thinlto.ll index 296b9460005..b24e4af80bf 100644 --- a/llvm/test/tools/gold/X86/thinlto.ll +++ b/llvm/test/tools/gold/X86/thinlto.ll @@ -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: diff --git a/llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp b/llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp index 7243a6474e3..b67b89d018c 100644 --- a/llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp +++ b/llvm/tools/llvm-bcanalyzer/llvm-bcanalyzer.cpp @@ -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) { |