diff options
| author | azidar | 2015-02-19 08:28:54 -0800 |
|---|---|---|
| committer | azidar | 2015-02-19 08:28:54 -0800 |
| commit | 8c1c4225c340dc658f7d0956e8b231050c122abc (patch) | |
| tree | 93c438922163579d5f00b3f3984c0506f66f59fc /src | |
| parent | 50b5ce57d1b823a03725dd0aa2141f300c244bf1 (diff) | |
Added compiler flags to allow tests to select which passes they test.
Changed package names from chipper to firrtl
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/stanza/firrtl-ir.stanza | 2 | ||||
| -rw-r--r-- | src/main/stanza/firrtl-main.stanza | 27 | ||||
| -rw-r--r-- | src/main/stanza/ir-parser.stanza | 4 | ||||
| -rw-r--r-- | src/main/stanza/ir-utils.stanza | 26 | ||||
| -rw-r--r-- | src/main/stanza/passes.stanza | 44 |
5 files changed, 54 insertions, 49 deletions
diff --git a/src/main/stanza/firrtl-ir.stanza b/src/main/stanza/firrtl-ir.stanza index d924bdef..53902c1c 100644 --- a/src/main/stanza/firrtl-ir.stanza +++ b/src/main/stanza/firrtl-ir.stanza @@ -1,4 +1,4 @@ -defpackage chipper.ir2 : +defpackage firrtl.ir2 : import core import verse diff --git a/src/main/stanza/firrtl-main.stanza b/src/main/stanza/firrtl-main.stanza index 17672f3d..e8e01fd5 100644 --- a/src/main/stanza/firrtl-main.stanza +++ b/src/main/stanza/firrtl-main.stanza @@ -12,38 +12,19 @@ include("widthsolver.stanza") defpackage chmain : import core import verse - import chipper.parser - import chipper.passes + import firrtl.parser + import firrtl.passes import stanza.lexer import stanza.parser + import firrtl.ir-utils -defn split (s:String,c:Char) -> List<String> : - val empty = "" - - defn next-word (s:String,i:Int) -> String|False : - if i == length(s) : false - else: - if (s[i] == c): substring(s,0,i) - else: next-word(s,i + 1) - - val next-str = next-word(s,0) - if next-str == false : list() - else if next-str == empty : split(substring(s,1,length(s)),c) - else : - val str = next-str as String - List(str,split(substring(s,length(str)+1,length(s)),c)) - defn main () : val arg = commandline-arguments() - println(arg) val args = split(arg,' ') - println(args) - println(length(args)) - val lexed = lex-file(args[1]) val c = parse-firrtl(lexed) println(c) - run-passes(c) + run-passes(c,to-list(args[2])) main() diff --git a/src/main/stanza/ir-parser.stanza b/src/main/stanza/ir-parser.stanza index 679f1362..176a812c 100644 --- a/src/main/stanza/ir-parser.stanza +++ b/src/main/stanza/ir-parser.stanza @@ -1,7 +1,7 @@ -defpackage chipper.parser : +defpackage firrtl.parser : import core import verse - import chipper.ir2 + import firrtl.ir2 import stanza.rdparser import stanza.lexer diff --git a/src/main/stanza/ir-utils.stanza b/src/main/stanza/ir-utils.stanza index 9eac350c..7edbcb1c 100644 --- a/src/main/stanza/ir-utils.stanza +++ b/src/main/stanza/ir-utils.stanza @@ -1,7 +1,7 @@ -defpackage chipper.ir-utils : +defpackage firrtl.ir-utils : import core import verse - import chipper.ir2 + import firrtl.ir2 ;============== PRINTERS =================================== defmethod print (o:OutputStream, d:Direction) : @@ -227,3 +227,25 @@ defmethod children (c:Stmt) : (c:Begin) : body(c) (c) : List() +;=================== STRING OPS =============================== +public defn split (s:String,c:Char) -> List<String> : + val empty = "" + defn next-word (s:String,i:Int) -> String|False : + if i == length(s) : false + else: + if (s[i] == c): substring(s,0,i) + else: next-word(s,i + 1) + + val next-str = next-word(s,0) + if next-str == false : list() + else if next-str == empty : split(substring(s,1,length(s)),c) + else : + val str = next-str as String + List(str,split(substring(s,length(str)+1,length(s)),c)) + +public defn contains (l:List<Char>, c:Char) : + label<True|False> myret : + for x in l do : + if x == c : myret(true) + false + diff --git a/src/main/stanza/passes.stanza b/src/main/stanza/passes.stanza index 03a9583b..6051ac8d 100644 --- a/src/main/stanza/passes.stanza +++ b/src/main/stanza/passes.stanza @@ -1,8 +1,8 @@ -defpackage chipper.passes : +defpackage firrtl.passes : import core import verse - import chipper.ir2 - import chipper.ir-utils + import firrtl.ir2 + import firrtl.ir-utils import widthsolver ;============== EXCEPTIONS ================================= @@ -1856,28 +1856,30 @@ defn inline-instances (c:Circuit) : ;============= DRIVER ====================================== -public defn run-passes (c: Circuit) : +public defn run-passes (c: Circuit, p: List<Char>) : var c*:Circuit = c defn do-stage (name:String, f: Circuit -> Circuit) : println(name) c* = f(c*) - println(c*) - println("\n\n\n\n") - - do-stage("Working IR", to-working-ir) - do-stage("Resolve Kinds", resolve-kinds) - ;do-stage("Make Explicit Reset", make-explicit-reset) - ;do-stage("Infer Types", infer-types) - ;do-stage("Infer Directions", infer-directions) - ;do-stage("Expand Accessors", expand-accessors) - ;do-stage("Flatten Bundles", flatten-bundles) - ;do-stage("Expand Bundles", expand-bundles) - ;do-stage("Expand Multi Connects", expand-multi-connects) - ;do-stage("Expand Whens", expand-whens) - ;do-stage("Structural Form", structural-form) - ;do-stage("Infer Widths", infer-widths) - ;do-stage("Pad Widths", pad-widths) - ;do-stage("Inline Instances", inline-instances) + + + if contains(p,'a') : do-stage("Working IR", to-working-ir) + if contains(p,'b') : do-stage("Resolve Kinds", resolve-kinds) + if contains(p,'c') : do-stage("Make Explicit Reset", make-explicit-reset) + if contains(p,'d') : do-stage("Infer Types", infer-types) + if contains(p,'e') : do-stage("Infer Directions", infer-directions) + if contains(p,'f') : do-stage("Expand Accessors", expand-accessors) + if contains(p,'g') : do-stage("Flatten Bundles", flatten-bundles) + if contains(p,'h') : do-stage("Expand Bundles", expand-bundles) + if contains(p,'i') : do-stage("Expand Multi Connects", expand-multi-connects) + if contains(p,'j') : do-stage("Expand Whens", expand-whens) + if contains(p,'k') : do-stage("Structural Form", structural-form) + if contains(p,'l') : do-stage("Infer Widths", infer-widths) + if contains(p,'m') : do-stage("Pad Widths", pad-widths) + if contains(p,'n') : do-stage("Inline Instances", inline-instances) + + println(c*) + println("\n\n\n\n") ;; println("Shim for Jonathan's Passes") |
