let depends_desc = 
  function
      IL0stmtDefTemp(_,_,e) -> depends_il0expr e
    | IL0stmtReadToTemp(_,_,lv,_) -> depends_il0lvalue lv
    | IL0stmtSequence(l) -> union_list (List.map depends_il0 l)
    | IL0stmtParallel(l) -> union_list (List.map depends_il0 l)
    | IL0stmtIf(_,id,_) -> singleton id
    | IL0stmtSwitch(id,_) -> singleton id
    | IL0stmtReturn(Some id) -> singleton id
    | IL0stmtReturn(None-> empty
    | IL0stmtWrite(lv,_,id) -> union (singleton id) (depends_il0lvalue lv)
    | IL0stmtDeclAutoScalar(_,_,_,Some v) -> of_list [v]
    | IL0stmtDeclAutoScalar(_,_,_,None-> empty
    | IL0stmtDeclBulk(_,_,_,_) -> empty
    | IL0stmtLabel _ |
      IL0stmtGoto _ -> empty