From 04fd097fb51346f655c7bdc0c88b85e29359ef1c Mon Sep 17 00:00:00 2001 From: bd-912 Date: Sat, 20 Apr 2024 23:43:30 -0600 Subject: Non-function live-interval computation algorithm --- vaporize/library/LIRDict.java | 49 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 vaporize/library/LIRDict.java (limited to 'vaporize/library/LIRDict.java') diff --git a/vaporize/library/LIRDict.java b/vaporize/library/LIRDict.java new file mode 100644 index 0000000..b32647c --- /dev/null +++ b/vaporize/library/LIRDict.java @@ -0,0 +1,49 @@ +package vaporize.library; + +import misc.*; +import cfg.*; +import java.util.*; + +public class LIRDict { + + private TreeSet intervals; + + public LIRDict(ControlFlowGraph cfg) { + this.intervals = new TreeSet(); + + for (CFGNode n : cfg.getNodes()) { + int line = n.getInstruction().sourcePos.line; + + for (String var : n.getReaching()) + if (!this.contains(var)) + this.intervals.add(new LIRVar(var, line, line)); + for (String var : n.getLiveness()) { + if (!this.contains(var)) + MinimalLogger.severe(String.format("%s was used before defined!", + var)); + this.getInterval(var).trySetLastUse(line); + } + } + } + + public LIRVar getInterval(String s) { + LIRVar ret = null; + for (LIRVar v : this.intervals) { + if (v.equals(s)) { + ret = v; + break; + } + } + + return ret; + } + + public boolean contains(String s) { + return this.getInterval(s) != null; + } + + public SortedSet getIntervals() { + return Collections.unmodifiableSortedSet(this.intervals); + } + +} -- cgit v1.2.3