package de.fuberlin.optimierung.commands; import de.fuberlin.optimierung.*; /* * Syntax: <result> = alloca <type>[, <ty> <NumElements>][, align <alignment>] ; yields {type*}:result */ public class LLVM_AllocaCommand extends LLVM_GenericCommand{ public LLVM_AllocaCommand(String cmdLine, LLVM_GenericCommand predecessor, LLVM_Block block){ super(predecessor, block, cmdLine); setOperation(LLVM_Operation.ALLOCA); StringBuilder cmd = new StringBuilder(cmdLine); parseEraseComment(cmd); String result = parseReadResult(cmd); parseEraseString(cmd, "alloca"); String ty = parseReadType(cmd); // <result> <ty> target = new LLVM_Parameter(result, ty); while (parseEraseString(cmd, ",")){ String typ = parseReadType(cmd); String name = parseReadValue(cmd); operands.add(new LLVM_Parameter(name, typ)); } if (LLVM_Optimization.DEBUG) System.out.println("Operation generiert: " + this.toString()); } public String toString(){ if (target == null || operands == null) return null; String cmd_output = target.getName() + " = "; switch(operation){ case ALLOCA : cmd_output += "alloca "; break; default: return ""; } cmd_output += target.getTypeString(); for (int i = 0; i < operands.size(); i++){ cmd_output += ", " + operands.get(i).getTypeString() + " "; cmd_output += operands.get(i).getName(); } cmd_output += " " + getComment(); return cmd_output; } }