Skip to content

Commit cf342dc

Browse files
committed
Undo Frontend.Policy changes
- add missing FIFOs to tests
1 parent 72b20ac commit cf342dc

File tree

7 files changed

+66
-62
lines changed

7 files changed

+66
-62
lines changed

rio/frontend/ast.ml

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,4 @@ type stream =
2424
(* Variables *)
2525
| Var of var
2626

27-
type policy = stream
28-
type declare = clss list
29-
type assignment = var * policy
30-
type return = policy
31-
type program = declare * assignment list * return
27+
type program = clss list * (var * stream) list * stream

rio/frontend/parser.mly

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010

1111
type internalcomp =
1212
| DeclareComp of clss list
13-
| AssnComp of var * policy
14-
| RtnComp of policy
13+
| AssnComp of var * stream
14+
| RtnComp of stream
1515

1616
(* Check that a program contains exactly one return statement as its final component *)
1717
let rec validate_seq acc = function

rio/frontend/policy.ml

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,51 @@
1-
type set2stream = EDF | FIFO
2-
type stream2stream = RR | Strict
3-
41
type t =
5-
| Leaf of (set2stream * Ast.clss list)
6-
| Node of (stream2stream * t list)
2+
| Fifo of Ast.clss list
3+
| EDF of Ast.clss list
4+
| RoundRobin of t list
5+
| Strict of t list
76

87
exception UnboundVariable of Ast.var
98
exception UndeclaredClass of Ast.clss
109
exception DuplicateClass of Ast.clss
1110

1211
let rec lookup x = function
13-
| (a, b) :: t when a = x -> b, t
14-
| _ :: t -> lookup x t
1512
| [] -> raise (UnboundVariable x)
16-
17-
18-
let rec sub cl st (p : Ast.policy) used =
19-
let rec sub_set cl (s : Ast.set) =
20-
match s with
21-
| Union ss -> ss |> List.map (sub_set cl) |> List.flatten
22-
| Class c ->
23-
if List.mem c !used then
24-
raise (DuplicateClass c)
25-
else if not (List.mem c cl) then
26-
raise (UndeclaredClass c)
27-
else
28-
(used := c :: !used; [ c ])
13+
| (v, p) :: t when v = x -> (p, t)
14+
| (_, _) :: t -> lookup x t
15+
16+
let rec sub cl st used (p : Ast.stream) =
17+
let sub_ps = List.map (sub cl st used) in
18+
let rec sub_set = function
19+
| Ast.Class c ->
20+
if List.mem c !used then raise (DuplicateClass c)
21+
else if not (List.mem c cl) then raise (UndeclaredClass c)
22+
else (
23+
used := c :: !used;
24+
[ c ])
25+
| Ast.Union sets -> sets |> List.map sub_set |> List.flatten
2926
in
30-
let sub_ps cl st = List.map (fun x -> sub cl st x used) in
3127

3228
match p with
33-
| Var x -> let v, t = (lookup x st) in sub cl t v used
34-
| Fifo s -> Leaf (FIFO, sub_set cl s)
35-
| EarliestDeadline s -> Leaf (EDF, sub_set cl s)
36-
| RoundRobin ps -> Node (RR, sub_ps cl st ps)
37-
| Strict ps -> Node (Strict, sub_ps cl st ps)
29+
| Var x ->
30+
let p, st = lookup x st in
31+
sub cl st used p
32+
| Fifo s -> Fifo (sub_set s)
33+
| EarliestDeadline s -> EDF (sub_set s)
34+
| RoundRobin ps -> RoundRobin (sub_ps ps)
35+
| Strict ps -> Strict (sub_ps ps)
3836
| _ -> failwith "ERROR: unsupported policy"
3937

4038
(* Look up any variables and substitute them in. *)
41-
let of_program (cl, alst, ret) = sub cl alst ret (ref [])
39+
let of_program (classes, assigns, ret) = sub classes assigns (ref []) ret
4240

43-
let to_string _ = "NOT COMPLETE YET! SORRY"
41+
let rec to_string p =
42+
let fmt = Printf.sprintf in
43+
let join lst to_string = lst |> List.map to_string |> String.concat ", " in
44+
45+
match p with
46+
| Fifo cs when List.length cs > 1 -> fmt "fifo[union[%s]]" (join cs Fun.id)
47+
| EDF cs when List.length cs > 1 -> fmt "edf[union[%s]]" (join cs Fun.id)
48+
| Fifo cs -> fmt "fifo[%s]" (join cs Fun.id)
49+
| EDF cs -> fmt "edf[%s]" (join cs Fun.id)
50+
| RoundRobin ps -> fmt "rr[%s]" (join ps to_string)
51+
| Strict ps -> fmt "strict[%s]" (join ps to_string)

rio/frontend/policy.mli

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
1-
type set2stream = EDF | FIFO
2-
type stream2stream = RR | Strict
3-
41
type t =
5-
| Leaf of (set2stream * Ast.clss list)
6-
| Node of (stream2stream * t list)
2+
| Fifo of Ast.clss list
3+
| EDF of Ast.clss list
4+
| RoundRobin of t list
5+
| Strict of t list
76

87
exception UnboundVariable of Ast.var
98
exception UndeclaredClass of Ast.clss
109
exception DuplicateClass of Ast.clss
1110

1211
val of_program : Ast.program -> t
13-
val to_string : t -> string
12+
val to_string : t -> string
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
(tests
2-
(names ttest_parsing)
2+
(names test_parsing)
33
(libraries rio.frontend ounit2))
Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
open Frontend
22
open OUnit2
33

4-
let prefix = "../../../../"
4+
let prefix = "../../../../../"
55
let parse filename = prefix ^ filename |> Parser.parse_file |> Policy.of_program
66

77
let make_test name filename val_str =
@@ -20,26 +20,27 @@ let wc_tests =
2020
make_test "fifo 1 class" "progs/work_conserving/fifo_1_class.sched"
2121
"fifo[A]";
2222
make_test "fifo of 3" "progs/work_conserving/fifo_n_classes.sched"
23-
"fifo[A, B, C]";
24-
make_test "rr of 1" "progs/work_conserving/rr_1_class.sched" "rr[A]";
23+
"fifo[union[A, B, C]]";
24+
make_test "rr of 1" "progs/work_conserving/rr_1_class.sched" "rr[fifo[A]]";
2525
make_test "rr of 2" "progs/work_conserving/rr_2_classes.sched"
26-
"rr[fifo[A, B]]";
26+
"rr[fifo[union[A, B]]]";
2727
make_test "multiple assignments"
2828
"progs/work_conserving/rr_hier_merge_sugar.sched"
29-
"rr[fifo[BX, BY], rr[RP, RT]]";
29+
"rr[fifo[union[BX, BY]], rr[fifo[RP], fifo[RT]]]";
3030
make_test "2 assignments w/ substitutions"
31-
"progs/work_conserving/rr_hier.sched" "rr[B, rr[RP, RT]]";
31+
"progs/work_conserving/rr_hier.sched"
32+
"rr[fifo[B], rr[fifo[RP], fifo[RT]]]";
3233
make_test "3 classes with substitutions"
3334
"progs/work_conserving/rr_n_class_hier.sched"
34-
"rr[A, B, rr[rr[CU, CV], rr[CW, CX]]]";
35-
make_test "rr of 3" "progs/work_conserving/rr_n_classes.sched" "rr[A, B, C]";
35+
"rr[fifo[A], fifo[B], rr[rr[fifo[CU], fifo[CV]], rr[fifo[CW], fifo[CX]]]]";
36+
make_test "rr of 3" "progs/work_conserving/rr_n_classes.sched"
37+
"rr[fifo[A], fifo[B], fifo[C]]";
3638
make_test "rr and strict substitutions"
3739
"progs/work_conserving/rr_strict_n_classes_hier.sched"
38-
"strict[A, B, rr[rr[CU, CV], strict[CW, CX]]]";
40+
"strict[fifo[A], fifo[B], rr[rr[fifo[CU], fifo[CV]], strict[fifo[CW], \
41+
fifo[CX]]]]";
3942
make_test "strict of 3" "progs/work_conserving/strict_n_classes.sched"
40-
"strict[C, B, A]";
41-
make_test "wfq of 3" "progs/work_conserving/wfq_n_classes.sched"
42-
"wfq[(A, 1.00), (B, 2.00), (C, 3.00)]";
43+
"strict[fifo[C], fifo[B], fifo[A]]";
4344
]
4445

4546
let _nwc_tests =

rio/tests/simulator/test_rio_tree.ml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ let make_push_pop_test name data tree order permutation =
6464
let basic_tests =
6565
let topo = Topo.Node [ CStar A; CStar B ] in
6666
let tree = Riotree.create topo (fun i -> infer_flow (i mod 2)) in
67-
let order = Ordtree.Order [ (Foot, rank); (Foot, rank) ] in
67+
let order = Riotree.Order [ (Foot, rank); (Foot, rank) ] in
6868

6969
[
7070
( "`pop` on newly created tree is `None`" >:: fun _ ->
@@ -78,7 +78,7 @@ let basic_tests =
7878
(* Leaf Tests *)
7979
let leaf_tests =
8080
let tree = Riotree.create (Topo.CStar A) (fun _ -> A) in
81-
let order = Ordtree.Foot in
81+
let order = Riotree.Foot in
8282
let zero_to_nine = consecutive 0 9 in
8383

8484
[
@@ -103,9 +103,9 @@ let ff_ord, fl_ord, weird_ord =
103103
let one_level_ord l =
104104
let order =
105105
l |> List.map float_of_int
106-
|> List.map (fun r -> (Ordtree.Foot, Rank.create r))
106+
|> List.map (fun r -> (Riotree.Foot, Rank.create r))
107107
in
108-
Ordtree.Order order
108+
Riotree.Order order
109109
in
110110
(one_level_ord ff, one_level_ord fl, one_level_ord weird)
111111

@@ -151,17 +151,17 @@ let tree = Riotree.create topo infer_flow
151151

152152
let ff_ord, fl_ord =
153153
let ff_small_ord, fl_small_ord =
154-
( Ordtree.Order [ (Foot, Rank.create 0.0); (Foot, Rank.create 1.0) ],
155-
Ordtree.Order [ (Foot, Rank.create 1.0); (Foot, Rank.create 0.0) ] )
154+
( Riotree.Order [ (Foot, Rank.create 0.0); (Foot, Rank.create 1.0) ],
155+
Riotree.Order [ (Foot, Rank.create 1.0); (Foot, Rank.create 0.0) ] )
156156
in
157-
( Ordtree.Order
157+
( Riotree.Order
158158
[
159159
(ff_small_ord, Rank.create 0.0);
160160
(Foot, Rank.create 1.0);
161161
(Foot, Rank.create 2.0);
162162
(ff_small_ord, Rank.create 3.0);
163163
],
164-
Ordtree.Order
164+
Riotree.Order
165165
[
166166
(fl_small_ord, Rank.create 3.0);
167167
(Foot, Rank.create 2.0);

0 commit comments

Comments
 (0)