blob: 86f7ea20c9be750572a303e7b7ee8a059b975f13 [file] [log] [blame]
Evan Cheng3f32d652008-06-04 09:18:41 +00001//===-- LiveStackAnalysis.cpp - Live Stack Slot Analysis ------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the live stack slot analysis pass. It is analogous to
11// live interval analysis except it's analyzing liveness of stack slots rather
12// than registers.
13//
14//===----------------------------------------------------------------------===//
15
16#define DEBUG_TYPE "livestacks"
17#include "llvm/CodeGen/LiveStackAnalysis.h"
Lang Hamesf41538d2009-06-02 16:53:25 +000018#include "llvm/CodeGen/LiveIntervalAnalysis.h"
Evan Cheng3f32d652008-06-04 09:18:41 +000019#include "llvm/CodeGen/Passes.h"
20#include "llvm/Target/TargetRegisterInfo.h"
21#include "llvm/Support/Debug.h"
22#include "llvm/ADT/Statistic.h"
Lang Hamesf41538d2009-06-02 16:53:25 +000023#include <limits>
Evan Cheng3f32d652008-06-04 09:18:41 +000024using namespace llvm;
25
26char LiveStacks::ID = 0;
27static RegisterPass<LiveStacks> X("livestacks", "Live Stack Slot Analysis");
28
Lang Hamesf41538d2009-06-02 16:53:25 +000029void LiveStacks::scaleNumbering(int factor) {
30 // Scale the intervals.
31 for (iterator LI = begin(), LE = end(); LI != LE; ++LI) {
32 LI->second.scaleNumbering(factor);
33 }
34}
35
Evan Cheng3f32d652008-06-04 09:18:41 +000036void LiveStacks::getAnalysisUsage(AnalysisUsage &AU) const {
Evan Chengef901c52008-09-22 22:26:15 +000037 AU.setPreservesAll();
Evan Chengbbeeb2a2008-09-22 20:58:04 +000038 MachineFunctionPass::getAnalysisUsage(AU);
Evan Cheng3f32d652008-06-04 09:18:41 +000039}
40
41void LiveStacks::releaseMemory() {
42 // Release VNInfo memroy regions after all VNInfo objects are dtor'd.
43 VNInfoAllocator.Reset();
Evan Chengc781a242009-05-03 18:32:42 +000044 S2IMap.clear();
45 S2RCMap.clear();
Evan Cheng3f32d652008-06-04 09:18:41 +000046}
47
48bool LiveStacks::runOnMachineFunction(MachineFunction &) {
49 // FIXME: No analysis is being done right now. We are relying on the
50 // register allocators to provide the information.
51 return false;
52}
53
54/// print - Implement the dump method.
Evan Chengc781a242009-05-03 18:32:42 +000055void LiveStacks::print(std::ostream &O, const Module*) const {
Evan Cheng3f32d652008-06-04 09:18:41 +000056 O << "********** INTERVALS **********\n";
57 for (const_iterator I = begin(), E = end(); I != E; ++I) {
58 I->second.print(O);
Evan Chengc781a242009-05-03 18:32:42 +000059 int Slot = I->first;
60 const TargetRegisterClass *RC = getIntervalRegClass(Slot);
61 if (RC)
62 O << " [" << RC->getName() << "]\n";
63 else
64 O << " [Unknown]\n";
Evan Cheng3f32d652008-06-04 09:18:41 +000065 }
66}