From 112f7e650aad3200b123174d8d835f989e707fcb Mon Sep 17 00:00:00 2001 From: Andreas Rumpf Date: Mon, 21 Jan 2019 19:56:58 +0100 Subject: [PATCH] destroyer.nim: code cleanup --- compiler/destroyer.nim | 67 ------------------------------------------ 1 file changed, 67 deletions(-) diff --git a/compiler/destroyer.nim b/compiler/destroyer.nim index 1881730e88..a97b49dacf 100644 --- a/compiler/destroyer.nim +++ b/compiler/destroyer.nim @@ -132,62 +132,6 @@ type emptyNode: PNode otherRead: PNode - -proc isHarmlessVar*(s: PSym; c: Con): bool = - # 's' is harmless if it used only once and its - # definition/usage are not split by any labels: - # - # let s = foo() - # while true: - # a[i] = s - # - # produces: - # - # def s - # L1: - # use s - # goto L1 - # - # let s = foo() - # if cond: - # a[i] = s - # else: - # a[j] = s - # - # produces: - # - # def s - # fork L2 - # use s - # goto L3 - # L2: - # use s - # L3 - # - # So this analysis is for now overly conservative, but correct. - var defsite = -1 - var usages = 0 - for i in 0.. 1: return false - inc usages - #of useWithinCall: - # if c.g[i].sym == s: return false - of goto, fork, InstrKind.join: - discard "we do not perform an abstract interpretation yet" - result = usages <= 1 - proc isLastRead(s: PSym; c: var Con; pc, comesFrom: int): int = var pc = pc while pc < c.g.len: @@ -248,17 +192,6 @@ proc isLastRead(n: PNode; c: var Con): bool = of def: if c.g[pc].sym == s: # the path lead to a redefinition of 's' --> abandon it. - when false: - # Too complex thinking ahead: In reality it is enough to find - # the 'def x' here on the current path to make the 'use x' valid. - # but for this the definition needs to dominate the usage: - var dominates = true - for j in pc+1 .. instr: - # not within the same basic block? - if c.g[j].kind in {goto, fork} and (j + c.g[j].dest) in (pc+1 .. instr): - #if j in c.jumpTargets: - dominates = false - if dominates: break break inc pc of use: