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:
59  virtual bool run(JITData &JD);
60  virtual PassUsage& get_PassUsage(PassUsage &PA) const;
61 
62  virtual bool verify() const;
63  virtual void initialize();
64 
66  return lti_map.begin();
67  }
68  const_iterator end() const {
69  return lti_map.end();
70  }
72  return lti_map.begin();
73  }
75  return lti_map.end();
76  }
77  std::size_t size() const {
78  return lti_map.size();
79  }
81  iterator i = lti_map.find(operand);
82  assert(i != lti_map.end());
83  return i->second;
84  }
85  OStream& print(OStream& OS) const;
86 };
87 
88 } // end namespace compiler2
89 } // end namespace jit
90 } // end namespace cacao
91 
92 #endif /* _JIT_COMPILER2_LIVETIMEANALYSISPASS */
93 
94 
95 /*
96  * These are local overrides for various environment variables in Emacs.
97  * Please do not remove this and leave it at the end of the file, where
98  * Emacs will automagically detect them.
99  * ---------------------------------------------------------------------
100  * Local variables:
101  * mode: c++
102  * indent-tabs-mode: t
103  * c-basic-offset: 4
104  * tab-width: 4
105  * End:
106  * vim:noexpandtab:sw=4:ts=4:
107  */
std::set< Key, Compare, Allocator< Key > > type
Definition: set.hpp:38
Pass superclass All compiler passes should inheritate this class.
Definition: Pass.hpp:47
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:128
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