It has to do with the way dependencies are used build a dataflow of compilation phases:

```
  // sequences the phase assembly
  protected def computePhaseDescriptors: List[SubComponent] = {
    computeInternalPhases()       // Global.scala
    computePlatformPhases()       // backend/Platform.scala
    computePluginPhases()         // plugins/Plugins.scala
    buildCompilerFromPhasesSet()  // PhaseAssembly.scala
  }
```

To make a long story short, I can't remove `GenICode` as long as `GenASM` is around. Instead, the line you commented makes sure `GenICode` does nothing before control is handed over to `GenBCode`.