package midend.llvm.instr; import java.util.ArrayList; import midend.llvm.value.IrFuncValue; import midend.llvm.value.IrValue; public class CallInstr extends IrInstr { public CallInstr(String name, IrFuncValue func, ArrayList args) { super(func.getRetType(), name, IrInstrType.CALL); addUse(func); for (IrValue arg : args) { addUse(arg); } } public boolean callVoid() { return getType().isVoid(); } public IrFuncValue getCalledFunc() { return (IrFuncValue) getUse(0); } public ArrayList getArgs() { ArrayList args = new ArrayList<>(); for (int i = 1; i < getNumUses(); i++) { args.add(getUse(i)); } return args; } public String toString() { StringBuilder sb = new StringBuilder(); if (!callVoid()) { sb.append(getName() + " = "); } sb.append("call " + getType() + " " + getCalledFunc().getName() + "("); for (int i = 1; i < getNumUses(); i++) { sb.append(getUse(i).getType() + " " + getUse(i).getName()); if (i < getNumUses() - 1) { sb.append(", "); } } sb.append(")"); return sb.toString(); } }