diff options
author | bd-912 <bdunahu@colostate.edu> | 2024-04-20 23:43:30 -0600 |
---|---|---|
committer | bd-912 <bdunahu@colostate.edu> | 2024-04-20 23:43:30 -0600 |
commit | 04fd097fb51346f655c7bdc0c88b85e29359ef1c (patch) | |
tree | 246fb653f11e61306cb66249f4ecce451f7b8953 /vaporize/library/LIRVar.java | |
parent | 35eae1492c94e353ba8a1a52bfbae9313808b357 (diff) |
Non-function live-interval computation algorithm
Diffstat (limited to 'vaporize/library/LIRVar.java')
-rw-r--r-- | vaporize/library/LIRVar.java | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/vaporize/library/LIRVar.java b/vaporize/library/LIRVar.java new file mode 100644 index 0000000..4fab8c8 --- /dev/null +++ b/vaporize/library/LIRVar.java @@ -0,0 +1,64 @@ +package vaporize.library; + +import misc.*; + +public class LIRVar implements Comparable<LIRVar> { + + private String alias; + private TransientInterval interval; + + private String register; + + public LIRVar(String alias, int fd, int lu) { + this.alias = alias; + this.interval = new TransientInterval(fd, lu); + this.register = null; + } + + @Override public String toString() { + return String.format("%s: %d -> %d", + this.alias, + this.interval.first_def, + this.interval.last_use); + } + + @Override public boolean equals(Object other) { + LIRVar o; + return (other instanceof LIRVar && + ((o = (LIRVar) other)).alias.equals(this.alias) && + o.interval.equals(this.interval)) || + (other instanceof String && + this.alias.equals((String) other)); + } + + @Override public int hashCode() { + return alias.hashCode(); + } + + @Override public int compareTo(LIRVar other) { + int ret; + if (this.interval.first_def > other.interval.first_def) + ret = 1; + else if (this.interval.first_def < other.interval.first_def) + ret = -1; + else + ret = 0; + return ret; + } + + protected boolean trySetLastUse(int last_use) { + /** + * If the passed last_use is greater than + * the this.last_use, override this.last_use. + */ + boolean ret = last_use > this.interval.last_use; + + if (ret) + this.interval.last_use = last_use; + return ret; + } + + public void assignRegister(String register) { + this.register = register; + } +} |