CACAO
LivetimeAnalysisPass.hpp
Go to the documentation of this file.
1 /* src/vm/jit/compiler2/LivetimeAnalysisPass.hpp - LivetimeAnalysisPass
2 
3  Copyright (C) 2013
4  CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO
5 
6  This file is part of CACAO.
7 
8  This program is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License as
10  published by the Free Software Foundation; either version 2, or (at
11  your option) any later version.
12 
13  This program is distributed in the hope that it will be useful, but
14  WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  02110-1301, USA.
22 
23 */
24 
25 #ifndef _JIT_COMPILER2_LIVETIMEANALYSISPASS
26 #define _JIT_COMPILER2_LIVETIMEANALYSISPASS
27 
31 
32 MM_MAKE_NAME(LivetimeAnalysisPass)
33 
34 namespace cacao {
35 namespace jit {
36 namespace compiler2 {
37 
38 /**
39  * LivetimeAnalysisPass
40  *
41  * Based on the approach from "Linear scan register allocation on SSA form"
42  * by Wimmer and Franz @cite Wimmer2010.
43  */
44 class LivetimeAnalysisPass : public Pass, public memory::ManagerMixin<LivetimeAnalysisPass> {
45 public:
47  typedef LivetimeIntervalMapTy::const_iterator const_iterator;
48  typedef LivetimeIntervalMapTy::iterator iterator;
49 
52 private:
53 
54 
57 public:
58  static char ID;
60  virtual bool run(JITData &JD);
61  virtual PassUsage& get_PassUsage(PassUsage &PA) const;
62 
63  virtual bool verify() const;
64  virtual void initialize();
65 
67  return lti_map.begin();
68  }
69  const_iterator end() const {
70  return lti_map.end();
71  }
73  return lti_map.begin();
74  }
76  return lti_map.end();
77  }
78  std::size_t size() const {
79  return lti_map.size();
80  }
82  iterator i = lti_map.find(operand);
83  assert(i != lti_map.end());
84  return i->second;
85  }
86  OStream& print(OStream& OS) const;
87 };
88 
89 } // end namespace compiler2
90 } // end namespace jit
91 } // end namespace cacao
92 
93 #endif /* _JIT_COMPILER2_LIVETIMEANALYSISPASS */
94 
95 
96 /*
97  * These are local overrides for various environment variables in Emacs.
98  * Please do not remove this and leave it at the end of the file, where
99  * Emacs will automagically detect them.
100  * ---------------------------------------------------------------------
101  * Local variables:
102  * mode: c++
103  * indent-tabs-mode: t
104  * c-basic-offset: 4
105  * tab-width: 4
106  * End:
107  * vim:noexpandtab:sw=4:ts=4:
108  */
std::set< Key, Compare, Allocator< Key > > type
Definition: set.hpp:38
Pass superclass All compiler passes should inheritate this class.
Definition: Pass.hpp:48
alloc::map< MachineBasicBlock *, LiveInSetTy >::type LiveInMapTy
LivetimeIntervalMapTy::const_iterator const_iterator
Custom new/delete handler mixin.
Definition: Manager.hpp:43
#define MM_MAKE_NAME(x)
Definition: memstats.hpp:127
alloc::map< MachineOperand *, LivetimeInterval, MachineOperandComp >::type LivetimeIntervalMapTy
Stores the interdependencies of a pass.
Definition: PassUsage.hpp:55
Simple stream class for formatted output.
Definition: OStream.hpp:141
MIIterator i
OStream & OS
LivetimeIntervalMapTy & lti_map
Operands that can be directly used by the machine (register, memory, stackslot)
alloc::set< MachineOperand * >::type LiveInSetTy