anchor.diff:              let avoidHelpers = entityRefInThisAssembly g.compilingFslib hdc.TyconRef
               EraseUnions.emitDataSwitch g.ilg (UnionCodeGen cgbuf) (avoidHelpers, cuspec, dests)
               CG.EmitInstrs cgbuf (pop 1) Push0 [ ] // push/pop to match the line above
  -            GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf
  +            GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets targetCounts repeatSP targetInfos sequel caseLabels cases contf
   
           | DecisionTreeTest.Const c ->
               GenExpr cenv cgbuf eenv SPSuppress e Continue
  
positive.code:                   BI_brtrue
                | _ -> failwith "internal error: GenDecisionTreeSwitch"
              CG.EmitInstr cgbuf (pop 1) Push0 (I_brcmp (bi, (List.head caseLabels).CodeLabel))
              GenDecisionTreeCases cenv cgbuf stackAtTargets eenv defaultTargetOpt targets repeatSP targetInfos sequel caseLabels cases contf
  
          | DecisionTreeTest.ActivePatternCase _ -> error(InternalError("internal error in codegen: DecisionTreeTest.ActivePatternCase", switchm))
          | DecisionTreeTest.UnionCase (hdc, tyargs) ->
  
negative.code:         let eenvAtTarget = AllocStorageForBinds cenv cgbuf scopeMarks eenv binds
          let targetInfo = (targetMarkBeforeBinds, targetMarkAfterBinds, eenvAtTarget, successExpr, spTarget, repeatSP, vs, binds, startScope, endScope)
  
          // In debug mode, postpone all decision tree targets to after the switching.
          // In release mode, if a target is the target of multiple incoming success nodes, postpone it to avoid 
          // making any backward branches
          let isTargetPostponed =
              not cenv.opts.localOptimizationsAreOn || 
              not (targetCounts.ContainsKey targetIdx) || 
              targetCounts.[targetIdx] <> 1
          let genTargetInfoOpt =
              if isTargetPostponed then
                  // Here we are postponing the generation of the target.
                  // If not binding anything we can go directly to the targetMarkAfterBinds point.
                  if isNil vs then
                      match inplabOpt with
                      | None -> CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkAfterBinds.CodeLabel)
                      | Some inplab -> CG.SetMark cgbuf inplab targetMarkAfterBinds
                  else
                      match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab
                      CG.EmitInstr cgbuf (pop 0) Push0 (I_br targetMarkBeforeBinds.CodeLabel)
                  None
              else
                  // Here we are generating the target immediately
                  match inplabOpt with None -> () | Some inplab -> CG.SetMarkToHere cgbuf inplab
                  Some(GenDecisionTreeTarget cenv cgbuf stackAtTargets targetInfo sequel)
  
          let targetInfos = IntMap.add targetIdx (targetInfo, isTargetPostponed) targetInfos
          targetInfos, genTargetInfoOpt
  