return DEPENDENCIES;
}
@Override
public Object execute(IRScope s, Object... data) {
StoreLocalVarPlacementProblem slvp = new StoreLocalVarPlacementProblem();
// No need to run this pass if we eliminated the dynamic scope!
if (!s.getFlags().contains(IRFlags.DYNSCOPE_ELIMINATED) || s.getFlags().contains(IRFlags.REUSE_PARENT_DYNSCOPE)) {
// Make sure flags are computed
s.computeScopeFlags();
Map<Operand, Operand> varRenameMap = new HashMap<Operand, Operand>();
// 1. Figure out required stores
// 2. Add stores
// 3. Figure out required loads
// 4. Add loads
//
// Order is important since loads in 3. depend on stores in 2.
slvp.setup(s);
slvp.compute_MOP_Solution();
// Add stores, assigning an equivalent tmp-var for each local var
slvp.addStores(varRenameMap);
// Once stores have been added, figure out required loads
LoadLocalVarPlacementProblem llvp = new LoadLocalVarPlacementProblem();
llvp.setup(s);
llvp.compute_MOP_Solution();