annotate python/ir/basicblock.py @ 173:c1d2b6b9f9a7

Rework into passes
author Windel Bouwman
date Fri, 19 Apr 2013 12:42:21 +0200
parents 3eb9b9e2958d
children 3eb06f5fb987
rev   line source
171
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
1
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
2 class BasicBlock:
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
3 # Uninterrupted sequence of instructions.
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
4 def __init__(self, name):
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
5 self.name = name
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
6 self.instructions = []
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
7 def __repr__(self):
173
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
8 return 'BasicBlock {0}'.format(self.name)
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
9 def addInstruction(self, i):
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
10 i.parent = self
171
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
11 self.instructions.append(i)
173
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
12 addIns = addInstruction
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
13 def replaceInstruction(self, i1, i2):
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
14 idx = self.instructions.index(i1)
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
15 i1.parent = None
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
16 i2.parent = self
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
17 self.instructions[idx] = i2
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
18 def removeInstruction(self, i):
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
19 i.parent = None
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
20 self.instructions.remove(i)
171
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
21 def getInstructions(self):
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
22 return self.instructions
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
23 Instructions = property(getInstructions)
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
24 def getLastIns(self):
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
25 return self.instructions[-1]
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
26 LastIns = property(getLastIns)
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
27 @property
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
28 def Empty(self):
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
29 return len(self.instructions) == 0
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
30 @property
173
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
31 def FirstInstruction(self):
171
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
32 return self.instructions[0]
173
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
33 FirstIns = FirstInstruction
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
34 def getSuccessors(self):
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
35 if not self.Empty:
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
36 i = self.LastIns
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
37 return i.Targets
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
38 return []
c1d2b6b9f9a7 Rework into passes
Windel Bouwman
parents: 171
diff changeset
39 Successors = property(getSuccessors)
171
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
40