From a5f2faff5cdd7ebf0bc9c3c12efa982dc55f882c Mon Sep 17 00:00:00 2001 From: Igor Laevsky Date: Tue, 5 May 2015 13:20:42 +0000 Subject: [PATCH] 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 --- lib/IR/AsmWriter.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/IR/AsmWriter.cpp b/lib/IR/AsmWriter.cpp index 6dfb7fa6b0f..6b575212301 100644 --- a/lib/IR/AsmWriter.cpp +++ b/lib/IR/AsmWriter.cpp @@ -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(&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); }