public static void simplifyStackVars(RootStatement root, StructMethod mt, StructClass cl) {
    CancellationManager cancellationManager = DecompilerContext.getCancellationManager();

    Set<Integer> setReorderedIfs = new HashSet<>();
    SSAUConstructorSparseEx ssau = null;

    while (true) {
      cancellationManager.checkCanceled();
      boolean found = false;

      SSAConstructorSparseEx ssa = new SSAConstructorSparseEx();
      ssa.splitVariables(root, mt);

      SimplifyExprentsHelper sehelper = new SimplifyExprentsHelper(ssau == null);
      while (sehelper.simplifyStackVarsStatement(root, setReorderedIfs, ssa, cl)) {
        cancellationManager.checkCanceled();
        found = true;
      }

      setVersionsToNull(root);

      SequenceHelper.condenseSequences(root);

      ssau = new SSAUConstructorSparseEx();
      ssau.splitVariables(root, mt);
      cancellationManager.checkCanceled();
      if (iterateStatements(root, ssau)) {
        found = true;
      }

      setVersionsToNull(root);

      if (!found) {
        break;
      }
    }

    // remove unused assignments
    ssau = new SSAUConstructorSparseEx();
    ssau.splitVariables(root, mt);

    iterateStatements(root, ssau);

    setVersionsToNull(root);
  }
public static void simplifyStackVars(RootStatement root, StructMethod mt, StructClass cl)