From f96ae684c4be9c08901bde63b0df8ef5210e6aff Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Tue, 4 Jan 2011 21:10:05 +0000 Subject: Turn the EdgeBundles class into a stand-alone machine CFG analysis pass. The analysis will be needed by both the greedy register allocator and the X86FloatingPoint pass. It only needs to be computed once when the CFG doesn't change. This pass is very fast, usually showing up as 0.0% wall time. llvm-svn: 122832 --- llvm/lib/CodeGen/SplitKit.h | 38 +------------------------------------- 1 file changed, 1 insertion(+), 37 deletions(-) (limited to 'llvm/lib/CodeGen/SplitKit.h') diff --git a/llvm/lib/CodeGen/SplitKit.h b/llvm/lib/CodeGen/SplitKit.h index a6ba376..236986e 100644 --- a/llvm/lib/CodeGen/SplitKit.h +++ b/llvm/lib/CodeGen/SplitKit.h @@ -1,4 +1,4 @@ -//===-------- SplitKit.cpp - Toolkit for splitting live ranges --*- C++ -*-===// +//===-------- SplitKit.h - Toolkit for splitting live ranges ----*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -13,12 +13,9 @@ //===----------------------------------------------------------------------===// #include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/IntEqClasses.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/CodeGen/SlotIndexes.h" -#include - namespace llvm { class LiveInterval; @@ -40,39 +37,6 @@ template class DomTreeNodeBase; typedef DomTreeNodeBase MachineDomTreeNode; -/// EdgeBundles - Group CFG edges into equivalence classes where registers must -/// be allocated identically. This annotates the CFG to form a bipartite graph -/// where each block is connected to an ingoing and an outgoing bundle. -/// Edge bundles are simply numbered, there is no object representation. -class EdgeBundles { - const MachineFunction *MF; - - /// EC - Each edge bundle is an equivalence class. The keys are: - /// 2*BB->getNumber() -> Ingoing bundle. - /// 2*BB->getNumber()+1 -> Outgoing bundle. - IntEqClasses EC; - -public: - /// compute - Compute the edge bundles for MF. Bundles depend only on the CFG. - void compute(const MachineFunction *MF); - - /// getBundle - Return the ingoing (Out = false) or outgoing (Out = true) - /// bundle number for basic block #N - unsigned getBundle(unsigned N, bool Out) const { return EC[2 * N + Out]; } - - /// getMachineFunction - Return the last machine function computed. - const MachineFunction *getMachineFunction() const { return MF; } - - /// view - Visualize the annotated bipartite CFG with Graphviz. - void view() const; -}; - -/// Specialize WriteGraph, the standard implementation won't work. -raw_ostream &WriteGraph(raw_ostream &O, const EdgeBundles &G, - bool ShortNames = false, - const std::string &Title = ""); - - /// SplitAnalysis - Analyze a LiveInterval, looking for live range splitting /// opportunities. class SplitAnalysis { -- cgit v1.1