Add all the assignment code.
Signed-off-by: jmug <u.g.a.mariano@gmail.com>
This commit is contained in:
parent
58c6b1f81c
commit
cfe502c598
1277 changed files with 48709 additions and 1 deletions
98
hw6/ll/ll.ml
Normal file
98
hw6/ll/ll.ml
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
(* LLVMlite: A simplified subset of LLVM IR *)
|
||||
|
||||
(* Local identifiers *)
|
||||
type uid = string
|
||||
|
||||
(* Global identifiers *)
|
||||
type gid = string
|
||||
|
||||
(* Named types *)
|
||||
type tid = string
|
||||
|
||||
(* Labels *)
|
||||
type lbl = string
|
||||
|
||||
(* LLVM types *)
|
||||
type ty =
|
||||
| Void
|
||||
| I1
|
||||
| I8
|
||||
| I64
|
||||
| Ptr of ty
|
||||
| Struct of ty list
|
||||
| Array of int * ty
|
||||
| Fun of ty list * ty
|
||||
| Namedt of tid
|
||||
|
||||
(* Function type: argument types and return type *)
|
||||
type fty = ty list * ty
|
||||
|
||||
(* Syntactic Values *)
|
||||
type operand =
|
||||
| Null
|
||||
| Const of int64
|
||||
| Gid of gid
|
||||
| Id of uid
|
||||
|
||||
(* Binary i64 Operations *)
|
||||
type bop =
|
||||
| Add
|
||||
| Sub
|
||||
| Mul
|
||||
| Shl
|
||||
| Lshr
|
||||
| Ashr
|
||||
| And
|
||||
| Or
|
||||
| Xor
|
||||
|
||||
(* Comparison Operators *)
|
||||
type cnd =
|
||||
| Eq
|
||||
| Ne
|
||||
| Slt
|
||||
| Sle
|
||||
| Sgt
|
||||
| Sge
|
||||
|
||||
(* Instructions *)
|
||||
type insn =
|
||||
| Binop of bop * ty * operand * operand
|
||||
| Alloca of ty
|
||||
| Load of ty * operand
|
||||
| Store of ty * operand * operand
|
||||
| Icmp of cnd * ty * operand * operand
|
||||
| Call of ty * operand * (ty * operand) list
|
||||
| Bitcast of ty * operand * ty
|
||||
| Gep of ty * operand * operand list
|
||||
|
||||
type terminator =
|
||||
| Ret of ty * operand option
|
||||
| Br of lbl
|
||||
| Cbr of operand * lbl * lbl
|
||||
|
||||
(* Basic Blocks *)
|
||||
type block = { insns : (uid * insn) list; term : (uid * terminator) }
|
||||
|
||||
(* Control Flow Graphs: entry and labeled blocks *)
|
||||
type cfg = block * (lbl * block) list
|
||||
|
||||
(* Function Declarations *)
|
||||
type fdecl = { f_ty : fty; f_param : uid list; f_cfg : cfg }
|
||||
|
||||
(* Global Data Initializers *)
|
||||
type ginit =
|
||||
| GNull
|
||||
| GGid of gid
|
||||
| GInt of int64
|
||||
| GString of string
|
||||
| GArray of (ty * ginit) list
|
||||
| GStruct of (ty * ginit) list
|
||||
| GBitcast of ty * ginit * ty
|
||||
|
||||
(* Global Declarations *)
|
||||
type gdecl = ty * ginit
|
||||
|
||||
(* LLVMlite Programs *)
|
||||
type prog = { tdecls : (tid * ty) list; gdecls : (gid * gdecl) list;
|
||||
fdecls : (gid * fdecl) list; edecls : (gid * ty) list }
|
||||
Loading…
Add table
Add a link
Reference in a new issue