Skip to content

Commit fc167b0

Browse files
author
David Ungar
authored
Merge pull request #347 from davidungar/incremental-10-2
[Incremental] Minor cleanups to `IncrementalCompilationState`
2 parents d79bcd5 + 8ff8b0a commit fc167b0

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

Sources/SwiftDriver/Incremental Compilation/IncrementalCompilationState.swift

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,18 @@ import SwiftOptions
2020
/// If non-null outputs information for `-driver-show-incremental` for input path
2121
public let reportIncrementalDecision: ((String, TypedVirtualPath?) -> Void)?
2222

23-
/// The primary input files that are part of the first wave
24-
private let immediatelyCompiledInputs: [TypedVirtualPath]
25-
2623
/// Inputs that must be compiled, and swiftDeps processed.
2724
/// When empty, the compile phase is done.
28-
var pendingInputs: Set<TypedVirtualPath>
25+
private var pendingInputs = Set<TypedVirtualPath>()
2926

3027
/// Input files that were skipped.
3128
/// May shrink if one of these moves into pendingInputs.
32-
var skippedCompilationInputs: Set<TypedVirtualPath>
29+
private(set) var skippedCompilationInputs: Set<TypedVirtualPath>
3330

3431
/// Job groups that were skipped.
35-
/// Redundant with `skippedCompilationInputs`
36-
/// TODO: Incremental. clean up someday. Should only need one.
3732
/// Need groups rather than jobs because a compile that emits bitcode and its backend job must be
3833
/// treated as a unit.
39-
var skippedCompileGroups = [TypedVirtualPath: [Job]]()
34+
private var skippedCompileGroups = [TypedVirtualPath: [Job]]()
4035

4136
/// Accumulates jobs to be run through compilation
4237
public var preOrCompileJobs = SynchronizedQueue<[Job]?>()
@@ -45,7 +40,6 @@ import SwiftOptions
4540
/// Nonnil means planning has informed me
4641
internal private(set) var postCompileJobs: [Job]? = nil
4742

48-
4943
/// A check for reentrancy.
5044
private var amHandlingJobCompletion = false
5145

@@ -105,15 +99,13 @@ import SwiftOptions
10599
return nil
106100
}
107101

108-
(immediates: self.immediatelyCompiledInputs, skipped: self.skippedCompilationInputs)
109-
= Self.computeImmediateVsSkippedCompilationInputs(
102+
self.skippedCompilationInputs = Self.computeSkippedCompilationInputs(
110103
inputFiles: inputFiles,
111104
buildRecordInfo: buildRecordInfo,
112105
moduleDependencyGraph: moduleDependencyGraph,
113106
outOfDateBuildRecord: outOfDateBuildRecord,
114107
reportIncrementalDecision: reportIncrementalDecision)
115108

116-
self.pendingInputs = Set(immediatelyCompiledInputs)
117109
self.moduleDependencyGraph = moduleDependencyGraph
118110
self.reportIncrementalDecision = reportIncrementalDecision
119111
}
@@ -194,13 +186,13 @@ extension Diagnostic.Message {
194186
// MARK: - Scheduling the first wave
195187

196188
extension IncrementalCompilationState {
197-
private static func computeImmediateVsSkippedCompilationInputs(
189+
private static func computeSkippedCompilationInputs(
198190
inputFiles: [TypedVirtualPath],
199191
buildRecordInfo: BuildRecordInfo,
200192
moduleDependencyGraph: ModuleDependencyGraph,
201193
outOfDateBuildRecord: BuildRecord,
202194
reportIncrementalDecision: ((String, TypedVirtualPath?) -> Void)?
203-
) -> (immediates: [TypedVirtualPath], skipped: Set<TypedVirtualPath>) {
195+
) -> Set<TypedVirtualPath> {
204196

205197
let changedInputs: [(TypedVirtualPath, InputInfo.Status)] = computeChangedInputs(
206198
inputFiles: inputFiles,
@@ -237,8 +229,7 @@ extension IncrementalCompilationState {
237229
report("Queuing (dependent):", dependent)
238230
}
239231
}
240-
let immediatelyCompiledInputs = Array(definitelyRequiredInputs.union(speculativeInputs))
241-
.sorted {$0.file.name < $1.file.name}
232+
let immediatelyCompiledInputs = definitelyRequiredInputs.union(speculativeInputs)
242233

243234
let skippedInputs = Set(buildRecordInfo.compilationInputModificationDates.keys)
244235
.subtracting(immediatelyCompiledInputs)
@@ -247,7 +238,7 @@ extension IncrementalCompilationState {
247238
report("Skipping input:", skippedInput)
248239
}
249240
}
250-
return (immediates: immediatelyCompiledInputs, skipped: skippedInputs)
241+
return skippedInputs
251242
}
252243

253244
/// Find the inputs that have changed since last compilation, or were marked as needed a build
@@ -421,6 +412,9 @@ extension IncrementalCompilationState {
421412
report("Queuing \(job.descriptionForLifecycle)", nil)
422413
}
423414
}
415+
let primaryCompilationInputs = jobs
416+
.flatMap {$0.kind == .compile ? $0.primaryInputs : []}
417+
pendingInputs.formUnion(primaryCompilationInputs)
424418
preOrCompileJobs.enqueue(jobs)
425419
}
426420

@@ -476,7 +470,8 @@ extension IncrementalCompilationState {
476470
private func schedule(compilationInputs inputs: [TypedVirtualPath]) {
477471
let jobs = inputs.flatMap { input -> [Job] in
478472
if let group = skippedCompileGroups.removeValue(forKey: input) {
479-
skippedCompilationInputs.subtract(group.first!.primaryInputs)
473+
let primaryInputs = group.first!.primaryInputs
474+
skippedCompilationInputs.subtract(primaryInputs)
480475
reportIncrementalDecision?("Scheduling discovered", input)
481476
return group
482477
}

0 commit comments

Comments
 (0)