let find_assignment_node f =
    let size = Array.length f in
    let assignment = Array.create size [] in
    for i = 0 to size - 1 do
        let add n t =
            if not (List.mem_assoc n assignment.(i)) then
                assignment.(i) <- ( n, t )::assignment.(i)
        in
        let rec check = function
            ILstmtIf _ -> ()
          | ILstmtSwitch _ -> ()
          | ILstmtGoto _ -> ()
          | ILstmtReturn _ -> ()
          | ILstmtAssign( n, t, _ ) -> add n t
          | ILstmtRead( n, t, _, _ ) -> add n t
          | ILstmtWrite _ -> ()
          | ILstmtInitialize( n, t, _ ) -> add n t
          | ILstmtSequence l -> List.iter check l
          | ILstmtParallel l -> List.iter check l
        in
        List.iter check f.(i).code
    done;
    assignment