some opt
This commit is contained in:
57
midend/llvm/instr/PhiInstr.java
Normal file
57
midend/llvm/instr/PhiInstr.java
Normal file
@@ -0,0 +1,57 @@
|
||||
package midend.llvm.instr;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.StringJoiner;
|
||||
|
||||
import midend.llvm.type.IrType;
|
||||
import midend.llvm.value.IrBasicBlock;
|
||||
import midend.llvm.value.IrValue;
|
||||
|
||||
public class PhiInstr extends IrInstr {
|
||||
private ArrayList<IrBasicBlock> predBBs;
|
||||
|
||||
public PhiInstr(IrType type, IrBasicBlock bblock, String name) {
|
||||
super(type, name, IrInstrType.PHI);
|
||||
this.setBBlock(bblock);
|
||||
this.predBBs = new ArrayList<>(bblock.getPreds());
|
||||
for (IrBasicBlock bb : predBBs) {
|
||||
this.addUse(null);
|
||||
}
|
||||
}
|
||||
|
||||
public ArrayList<IrBasicBlock> getPredBBs() {
|
||||
return predBBs;
|
||||
}
|
||||
|
||||
public void setValueForPred(IrBasicBlock pred, IrValue value) {
|
||||
int index = predBBs.indexOf(pred);
|
||||
this.setUse(index, value);
|
||||
}
|
||||
|
||||
public void deletePred(IrBasicBlock pred) {
|
||||
int index = predBBs.indexOf(pred);
|
||||
if (index != -1) {
|
||||
predBBs.remove(index);
|
||||
this.deleteUse(index);
|
||||
}
|
||||
}
|
||||
|
||||
public void replacePred(IrBasicBlock oldPred, IrBasicBlock newPred) {
|
||||
//TODO: whether the function is needed
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(getName());
|
||||
sb.append(" = phi ");
|
||||
sb.append(getType().toString());
|
||||
for (int i = 0; i < this.predBBs.size(); i++) {
|
||||
sb.append("[ ");
|
||||
sb.append(getUse(i).getName());
|
||||
sb.append(", %");
|
||||
sb.append(this.predBBs.get(i).getName());
|
||||
sb.append(" ]");
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user