diff options
| author | azidar | 2015-08-17 14:04:59 -0700 |
|---|---|---|
| committer | azidar | 2015-08-17 14:04:59 -0700 |
| commit | 13c6ff8f7a91ddaaf1cddf17dc090eff9664e811 (patch) | |
| tree | c9300d3e14f19696b5df74b3e618562794485fcd /src | |
| parent | c7e4b472787cb9702dd4fbec53eb231bdf81b4d1 (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.stanza | 19 |
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) |
