Project

General

Profile

Revision 15003796 src/scheduling.ml

View differences:

src/scheduling.ml
205 205
    prog
206 206
    ([],IMap.empty)
207 207

  
208

  
209
(* Sort the set of equations of node [nd] according
210
   to the computed schedule [sch]
211
*)
212
let sort_equations_from_schedule nd sch =
213
  let find_eq xl eqs =
214
    let rec aux accu eqs =
215
      match eqs with
216
      | [] ->
217
	begin
218
	  Format.eprintf "Looking for variables %a in the following equations@.%a@."
219
	    (Utils.fprintf_list ~sep:" , " (fun fmt v -> Format.fprintf fmt "%s" v)) xl
220
	    Printers.pp_node_eqs eqs;
221
	  assert false
222
	end
223
      | hd::tl ->
224
	if List.exists (fun x -> List.mem x hd.eq_lhs) xl then hd, accu@tl else aux (hd::accu) tl
225
    in
226
    aux [] eqs
227
  in
228
  (*Format.eprintf "%s schedule: %a@."
229
    nd.node_id
230
    (Utils.fprintf_list ~sep:" ; " Scheduling.pp_eq_schedule) sch;*)
231
  let split_eqs = Splitting.tuple_split_eq_list (get_node_eqs nd) in
232
  let eqs_rev, remainder =
233
    List.fold_left
234
      (fun (accu, node_eqs_remainder) vl ->
235
       if List.exists (fun eq -> List.exists (fun v -> List.mem v eq.eq_lhs) vl) accu
236
       then
237
	 (accu, node_eqs_remainder)
238
       else
239
	 let eq_v, remainder = find_eq vl node_eqs_remainder in
240
	 eq_v::accu, remainder
241
      )
242
      ([], split_eqs)
243
      sch
244
  in
245
  begin
246
    if List.length remainder > 0 then (
247
      Format.eprintf "Equations not used are@.%a@.Full equation set is:@.%a@.@?"
248
		     Printers.pp_node_eqs remainder
249
      		     Printers.pp_node_eqs (get_node_eqs nd);
250
      assert false);
251
    List.rev eqs_rev
252
  end
253

  
254

  
208 255
let pp_eq_schedule fmt vl =
209 256
  match vl with
210 257
  | []  -> assert false

Also available in: Unified diff