Add code to create llvm::RemarkStreamer objects for all the LLVMModules in WMO mode

rdar://154403078
This commit is contained in:
Arnold Schwaighofer
2025-06-27 13:42:25 -07:00
parent 7ddf75c791
commit b30bd40b83
10 changed files with 231 additions and 31 deletions

View File

@@ -380,13 +380,23 @@ void FrontendInputsAndOutputs::setMainAndSupplementaryOutputs(
}
return;
}
assert(supplementaryOutputs.size() == 1 &&
"WMO only ever produces one set of supplementary outputs");
assert(supplementaryOutputs.size() == 1 ||
supplementaryOutputs.size() == AllInputs.size() &&
"WMO produces wrong number of sets of supplementary outputs");
if (outputFiles.size() == 1) {
AllInputs.front().setPrimarySpecificPaths(PrimarySpecificPaths(
outputFiles.front(), outputFilesForIndexUnits.front(),
firstInputProducingOutput().getFileName(),
supplementaryOutputs.front()));
for (auto i : indices(AllInputs)) {
if (i == 0)
AllInputs[i].setPrimarySpecificPaths(PrimarySpecificPaths(
outputFiles.front(), outputFilesForIndexUnits.front(),
firstInputProducingOutput().getFileName(),
supplementaryOutputs.front()));
else
AllInputs[i].setPrimarySpecificPaths(PrimarySpecificPaths(
"", "", "",
supplementaryOutputs.size() == 1 ? SupplementaryOutputPaths()
: supplementaryOutputs[i]));
}
return;
}
assert(outputFiles.size() == AllInputs.size() &&
@@ -394,7 +404,8 @@ void FrontendInputsAndOutputs::setMainAndSupplementaryOutputs(
for (auto i : indices(AllInputs))
AllInputs[i].setPrimarySpecificPaths(PrimarySpecificPaths(
outputFiles[i], outputFilesForIndexUnits[i], outputFiles[i],
i == 0 ? supplementaryOutputs.front() : SupplementaryOutputPaths()));
supplementaryOutputs.size() == 1 && i != 0 ? SupplementaryOutputPaths()
: supplementaryOutputs[i]));
}
std::vector<std::string> FrontendInputsAndOutputs::copyOutputFilenames() const {
@@ -488,6 +499,14 @@ FrontendInputsAndOutputs::getPrimarySpecificPathsForAtMostOnePrimary() const {
: emptyPaths;
}
const PrimarySpecificPaths &
FrontendInputsAndOutputs::getPrimarySpecificPathsForRemaining(unsigned i) const {
static auto emptyPaths = PrimarySpecificPaths();
unsigned firstProducingIdx = getIndexOfFirstOutputProducingInput();
return (hasInputs() && i > 0) ?
AllInputs[firstProducingIdx+i].getPrimarySpecificPaths() : emptyPaths;
}
const PrimarySpecificPaths &
FrontendInputsAndOutputs::getPrimarySpecificPathsForPrimary(
StringRef filename) const {