|
|
- import { expect } from "chai"
-
- import { convertAssignStmt } from "../../lib/ir/convert"
- import { Loc } from "../../lib/ir/loc"
-
- describe("ir", () => {
- describe("convertExpr", () => {
- it("load with immediate", () => {
- const state = { nextID: 0, ssa_stmts: [] }
- const ir = convertAssignStmt(state, {
- type: "stmt",
- stmt_type: "assign",
- args: {
- name: "x",
- expr: 42,
- },
- })
-
- expect(ir).to.deep.equal([
- {
- dest: Loc.vari("x"),
- source: 42,
- },
- ])
- })
-
- it("load with variable", () => {
- const state = { nextID: 0, ssa_stmts: [] }
- const ir = convertAssignStmt(state, {
- type: "stmt",
- stmt_type: "assign",
- args: {
- name: "x",
- expr: "y",
- },
- })
-
- expect(ir).to.deep.equal([
- {
- dest: Loc.vari("x"),
- source: Loc.vari("y"),
- },
- ])
- })
-
- it("unary op", () => {
- const state = { nextID: 0, ssa_stmts: [] }
- const ir = convertAssignStmt(state, {
- type: "stmt",
- stmt_type: "assign",
- args: {
- name: "x",
- expr: {
- type: "unary",
- op: "arith_negate",
- arg: "y"
- },
- },
- })
-
- expect(ir).to.deep.equal([
- {
- dest: Loc.vari("x"),
- source: Loc.vari("y"),
- op: "arith_negate",
- },
- ])
- })
-
- it("binary op", () => {
- const state = { nextID: 0, ssa_stmts: [] }
- const ir = convertAssignStmt(state, {
- type: "stmt",
- stmt_type: "assign",
- args: {
- name: "x",
- expr: {
- type: "binary",
- op: "add",
- left: "y",
- right: 42,
- },
- },
- })
-
- expect(ir).to.deep.equal([
- {
- dest: Loc.vari("x"),
- source: Loc.vari("y"),
- source1: 42,
- op: "add",
- },
- ])
- })
-
- it("nested binary op", () => {
- const state = { nextID: 0, ssa_stmts: [] }
- const ir = convertAssignStmt(state, {
- type: "stmt",
- stmt_type: "assign",
- args: {
- name: "x",
- expr: {
- type: "binary",
- op: "add",
- left: "y",
- right: {
- type: "binary",
- op: "subtract",
- left: "z",
- right: 42,
- },
- },
- },
- })
-
- expect(ir).to.deep.equal([
- {
- dest: Loc.temp("t0"),
- source: Loc.vari("z"),
- op: "subtract",
- source1: 42,
- },
- {
- dest: Loc.vari("x"),
- source: Loc.vari("y"),
- op: "add",
- source1: Loc.temp("t0"),
- },
- ])
- })
- })
- })
|