-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
CodeGen: Use a single SlotTracker in MachineFunction::print()
Expose enough of the IR-level `SlotTracker` so that `MachineFunction::print()` can use a single one for printing `BasicBlock`s. Next step would be to lift this through a few more APIs so that we can make other print methods faster. Fixes PR23865, changing the runtime of `llc -print-machineinstrs` from many minutes (killed after 3 minutes, but it wasn't very close) to 13 seconds for a 502185 line dump. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@240842 91177308-0d34-0410-b5e6-96231b3b80d8
- Loading branch information
1 parent
0be7d0c
commit 9a61a42
Showing
6 changed files
with
162 additions
and
22 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
//===-- llvm/IR/ModuleSlotTracker.h -----------------------------*- C++ -*-===// | ||
// | ||
// The LLVM Compiler Infrastructure | ||
// | ||
// This file is distributed under the University of Illinois Open Source | ||
// License. See LICENSE.TXT for details. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef LLVM_IR_MODULESLOTTRACKER_H | ||
#define LLVM_IR_MODULESLOTTRACKER_H | ||
|
||
#include <memory> | ||
|
||
namespace llvm { | ||
|
||
class Module; | ||
class Function; | ||
class SlotTracker; | ||
|
||
/// Manage lifetime of a slot tracker for printing IR. | ||
/// | ||
/// Wrapper around the \a SlotTracker used internally by \a AsmWriter. This | ||
/// class allows callers to share the cost of incorporating the metadata in a | ||
/// module or a function. | ||
/// | ||
/// If the IR changes from underneath \a ModuleSlotTracker, strings like | ||
/// "<badref>" will be printed, or, worse, the wrong slots entirely. | ||
class ModuleSlotTracker { | ||
/// Storage for a slot tracker. | ||
std::unique_ptr<SlotTracker> MachineStorage; | ||
|
||
const Module *M = nullptr; | ||
const Function *F = nullptr; | ||
SlotTracker *Machine = nullptr; | ||
|
||
public: | ||
/// Wrap a preinitialized SlotTracker. | ||
ModuleSlotTracker(SlotTracker &Machine, const Module *M, | ||
const Function *F = nullptr); | ||
|
||
/// Construct a slot tracker from a module. | ||
/// | ||
/// If \a M is \c nullptr, uses a null slot tracker. | ||
explicit ModuleSlotTracker(const Module *M); | ||
|
||
/// Destructor to clean up storage. | ||
~ModuleSlotTracker(); | ||
|
||
SlotTracker *getMachine() const { return Machine; } | ||
const Module *getModule() const { return M; } | ||
const Function *getCurrentFunction() const { return F; } | ||
|
||
/// Incorporate the given function. | ||
/// | ||
/// Purge the currently incorporated function and incorporate \c F. If \c F | ||
/// is currently incorporated, this is a no-op. | ||
void incorporateFunction(const Function &F); | ||
}; | ||
|
||
} // end namespace llvm | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters