@@ -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
196188extension 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