Emit comment for gc.relocate showing base and derived pointers in human readable form.

Differential Revision: http://reviews.llvm.org/D9326



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236497 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Igor Laevsky 2015-05-05 13:20:42 +00:00
parent 672996e18e
commit a5f2faff5c

View File

@ -31,6 +31,7 @@
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/Statepoint.h"
#include "llvm/IR/TypeFinder.h"
#include "llvm/IR/UseListOrder.h"
#include "llvm/IR/ValueSymbolTable.h"
@ -2002,6 +2003,10 @@ private:
// printInfoComment - Print a little comment after the instruction indicating
// which slot it occupies.
void printInfoComment(const Value &V);
// printGCRelocateComment - print comment after call to the gc.relocate
// intrinsic indicating base and derived pointer names.
void printGCRelocateComment(const Value &V);
};
} // namespace
@ -2642,10 +2647,26 @@ void AssemblyWriter::printInstructionLine(const Instruction &I) {
Out << '\n';
}
/// printGCRelocateComment - print comment after call to the gc.relocate
/// intrinsic indicating base and derived pointer names.
void AssemblyWriter::printGCRelocateComment(const Value &V) {
assert(isGCRelocate(&V));
GCRelocateOperands GCOps(cast<Instruction>(&V));
Out << " ; (";
writeOperand(GCOps.basePtr(), false);
Out << ", ";
writeOperand(GCOps.derivedPtr(), false);
Out << ")";
}
/// printInfoComment - Print a little comment after the instruction indicating
/// which slot it occupies.
///
void AssemblyWriter::printInfoComment(const Value &V) {
if (isGCRelocate(&V))
printGCRelocateComment(V);
if (AnnotationWriter)
AnnotationWriter->printInfoComment(V, Out);
}