aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorazidar2015-08-17 14:04:59 -0700
committerazidar2015-08-17 14:04:59 -0700
commit13c6ff8f7a91ddaaf1cddf17dc090eff9664e811 (patch)
treec9300d3e14f19696b5df74b3e618562794485fcd /src
parentc7e4b472787cb9702dd4fbec53eb231bdf81b4d1 (diff)
Fixed bug where equality between expressions was incorrect, leading to
an optimization that eliminated some when statements. Added test case.
Diffstat (limited to 'src')
-rw-r--r--src/main/stanza/passes.stanza19
1 files changed, 10 insertions, 9 deletions
diff --git a/src/main/stanza/passes.stanza b/src/main/stanza/passes.stanza
index d3efb02e..9d2b1281 100644
--- a/src/main/stanza/passes.stanza
+++ b/src/main/stanza/passes.stanza
@@ -1242,9 +1242,10 @@ defmethod equal? (e1:Expression,e2:Expression) -> True|False :
if value(e1) == value(e2) : width(e1) == width(e2)
else : false
(e1:WRef,e2:WRef) : name(e1) == name(e2)
- ;(e1:DoPrim,e2:DoPrim) : TODO
- (e1:WSubfield,e2:WSubfield) : name(e1) == name(e2)
- ;(e1:Pad,e2:Pad) : width(e1) == width(e2) and value(e1) == value(e2)
+ (e1:WSubfield,e2:WSubfield) :
+ (name(e1) == name(e2)) and (exp(e1) == exp(e2))
+ (e1:WIndex,e2:WIndex) :
+ (value(e1) == value(e2)) and (exp(e1) == exp(e2))
(e1:DoPrim,e2:DoPrim) :
var are-equal? = op(e1) == op(e2)
for (x in args(e1),y in args(e2)) do :
@@ -1495,12 +1496,12 @@ defn build-tables (s:Stmt,
match(r) :
(r:SymbolicValue) : resets[i] = r
(r) : false
- ;println-debug("TABLE-C")
- ;for x in assign-c do : println-debug(x)
- ;println-debug("TABLE-A")
- ;for x in assign-a do : println-debug(x)
- ;println-debug("TABLE")
- ;for x in assign do : println-debug(x)
+ println-debug("TABLE-C")
+ for x in assign-c do : println-debug(x)
+ println-debug("TABLE-A")
+ for x in assign-a do : println-debug(x)
+ println-debug("TABLE")
+ for x in assign do : println-debug(x)
(s:Connect|OnReset) :
val key* = match(loc(s)) :
(e:WRef) : name(e)