(* This module provides functions for applying a [PP] unary or
   binary operator to [UPP] expressions.

   These functions build a single [UPP] abstract syntax tree
   node. Furthermore, they perform optimization by rewriting
   certain [UPP] expressions into equivalent, more efficient
   forms. *)

open UPP
val mkunop: PP.unop -> expression -> expression
val mkbinop: MIPSOps.binop -> expression -> expression -> expression