|
|
- import type { BinaryOp, UnaryOp } from "../ast"
- import type { Loc } from "./loc"
-
- export type Operand = Loc | number
-
- export type AbsInsnCopy = {
- type: "copy",
- dest: Loc,
- source: Operand,
- }
-
- export type AbsInsn2Unary = {
- type: "unary",
- dest: Loc,
- // NOTE: We convert binary -> unary when going SSA3 -> SSA2
- op: UnaryOp | BinaryOp,
- source: Operand,
- }
-
- // Abstract instruction in two-address form
- export type AbsInsn2 = AbsInsnCopy | AbsInsn2Unary
-
- export type AbsInsn3Unary = {
- type: "unary",
- dest: Loc,
- op: UnaryOp,
- source: Operand,
- }
-
- export type AbsInsnBinary = {
- type: "binary",
- dest: Loc,
- source: Operand,
- op: BinaryOp,
- source1: Operand
- }
-
- // Abstract instruction in three-address form
- export type AbsInsn3 = AbsInsnCopy | AbsInsn3Unary | AbsInsnBinary
|