mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
Iterating over the IRGenModules and emitting every SILCoverageMap in the SILModule meant that we were emitting N copies of the coverage maps for parallel IRGen, where N is the number of output object files. This has always been wrong, but was previously saved by the fact that we would drop the coverage map on the floor if we didn't have the name data available. This would only be the case for the IRGenModule that had the emitted entity to profile, in addition to any IRGenModules that had inlined the body of a profiled enitity. As such, this prevented the duplication from being too egregious. However with the recent change to emit unused name data in the case where we don't already have name data available, we're now fully duplicating every coverage mapping, and emitting a ton of redundant name data. Fix things such that we only emit coverage mapping records for the IRGenModule that corresponds to the entity being profiled. rdar://102905496
41 lines
3.1 KiB
Swift
41 lines
3.1 KiB
Swift
// RUN: %target-swift-frontend -profile-generate -profile-coverage-mapping -num-threads 0 -emit-ir %S/Inputs/coverage_num_threads1.swift | %FileCheck %s -check-prefix=SINGLE-SOURCE --implicit-check-not="llvm_coverage_mapping =" --implicit-check-not="@__covrec_{{[a-zA-Z0-9]+}} ="
|
|
|
|
// Make sure we only emit 1 coverage record in total.
|
|
// SINGLE-SOURCE: @__covrec_{{[a-zA-Z0-9]+}} =
|
|
// SINGLE-SOURCE: llvm_coverage_mapping =
|
|
|
|
// RUN: %target-swift-frontend -profile-generate -profile-coverage-mapping -num-threads 0 -emit-ir %S/Inputs/coverage_num_threads1.swift %S/Inputs/coverage_num_threads2.swift | %FileCheck %s -check-prefix=SINGLE-OBJECT --implicit-check-not="llvm_coverage_mapping =" --implicit-check-not="@__covrec_{{[a-zA-Z0-9]+}} ="
|
|
|
|
// Make sure we only emit 2 coverage records in total.
|
|
// SINGLE-OBJECT: @__covrec_{{[a-zA-Z0-9]+}} =
|
|
// SINGLE-OBJECT: @__covrec_{{[a-zA-Z0-9]+}} =
|
|
// SINGLE-OBJECT: llvm_coverage_mapping =
|
|
|
|
// Using 1 goes down the multithreaded codepath but only operates with a single thread to work around an issue on Windows where the output of both IR modules is interleaved and therefore the output is invalid
|
|
// RUN: %target-swift-frontend -profile-generate -profile-coverage-mapping -num-threads 1 -emit-ir %S/Inputs/coverage_num_threads1.swift %S/Inputs/coverage_num_threads2.swift | %FileCheck %s -check-prefix=MULTIPLE-OBJECTS --implicit-check-not="llvm_coverage_mapping =" --implicit-check-not="@__covrec_{{[a-zA-Z0-9]+}} ="
|
|
|
|
// Make sure we only emit 2 coverage records in total (1 per output).
|
|
// MULTIPLE-OBJECTS: @__covrec_{{[a-zA-Z0-9]+}} =
|
|
// MULTIPLE-OBJECTS: llvm_coverage_mapping =
|
|
// MULTIPLE-OBJECTS: ; ModuleID =
|
|
// MULTIPLE-OBJECTS: @__covrec_{{[a-zA-Z0-9]+}} =
|
|
// MULTIPLE-OBJECTS: llvm_coverage_mapping =
|
|
|
|
// Under -O, we inline the profiler increment of func2 into func1. The coverage
|
|
// mapping for func2 should still however be present only in its original file.
|
|
// RUN: %target-swift-frontend -profile-generate -profile-coverage-mapping -num-threads 1 -O -emit-sil %S/Inputs/coverage_num_threads3.swift %S/Inputs/coverage_num_threads4.swift | %FileCheck %s -check-prefix=MULTIPLE-OBJECTS-INLINE-SIL
|
|
// RUN: %target-swift-frontend -profile-generate -profile-coverage-mapping -num-threads 1 -O -emit-ir %S/Inputs/coverage_num_threads3.swift %S/Inputs/coverage_num_threads4.swift | %FileCheck %s -check-prefix=MULTIPLE-OBJECTS-INLINE --implicit-check-not="llvm_coverage_mapping =" --implicit-check-not="@__covrec_{{[a-zA-Z0-9]+}} ="
|
|
|
|
// MULTIPLE-OBJECTS-INLINE-SIL-LABEL: sil @$s21coverage_num_threads35func1yyF
|
|
// MULTIPLE-OBJECTS-INLINE-SIL: increment_profiler_counter 0, "$s21coverage_num_threads35func1yyF"
|
|
// MULTIPLE-OBJECTS-INLINE-SIL: increment_profiler_counter 0, "$s21coverage_num_threads35func2yyF"
|
|
|
|
// MULTIPLE-OBJECTS-INLINE-SIL-LABEL: sil @$s21coverage_num_threads35func2yyF
|
|
// MULTIPLE-OBJECTS-INLINE-SIL: increment_profiler_counter 0, "$s21coverage_num_threads35func2yyF"
|
|
|
|
// MULTIPLE-OBJECTS-INLINE: @__covrec_{{[a-zA-Z0-9]+}} =
|
|
// MULTIPLE-OBJECTS-INLINE: llvm_coverage_mapping =
|
|
// MULTIPLE-OBJECTS-INLINE: ; ModuleID =
|
|
// MULTIPLE-OBJECTS-INLINE: @__covrec_{{[a-zA-Z0-9]+}} =
|
|
// MULTIPLE-OBJECTS-INLINE: llvm_coverage_mapping =
|