thavlak.nim test: improved the code style

This commit is contained in:
Araq 2019-11-21 15:34:45 +01:00
commit 48eed1f522

View file

@ -55,18 +55,17 @@ proc createNode(self: var Cfg, name: int): ref BasicBlock =
if self.startNode == nil: if self.startNode == nil:
self.startNode = result self.startNode = result
proc addEdge(self: var Cfg, edge: BasicBlockEdge) =
self.edgeList.add(edge)
proc getNumNodes(self: Cfg): int = proc getNumNodes(self: Cfg): int =
self.basicBlockMap.len self.basicBlockMap.len
proc newBasicBlockEdge(cfg: var Cfg, fromName: int, toName: int): BasicBlockEdge = proc newBasicBlockEdge(cfg: var Cfg, fromName: int, toName: int) =
result.fr = cfg.createNode(fromName) var result = BasicBlockEdge(
result.to = cfg.createNode(toName) fr: cfg.createNode(fromName),
to: cfg.createNode(toName)
)
result.fr.outEdges.add(result.to) result.fr.outEdges.add(result.to)
result.to.inEdges.add(result.fr) result.to.inEdges.add(result.fr)
cfg.addEdge(result) cfg.edgeList.add(result)
type type
SimpleLoop = object SimpleLoop = object
@ -92,15 +91,9 @@ proc newSimpleLoop(): ref SimpleLoop =
result.nestingLevel = 0 result.nestingLevel = 0
result.depthLevel = 0 result.depthLevel = 0
proc addNode(self: ref SimpleLoop, bb: ref BasicBlock) =
self.basicBlocks.add bb
proc addChildLoop(self: ref SimpleLoop, loop: ref SimpleLoop) =
self.children.add loop
proc setParent(self: ref SimpleLoop, parent: ref SimpleLoop) = proc setParent(self: ref SimpleLoop, parent: ref SimpleLoop) =
self.parent = parent self.parent = parent
self.parent.addChildLoop(self) self.parent.children.add self
proc setHeader(self: ref SimpleLoop, bb: ref BasicBlock) = proc setHeader(self: ref SimpleLoop, bb: ref BasicBlock) =
self.basicBlocks.add(bb) self.basicBlocks.add(bb)
@ -136,7 +129,7 @@ proc getNumLoops(self: Lsg): int =
type type
UnionFindNode = object UnionFindNode = object
parent: ref UnionFindNode parent {.cursor.}: ref UnionFindNode
bb: ref BasicBlock bb: ref BasicBlock
l: ref SimpleLoop l: ref SimpleLoop
dfsNumber: int dfsNumber: int
@ -335,7 +328,7 @@ proc findLoops(self: var HavlakLoopFinder): int =
# Collapse/Unionize nodes in a SCC to a single node # Collapse/Unionize nodes in a SCC to a single node
# For every SCC found, create a loop descriptor and link it in. # For every SCC found, create a loop descriptor and link it in.
# #
if (nodePool.len > 0) or (types[w] == BB_SELF): if nodePool.len > 0 or types[w] == BB_SELF:
var l = self.lsg.createNewLoop var l = self.lsg.createNewLoop
l.setHeader(nodeW) l.setHeader(nodeW)
@ -361,11 +354,11 @@ proc findLoops(self: var HavlakLoopFinder): int =
node.union(nodes[w]) node.union(nodes[w])
# Nested loops are not added, but linked together. # Nested loops are not added, but linked together.
var node_l = node.l var nodeL = node.l
if node_l != nil: if nodeL != nil:
node_l.setParent(l) nodeL.setParent(l)
else: else:
l.addNode(node.bb) l.basicBlocks.add node.bb
self.lsg.addLoop(l) self.lsg.addLoop(l)
@ -383,14 +376,14 @@ proc newLoopTesterApp(): LoopTesterApp =
proc buildDiamond(self: var LoopTesterApp, start: int): int = proc buildDiamond(self: var LoopTesterApp, start: int): int =
var bb0 = start var bb0 = start
var x1 = newBasicBlockEdge(self.cfg, bb0, bb0 + 1) newBasicBlockEdge(self.cfg, bb0, bb0 + 1)
var x2 = newBasicBlockEdge(self.cfg, bb0, bb0 + 2) newBasicBlockEdge(self.cfg, bb0, bb0 + 2)
var x3 = newBasicBlockEdge(self.cfg, bb0 + 1, bb0 + 3) newBasicBlockEdge(self.cfg, bb0 + 1, bb0 + 3)
var x4 = newBasicBlockEdge(self.cfg, bb0 + 2, bb0 + 3) newBasicBlockEdge(self.cfg, bb0 + 2, bb0 + 3)
result = bb0 + 3 result = bb0 + 3
proc buildConnect(self: var LoopTesterApp, start1: int, end1: int) = proc buildConnect(self: var LoopTesterApp, start1: int, end1: int) =
var x1 = newBasicBlockEdge(self.cfg, start1, end1) newBasicBlockEdge(self.cfg, start1, end1)
proc buildStraight(self: var LoopTesterApp, start: int, n: int): int = proc buildStraight(self: var LoopTesterApp, start: int, n: int): int =
for i in 0..n-1: for i in 0..n-1:
@ -398,11 +391,11 @@ proc buildStraight(self: var LoopTesterApp, start: int, n: int): int =
result = start + n result = start + n
proc buildBaseLoop(self: var LoopTesterApp, from1: int): int = proc buildBaseLoop(self: var LoopTesterApp, from1: int): int =
var header = self.buildStraight(from1, 1) var header = self.buildStraight(from1, 1)
var diamond1 = self.buildDiamond(header) var diamond1 = self.buildDiamond(header)
var d11 = self.buildStraight(diamond1, 1) var d11 = self.buildStraight(diamond1, 1)
var diamond2 = self.buildDiamond(d11) var diamond2 = self.buildDiamond(d11)
var footer = self.buildStraight(diamond2, 1) var footer = self.buildStraight(diamond2, 1)
self.buildConnect(diamond2, d11) self.buildConnect(diamond2, d11)
self.buildConnect(diamond1, header) self.buildConnect(diamond1, header)