49 lines
1.3 KiB
Java
49 lines
1.3 KiB
Java
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<IrValue> 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<IrValue> getArgs() {
|
|
ArrayList<IrValue> 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();
|
|
}
|
|
}
|