Skip to content

Commit 67e9275

Browse files
committed
start assignment3
1 parent 114061f commit 67e9275

File tree

1 file changed

+29
-6
lines changed

1 file changed

+29
-6
lines changed

A3/tai-e/src/main/java/pascal/taie/analysis/dataflow/analysis/DeadCodeDetection.java

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,10 @@
2525
import pascal.taie.analysis.MethodAnalysis;
2626
import pascal.taie.analysis.dataflow.analysis.constprop.CPFact;
2727
import pascal.taie.analysis.dataflow.analysis.constprop.ConstantPropagation;
28-
import pascal.taie.analysis.dataflow.analysis.constprop.Value;
2928
import pascal.taie.analysis.dataflow.fact.DataflowResult;
3029
import pascal.taie.analysis.dataflow.fact.SetFact;
3130
import pascal.taie.analysis.graph.cfg.CFG;
3231
import pascal.taie.analysis.graph.cfg.CFGBuilder;
33-
import pascal.taie.analysis.graph.cfg.Edge;
3432
import pascal.taie.config.AnalysisConfig;
3533
import pascal.taie.ir.IR;
3634
import pascal.taie.ir.exp.ArithmeticExp;
@@ -40,14 +38,11 @@
4038
import pascal.taie.ir.exp.NewExp;
4139
import pascal.taie.ir.exp.RValue;
4240
import pascal.taie.ir.exp.Var;
43-
import pascal.taie.ir.stmt.AssignStmt;
4441
import pascal.taie.ir.stmt.If;
4542
import pascal.taie.ir.stmt.Stmt;
4643
import pascal.taie.ir.stmt.SwitchStmt;
4744

48-
import java.util.Comparator;
49-
import java.util.Set;
50-
import java.util.TreeSet;
45+
import java.util.*;
5146

5247
public class DeadCodeDetection extends MethodAnalysis {
5348

@@ -71,6 +66,34 @@ public Set<Stmt> analyze(IR ir) {
7166
Set<Stmt> deadCode = new TreeSet<>(Comparator.comparing(Stmt::getIndex));
7267
// TODO - finish me
7368
// Your task is to recognize dead code in ir and add it to deadCode
69+
70+
// not reachable analysis
71+
// 1. control flow not reachable analysis
72+
Set<Stmt> visit = new TreeSet<>(Comparator.comparing(Stmt::getIndex));
73+
var entry = cfg.getEntry();
74+
Queue<Stmt> queue = new LinkedList<>();
75+
queue.add(entry);
76+
while (!queue.isEmpty()) {
77+
var stmt = queue.poll();
78+
visit.add(stmt);
79+
if (stmt instanceof If) {
80+
var condition = ((If) stmt).getCondition();
81+
var fact = constants.getResult(stmt);
82+
if (fact.get(condition.getOperand1()).isConstant()
83+
&& fact.get(condition.getOperand2()).isConstant()) {
84+
85+
}
86+
}
87+
if (stmt instanceof SwitchStmt) {
88+
89+
}
90+
queue.addAll(cfg.getSuccsOf(stmt));
91+
}
92+
for (Stmt stmt : cfg) {
93+
if (!visit.contains(stmt)) {
94+
deadCode.add(stmt);
95+
}
96+
}
7497
return deadCode;
7598
}
7699

0 commit comments

Comments
 (0)