annotate python/ir/basicblock.py @ 268:5ec7580976d9

Op naar tree-IR
author Windel Bouwman
date Wed, 14 Aug 2013 20:12:40 +0200
parents 04c19282a5aa
children 5f8c04a8d26b
rev   line source
171
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
1
268
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
2 # from .instruction import Statement
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
3
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
4 class Block:
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
5 """
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
6 Uninterrupted sequence of instructions with a label at the start.
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
7 """
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
8 def __init__(self, name):
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
9 self.name = name
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
10 self.instructions = []
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
11
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
12 def __repr__(self):
268
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
13 return 'Block {0}'.format(self.name)
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
14
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
15 def addInstruction(self, i):
268
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
16 #assert isinstance(i, Statement)
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
17 i.parent = self
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
18 self.instructions.append(i)
205
d77cb5962cc5 Added some handcoded arm code generation
Windel Bouwman
parents: 177
diff changeset
19
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
20 def replaceInstruction(self, i1, i2):
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
21 idx = self.instructions.index(i1)
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
22 i1.parent = None
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
23 i1.delete()
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
24 i2.parent = self
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
25 self.instructions[idx] = i2
205
d77cb5962cc5 Added some handcoded arm code generation
Windel Bouwman
parents: 177
diff changeset
26
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
27 def removeInstruction(self, i):
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
28 i.parent = None
252
c4370696ccc7 added optimize function
Windel Bouwman
parents: 243
diff changeset
29 i.delete()
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
30 self.instructions.remove(i)
205
d77cb5962cc5 Added some handcoded arm code generation
Windel Bouwman
parents: 177
diff changeset
31
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
32 def getInstructions(self):
205
d77cb5962cc5 Added some handcoded arm code generation
Windel Bouwman
parents: 177
diff changeset
33 return self.instructions
243
ef683881c64e Remove various files
Windel Bouwman
parents: 239
diff changeset
34 Instructions = property(getInstructions)
205
d77cb5962cc5 Added some handcoded arm code generation
Windel Bouwman
parents: 177
diff changeset
35
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
36 def getLastIns(self):
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
37 return self.instructions[-1]
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
38 LastInstruction = property(getLastIns)
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
39
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
40 @property
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
41 def Empty(self):
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
42 return len(self.instructions) == 0
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
43
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
44 @property
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
45 def FirstInstruction(self):
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
46 return self.instructions[0]
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
47
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
48 def getSuccessors(self):
243
ef683881c64e Remove various files
Windel Bouwman
parents: 239
diff changeset
49 if not self.Empty:
268
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
50 return self.LastInstruction.Targets
243
ef683881c64e Remove various files
Windel Bouwman
parents: 239
diff changeset
51 return []
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
52 Successors = property(getSuccessors)
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
53
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
54 def getPredecessors(self):
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
55 preds = []
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
56 for bb in self.parent.BasicBlocks:
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
57 if self in bb.Successors:
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
58 preds.append(bb)
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
59 return preds
219
1fa3e0050b49 Expanded ad hoc code generator
Windel Bouwman
parents: 205
diff changeset
60 Predecessors = property(getPredecessors)
171
3eb9b9e2958d Improved IR code
Windel Bouwman
parents:
diff changeset
61
258
04c19282a5aa Added register allocator
Windel Bouwman
parents: 252
diff changeset
62 def precedes(self, other):
04c19282a5aa Added register allocator
Windel Bouwman
parents: 252
diff changeset
63 raise NotImplementedError()
04c19282a5aa Added register allocator
Windel Bouwman
parents: 252
diff changeset
64
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
65 def check(self):
268
5ec7580976d9 Op naar tree-IR
Windel Bouwman
parents: 258
diff changeset
66 pass
239
63bb40758066 added check
Windel Bouwman
parents: 219
diff changeset
67