[IR] Don't print "!DIExpression() = !DIExpression()" when dumping

Now that we print DIExpressions inline everywhere, we don't need to
print them once as an operand and again as a value. This is only really
visible when calling dump() or print() directly on a DIExpression during
debugging.

llvm-svn: 312168
This commit is contained in:
Reid Kleckner 2017-08-30 20:40:36 +00:00
parent 955bb84090
commit b95b427409
2 changed files with 18 additions and 1 deletions

View File

@ -3592,7 +3592,7 @@ static void printMetadataImpl(raw_ostream &ROS, const Metadata &MD,
/* FromValue */ true);
auto *N = dyn_cast<MDNode>(&MD);
if (OnlyAsOperand || !N)
if (OnlyAsOperand || !N || isa<DIExpression>(MD))
return;
OS << " = ";

View File

@ -6,6 +6,8 @@
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "llvm/BinaryFormat/Dwarf.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/LLVMContext.h"
@ -34,4 +36,19 @@ TEST(AsmWriterTest, DebugPrintDetachedInstruction) {
EXPECT_TRUE(r != std::string::npos);
}
TEST(AsmWriterTest, DumpDIExpression) {
LLVMContext Ctx;
uint64_t Ops[] = {
dwarf::DW_OP_constu, 4,
dwarf::DW_OP_minus,
dwarf::DW_OP_deref,
};
DIExpression *Expr = DIExpression::get(Ctx, Ops);
std::string S;
raw_string_ostream OS(S);
Expr->print(OS);
EXPECT_EQ("!DIExpression(DW_OP_constu, 4, DW_OP_minus, DW_OP_deref)",
OS.str());
}
}