docs: protected void addToExecInputs(boolean isConstOrPh, VarId inputVar, VarId forVariable) {
          if (!subgraph.contains(forVariable.getVariable()))
              return;     //Not needed to calculate requested outputs, so no need to record it's inputs
  
          if (isConstOrPh) {
              //Mark that outVar needs to use placeholder/constant (same regardless of frame/iter)
              if (!execConstInputs.containsKey(forVariable.getVariable()))
                  execConstInputs.put(forVariable.getVariable(), new HashSet<String>());
              execConstInputs.get(forVariable.getVariable()).add(inputVar.getVariable());
          } else {
              //Mark that outVar needs this specific executedVar (i.e., specific frame/iteration)
              //However, in the case of enter nodes, they are available for ALL iterations (used in loop conditions, for example)
              Variable v = sameDiff.getVariables().get(inputVar.getVariable());
              boolean isEnter = sameDiff.getVariableOutputFunction(v.getVariable().getVarName()) instanceof Enter;
  
              if(isEnter){
                  VarId iter0 = forVariable;
                  if(iter0.getIteration() != 0){
                      iter0 = newVarId(iter0.getVariable(), iter0.getFrame(), 0, forVariable.getParentFrame());
                  }
  
                  Variable var = sameDiff.getVariables().get(inputVar.getVariable());
                  Enter e = (Enter) sameDiff.getOps().get(var.getOutputOfOp()).getOp();
                  if(e.isConstant()){
                      //For enter nodes that are constants, we want iteration 0 in all frames in the heirarchy
                      //For example, const -> Enter(a) -> Enter(b) -> op; in this case, the input to Op (at any frame/iteration) should should
                      // be the constant value - which is recorded as (frame="a",iter=0,parent=(frame="b",iter=0))
                      iter0.setParentFrame(iter0.getParentFrame().clone());
                      FrameIter toZero = iter0.getParentFrame();
                      while(toZero != null){
                          toZero.setIteration(0);
                          toZero = toZero.getParentFrame();
                      }
                  }
  
                  if(!execInputsAllIter.containsKey(iter0))
                      execInputsAllIter.put(iter0, new HashSet<VarId>());
                  execInputsAllIter.get(iter0).add(inputVar);
              } else {
                  //Most variables
                  if (!execInputs.containsKey(forVariable))
                      execInputs.put(forVariable, new HashSet<VarId>());
                  execInputs.get(forVariable).add(inputVar);
              }
          }
      }