This commit is contained in:
邓智航
2025-12-25 15:07:20 +08:00
parent c94bebf37b
commit a9b8e82fd5
12 changed files with 483 additions and 13 deletions

View 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();
}
}