 
     func addJob(_ j: Job) { jobs.append(j) }
     func addJobs(_ js: [Job]) { jobs.append(contentsOf: js) }
-    func addBackendJob(_ j: Job) { backendJobs.append(j) }
     func addLinkerInput(_ li: TypedVirtualPath) { linkerInputs.append(li) }
     func addModuleInput(_ mi: TypedVirtualPath) { moduleInputs.append(mi) }
     func addModuleInputFromJobOutputs(_ mis: TypedVirtualPath) {


        for input in job.outputs.filter({ $0.type == .llvmBitcode }) {
          let job = try backendJob(input: input, addJobOutputs: addJobOutputs)
          addBackendJob(job)
        }
        return
      }

    for input: TypedVirtualPath,
    partitions: BatchPartitions?,
    addJob: (Job) -> Void,
    addModuleInput: (TypedVirtualPath) -> Void,
    addLinkerInput: (TypedVirtualPath) -> Void,
    addJobOutputs: ([TypedVirtualPath]) -> Void
