From 06c4bed365ca396f2e69f9f5aff50aab71182909 Mon Sep 17 00:00:00 2001 From: Iru Cai Date: Thu, 27 Nov 2014 15:59:40 +0800 Subject: lifeness analysis --- src/spiglet/spiglet2kanga/SpgProc.java | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/spiglet/spiglet2kanga/SpgProc.java') diff --git a/src/spiglet/spiglet2kanga/SpgProc.java b/src/spiglet/spiglet2kanga/SpgProc.java index 77c7fe8..57cbb63 100644 --- a/src/spiglet/spiglet2kanga/SpgProc.java +++ b/src/spiglet/spiglet2kanga/SpgProc.java @@ -62,7 +62,10 @@ public class SpgProc extends SpgSym { } else { if (i==statements.size()-1) { stmt.succ1 = null; + } else { + stmt.succ1 = statements.elementAt(i+1); } + stmt.succ2 = null; } } } @@ -73,5 +76,36 @@ public class SpgProc extends SpgSym { } } + public void getActiveVars() { + boolean modified = true; + + // first, initialize the out[] of the last statement + if (retexp!=null) { + statements.lastElement().out = retexp.getTmpUsed(); + } + + // then, loop in all statements for in[] and out[] + while (modified) { + modified = false; + for (int i=statements.size()-1; i>=0; i--) { + SpgStmt st = statements.elementAt(i); + // first, reset the out[] set + if (st.succ1!=null) { + modified |= st.out.addAll(st.succ1.in); + } + if (st.succ2!=null) { + modified |= st.out.addAll(st.succ2.in); + } + st.in.clear(); + st.in.addAll(st.out); + if (st.def!=null) { + st.in.removeAll(st.def); + } + if (st.use!=null) { + st.in.addAll(st.use); + } + } + } + } } -- cgit v1.2.3