From 91f2b475605f5180784953c376a518fc428a60d3 Mon Sep 17 00:00:00 2001 From: "Ben L. Titzer" Date: Wed, 26 Feb 2025 22:08:23 -0500 Subject: [PATCH] Inline class methods (#363) --- aeneas/src/main/Version.v3 | 2 +- aeneas/src/ssa/SsaInliner.v3 | 1 + test/enums/array_load_elim00.v3 | 19 +++++++++++++++++++ test/enums/array_load_elim01.v3 | 23 +++++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 test/enums/array_load_elim00.v3 create mode 100644 test/enums/array_load_elim01.v3 diff --git a/aeneas/src/main/Version.v3 b/aeneas/src/main/Version.v3 index b6a4a5be4..200a09e18 100644 --- a/aeneas/src/main/Version.v3 +++ b/aeneas/src/main/Version.v3 @@ -3,6 +3,6 @@ // Updated by VCS scripts. DO NOT EDIT. component Version { - def version: string = "III-9.1802"; + def version: string = "III-9.1804"; var buildData: string; } diff --git a/aeneas/src/ssa/SsaInliner.v3 b/aeneas/src/ssa/SsaInliner.v3 index c7bfa8101..45a4a0855 100644 --- a/aeneas/src/ssa/SsaInliner.v3 +++ b/aeneas/src/ssa/SsaInliner.v3 @@ -248,6 +248,7 @@ class SsaEarlyInliner(context: SsaContext, compilation: Compilation, gen: VstSsa var inlinee: IrSpec; match (apply.op.opcode) { CallMethod(method) => inlinee = V3Op.extractIrSpec(apply.op, method); + CallClassMethod(method) => inlinee = V3Op.extractIrSpec(apply.op, method); _ => continue; } if (!shouldInline(inlinee)) { diff --git a/test/enums/array_load_elim00.v3 b/test/enums/array_load_elim00.v3 new file mode 100644 index 000000000..b86226120 --- /dev/null +++ b/test/enums/array_load_elim00.v3 @@ -0,0 +1,19 @@ +//@execute 0=36; 99=36 +enum E { + A, B, C +} +def main(a: int) -> int { + var x = Array.new(3); + x[0] = a; + x[E.A.tag] = 11; + x[1] = a; + x[E.B.tag] = 12; + x[2] = a; + x[E.C.tag] = 13; + + var a = x[0]; + var b = x[1]; + var c = x[2]; + + return a + b + c; +} diff --git a/test/enums/array_load_elim01.v3 b/test/enums/array_load_elim01.v3 new file mode 100644 index 000000000..6caf2e576 --- /dev/null +++ b/test/enums/array_load_elim01.v3 @@ -0,0 +1,23 @@ +//@execute 0=36; 99=36 +enum E { + A, B, C +} +def main(a: int) -> int { + var EA = E.A; + var EB = E.B; + var EC = E.C; + + var x = Array.new(3); + x[0] = a; + x[EA.tag] = 11; + x[1] = a; + x[EB.tag] = 12; + x[2] = a; + x[EC.tag] = 13; + + var a = x[0]; + var b = x[1]; + var c = x[2]; + + return a + b + c; +}