package net.sf.orcc.backends.llvm.tta.transform; import java.util.ArrayList; import net.sf.orcc.df.Actor; import net.sf.orcc.df.util.DfVisitor; import net.sf.orcc.ir.Arg; import net.sf.orcc.ir.ArgByVal; import net.sf.orcc.ir.Expression; import net.sf.orcc.ir.InstCall; import net.sf.orcc.ir.Param; import net.sf.orcc.ir.Procedure; import net.sf.orcc.ir.Var; import net.sf.orcc.ir.util.AbstractIrVisitor; import net.sf.orcc.ir.util.IrUtil; public class PrintRemoval extends DfVisitor<Void> { private class InnerPrintRemoval extends AbstractIrVisitor<Void> { public InnerPrintRemoval() { super(true); } public Void caseInstCall(InstCall call) { if (call.isPrint()) { IrUtil.delete(call); indexInst--; } else { for (Arg arg : new ArrayList<Arg>(call.getArguments())) { if (arg.isByVal()) { Expression expr = ((ArgByVal) arg).getValue(); if (expr.isExprString()) { IrUtil.delete(arg); } } } } return null; } public Void caseProcedure(Procedure proc) { for (Param param : new ArrayList<Param>(proc.getParameters())) { if (param.getVariable().getType().isString()) { IrUtil.delete(param); } } for (Var var : new ArrayList<Var>(proc.getLocals())) { if (var.getType().isString()) { IrUtil.delete(var); } } return super.caseProcedure(proc); } } public PrintRemoval() { this.irVisitor = new InnerPrintRemoval(); } public Void caseActor(Actor actor) { for (Var var : new ArrayList<Var>(actor.getStateVars())) { if (var.getType().isString()) { IrUtil.delete(var); } } return super.caseActor(actor); } }