package midend.llvm.value; import java.util.ArrayList; import midend.llvm.type.IrType; import midend.llvm.use.IrUser; public class IrValue { private IrType type; private String name; private ArrayList users; public IrValue(IrType type, String name) { this.type = type; this.name = name; this.users = new ArrayList<>(); } public IrType getType() { return type; } public String getName() { return name; } public ArrayList getUsers() { return users; } public void addUser(IrUser user) { users.add(user); } public void deleteUser(IrUser user) { users.remove(user); } public void clearUsers() { ArrayList usersCopy = new ArrayList<>(users); for (IrUser user : usersCopy) { user.deleteUse(this); } } public void replaceUserToAnother(IrValue newValue) { ArrayList usersCopy = new ArrayList<>(users); for (IrUser user : usersCopy) { for (int i = 0; i < user.getUses().size(); i++) { if (user.getUse(i) == this) { user.setUse(i, newValue); } } } } public String toString() { return type.toString() + " " + name; } public void toMips() { // 子类实现 } public String getMipsLabel() { return name.substring(1); } }