[llvm-commits] [PATCH] Dump with LI Indices
Evan Cheng
evan.cheng at apple.com
Sat Aug 1 17:57:15 PDT 2009
Do we really need Dump.h? Since it's Machine specific, perhaps it's ok
just put it in MachineFunction.h?
Evan
On Jul 30, 2009, at 3:10 PM, David Greene wrote:
> Here's a repost of a patch to dump LiveInterval indices when
> calling print on a MachineFunction.
>
> I'm sure there are changes that have or will be requested that
> I've long since forgotten. :)
>
> Feedback needed.
>
> -Dave
>
> Index: include/llvm/CodeGen/LiveIntervalAnalysis.h
> ===================================================================
> --- include/llvm/CodeGen/LiveIntervalAnalysis.h (revision 77464)
> +++ include/llvm/CodeGen/LiveIntervalAnalysis.h (working copy)
> @@ -538,6 +538,37 @@
> void printRegName(unsigned reg) const;
> };
>
> + /// IntervalPrefixPrinter - Print live interval indices before each
> + /// instruction.
> + class IntervalPrefixPrinter : public PrefixPrinter {
> + private:
> + const LiveIntervals &liinfo;
> +
> + public:
> + IntervalPrefixPrinter(const LiveIntervals &lii)
> + : liinfo(lii) {};
> +
> + // We need null implementations of the other virtual functions to
> + // avoid warnings about hidden virtual functions.
> +
> + raw_ostream &operator()(raw_ostream &out,
> + const MachineBasicBlock &instr) const {
> + return out;
> + }
> +
> + raw_ostream &operator()(raw_ostream &out,
> + const MachineInstr &instr) const;
> +
> + std::ostream &operator()(std::ostream &out,
> + const MachineBasicBlock &instr) const {
> + return out;
> + }
> +
> + std::ostream &operator()(std::ostream &out,
> + const MachineInstr &instr) const {
> + return out;
> + }
> + };
> } // End llvm namespace
>
> #endif
> Index: include/llvm/CodeGen/MachineBasicBlock.h
> ===================================================================
> --- include/llvm/CodeGen/MachineBasicBlock.h (revision 77464)
> +++ include/llvm/CodeGen/MachineBasicBlock.h (working copy)
> @@ -16,6 +16,7 @@
>
> #include "llvm/CodeGen/MachineInstr.h"
> #include "llvm/ADT/GraphTraits.h"
> +#include "llvm/Support/Dump.h"
>
> namespace llvm {
>
> @@ -310,10 +311,18 @@
>
> // Debugging methods.
> void dump() const;
> - void print(std::ostream &OS) const;
> - void print(std::ostream *OS) const { if (OS) print(*OS); }
> - void print(raw_ostream &OS) const;
> - void print(raw_ostream *OS) const { if (OS) print(*OS); }
> + void print(std::ostream &OS,
> + const PrefixPrinter &prefix = PrefixPrinter()) const;
> + void print(std::ostream *OS,
> + const PrefixPrinter &prefix = PrefixPrinter()) const {
> + if (OS) print(*OS, prefix);
> + }
> + void print(raw_ostream &OS,
> + const PrefixPrinter &prefix = PrefixPrinter()) const;
> + void print(raw_ostream *OS,
> + const PrefixPrinter &prefix = PrefixPrinter()) const {
> + if (OS) print(*OS, prefix);
> + }
>
> /// getNumber - MachineBasicBlocks are uniquely numbered at the
> function
> /// level, unless they're not in a MachineFunction yet, in which
> case this
> Index: include/llvm/CodeGen/MachineFunction.h
> ===================================================================
> --- include/llvm/CodeGen/MachineFunction.h (revision 77464)
> +++ include/llvm/CodeGen/MachineFunction.h (working copy)
> @@ -20,6 +20,7 @@
>
> #include "llvm/ADT/ilist.h"
> #include "llvm/Support/DebugLoc.h"
> +#include "llvm/Support/Dump.h"
> #include "llvm/CodeGen/MachineBasicBlock.h"
> #include "llvm/Support/Annotation.h"
> #include "llvm/Support/Allocator.h"
> @@ -207,8 +208,12 @@
> /// print - Print out the MachineFunction in a format suitable for
> debugging
> /// to the specified stream.
> ///
> - void print(std::ostream &OS) const;
> - void print(std::ostream *OS) const { if (OS) print(*OS); }
> + void print(std::ostream &OS,
> + const PrefixPrinter &prefix = PrefixPrinter()) const;
> + void print(std::ostream *OS,
> + const PrefixPrinter &prefix = PrefixPrinter()) const {
> + if (OS) print(*OS, prefix);
> + }
>
> /// viewCFG - This function is meant for use from the debugger.
> You can
> just
> /// say 'call F->viewCFG()' and a ghostview window should pop up
> from the
> Index: include/llvm/Support/Dump.h
> ===================================================================
> --- include/llvm/Support/Dump.h (revision 0)
> +++ include/llvm/Support/Dump.h (revision 0)
> @@ -0,0 +1,60 @@
> +//===- llvm/Support/Dump.h - Easy way to tailor dump output -----*-
> C++
> -*-===//
> +//
> +// The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open
> Source
> +// License. See LICENSE.TXT for details.
> +//
> +//
> =
> =
> =
> ----------------------------------------------------------------------=
> ==//
> +//
> +// This file provides the PrefixPrinter interface to pass to
> MachineFunction
> +// and MachineBasicBlock print methods to output additional
> information
> before
> +// blocks and instructions are printed.
> +//
> +//
> =
> =
> =
> ----------------------------------------------------------------------=
> ==//
> +
> +#ifndef LLVM_SUPPORT_DUMP_H
> +#define LLVM_SUPPORT_DUMP_H
> +
> +#include <iosfwd>
> +
> +namespace llvm {
> +
> +class MachineBasicBlock;
> +class MachineInstr;
> +class raw_ostream;
> +
> +/// PrefixPrinter - Print some additional information before printing
> +/// basic blocks and instructions.
> +class PrefixPrinter {
> +public:
> + virtual ~PrefixPrinter();
> +
> + /// operator() - Print a prefix before each MachineBasicBlock
> + virtual raw_ostream &operator()(raw_ostream &out,
> + const MachineBasicBlock &) const {
> + return out;
> + }
> +
> + /// operator() - Print a prefix before each MachineInstr
> + virtual raw_ostream &operator()(raw_ostream &out,
> + const MachineInstr &) const {
> + return out;
> + }
> +
> + /// operator() - Print a prefix before each MachineBasicBlock
> + virtual std::ostream &operator()(std::ostream &out,
> + const MachineBasicBlock &) const {
> + return out;
> + }
> +
> + /// operator() - Print a prefix before each MachineInstr
> + virtual std::ostream &operator()(std::ostream &out,
> + const MachineInstr &) const {
> + return out;
> + }
> +};
> +
> +} // End llvm namespace
> +
> +#endif
> Index: lib/CodeGen/LiveIntervalAnalysis.cpp
> ===================================================================
> --- lib/CodeGen/LiveIntervalAnalysis.cpp (revision 77464)
> +++ lib/CodeGen/LiveIntervalAnalysis.cpp (working copy)
> @@ -2500,3 +2500,9 @@
>
> return LR;
> }
> +
> +raw_ostream &
> +IntervalPrefixPrinter::operator()(raw_ostream &out,
> + const MachineInstr &instr) const {
> + return out << liinfo.getInstructionIndex(&instr);
> +}
> Index: lib/CodeGen/MachineBasicBlock.cpp
> ===================================================================
> --- lib/CodeGen/MachineBasicBlock.cpp (revision 77464)
> +++ lib/CodeGen/MachineBasicBlock.cpp (working copy)
> @@ -153,12 +153,14 @@
> os << " %reg" << RegNo;
> }
>
> -void MachineBasicBlock::print(std::ostream &OS) const {
> +void MachineBasicBlock::print(std::ostream &OS,
> + const PrefixPrinter &prefix) const {
> raw_os_ostream RawOS(OS);
> - print(RawOS);
> + print(RawOS, prefix);
> }
>
> -void MachineBasicBlock::print(raw_ostream &OS) const {
> +void MachineBasicBlock::print(raw_ostream &OS,
> + const PrefixPrinter &prefix) const {
> const MachineFunction *MF = getParent();
> if(!MF) {
> OS << "Can't print out MachineBasicBlock because parent
> MachineFunction"
> @@ -191,7 +193,7 @@
> }
>
> for (const_iterator I = begin(); I != end(); ++I) {
> - OS << "\t";
> + prefix(OS, *I) << "\t";
> I->print(OS, &getParent()->getTarget());
> }
>
> Index: lib/CodeGen/MachineFunction.cpp
> ===================================================================
> --- lib/CodeGen/MachineFunction.cpp (revision 77464)
> +++ lib/CodeGen/MachineFunction.cpp (working copy)
> @@ -252,7 +252,8 @@
> print(*cerr.stream());
> }
>
> -void MachineFunction::print(std::ostream &OS) const {
> +void MachineFunction::print(std::ostream &OS,
> + const PrefixPrinter &prefix) const {
> OS << "# Machine code for " << Fn->getNameStr () << "():\n";
>
> // Print Frame Information
> @@ -294,8 +295,10 @@
> OS << "\n";
> }
>
> - for (const_iterator BB = begin(); BB != end(); ++BB)
> - BB->print(OS);
> + for (const_iterator BB = begin(); BB != end(); ++BB) {
> + prefix(OS, *BB);
> + BB->print(OS, prefix);
> + }
>
> OS << "\n# End machine code for " << Fn->getNameStr () << "().\n\n";
> }
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list