let print_lvalue_field = function
    ILlvTemp n, [] -> "!!!"^(print_id n)^"!!!"
  | lv, [] -> print_lvalue lv
  | ILlvPtr _ as lv, l -> "("^(print_lvalue lv)^")."^(print_field l)
  | lv, l -> (print_lvalue lv)^"."^(print_field l)