Skip to content

Commit 6ef1a4c

Browse files
committed
Revert "[swiftinterface] Handle target variants the same as targets (#77156)"
This reverts commit 4e2fbe1.
1 parent 2285785 commit 6ef1a4c

File tree

3 files changed

+25
-46
lines changed

3 files changed

+25
-46
lines changed

include/swift/Serialization/SerializedModuleLoader.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -573,8 +573,7 @@ class SerializedASTFile final : public LoadedFile {
573573
bool extractCompilerFlagsFromInterface(
574574
StringRef interfacePath, StringRef buffer, llvm::StringSaver &ArgSaver,
575575
SmallVectorImpl<const char *> &SubArgs,
576-
std::optional<llvm::Triple> PreferredTarget = std::nullopt,
577-
std::optional<llvm::Triple> PreferredTargetVariant = std::nullopt);
576+
std::optional<llvm::Triple> PreferredTarget = std::nullopt);
578577

579578
/// Extract the user module version number from an interface file.
580579
llvm::VersionTuple extractUserModuleVersionFromInterface(StringRef moduleInterfacePath);

lib/Frontend/ModuleInterfaceLoader.cpp

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ class UpToDateModuleCheker {
454454
: ctx(ctx),
455455
fs(*ctx.SourceMgr.getFileSystem()),
456456
requiresOSSAModules(requiresOSSAModules) {}
457-
457+
458458
// Check if all the provided file dependencies are up-to-date compared to
459459
// what's currently on disk.
460460
bool dependenciesAreUpToDate(StringRef modulePath,
@@ -524,7 +524,7 @@ class UpToDateModuleCheker {
524524
moduleBuffer = std::move(*OutBuf);
525525
return serializedASTBufferIsUpToDate(modulePath, *moduleBuffer, rebuildInfo, AllDeps);
526526
}
527-
527+
528528
enum class DependencyStatus {
529529
UpToDate,
530530
OutOfDate,
@@ -1513,8 +1513,7 @@ bool ModuleInterfaceLoader::buildSwiftModuleFromSwiftInterface(
15131513
static bool readSwiftInterfaceVersionAndArgs(
15141514
SourceManager &SM, DiagnosticEngine &Diags, llvm::StringSaver &ArgSaver,
15151515
SwiftInterfaceInfo &interfaceInfo, StringRef interfacePath,
1516-
SourceLoc diagnosticLoc, llvm::Triple preferredTarget,
1517-
std::optional<llvm::Triple> preferredTargetVariant) {
1516+
SourceLoc diagnosticLoc, llvm::Triple preferredTarget) {
15181517
llvm::vfs::FileSystem &fs = *SM.getFileSystem();
15191518
auto FileOrError = swift::vfs::getFileOrSTDIN(fs, interfacePath);
15201519
if (!FileOrError) {
@@ -1538,8 +1537,7 @@ static bool readSwiftInterfaceVersionAndArgs(
15381537

15391538
if (extractCompilerFlagsFromInterface(interfacePath, SB, ArgSaver,
15401539
interfaceInfo.Arguments,
1541-
preferredTarget,
1542-
preferredTargetVariant)) {
1540+
preferredTarget)) {
15431541
InterfaceSubContextDelegateImpl::diagnose(
15441542
interfacePath, diagnosticLoc, SM, &Diags,
15451543
diag::error_extracting_version_from_module_interface);
@@ -1594,7 +1592,7 @@ bool ModuleInterfaceLoader::buildExplicitSwiftModuleFromSwiftInterface(
15941592
StringRef outputPath, bool ShouldSerializeDeps,
15951593
ArrayRef<std::string> CompiledCandidates,
15961594
DependencyTracker *tracker) {
1597-
1595+
15981596
if (!Instance.getInvocation().getIRGenOptions().AlwaysCompile) {
15991597
// First, check if the expected output already exists and possibly
16001598
// up-to-date w.r.t. all of the dependencies it was built with. If so, early
@@ -1615,16 +1613,15 @@ bool ModuleInterfaceLoader::buildExplicitSwiftModuleFromSwiftInterface(
16151613
return false;
16161614
}
16171615
}
1618-
1616+
16191617
// Read out the compiler version.
16201618
llvm::BumpPtrAllocator alloc;
16211619
llvm::StringSaver ArgSaver(alloc);
16221620
SwiftInterfaceInfo InterfaceInfo;
16231621
readSwiftInterfaceVersionAndArgs(
16241622
Instance.getSourceMgr(), Instance.getDiags(), ArgSaver, InterfaceInfo,
16251623
interfacePath, SourceLoc(),
1626-
Instance.getInvocation().getLangOptions().Target,
1627-
Instance.getInvocation().getLangOptions().TargetVariant);
1624+
Instance.getInvocation().getLangOptions().Target);
16281625

16291626
auto Builder = ExplicitModuleInterfaceBuilder(
16301627
Instance, &Instance.getDiags(), Instance.getSourceMgr(),
@@ -1673,15 +1670,6 @@ void InterfaceSubContextDelegateImpl::inheritOptionsForBuildingInterface(
16731670
GenericArgs.push_back(triple);
16741671
}
16751672

1676-
if (LangOpts.TargetVariant.has_value()) {
1677-
genericSubInvocation.getLangOptions().TargetVariant = LangOpts.TargetVariant;
1678-
auto variantTriple = ArgSaver.save(genericSubInvocation.getLangOptions().TargetVariant->str());
1679-
if (!variantTriple.empty()) {
1680-
GenericArgs.push_back("-target-variant");
1681-
GenericArgs.push_back(variantTriple);
1682-
}
1683-
}
1684-
16851673
// Inherit the target SDK name and version
16861674
if (!LangOpts.SDKName.empty()) {
16871675
genericSubInvocation.getLangOptions().SDKName = LangOpts.SDKName;
@@ -1821,8 +1809,7 @@ bool InterfaceSubContextDelegateImpl::extractSwiftInterfaceVersionAndArgs(
18211809
StringRef interfacePath, SourceLoc diagnosticLoc) {
18221810
if (readSwiftInterfaceVersionAndArgs(SM, *Diags, ArgSaver, interfaceInfo,
18231811
interfacePath, diagnosticLoc,
1824-
subInvocation.getLangOptions().Target,
1825-
subInvocation.getLangOptions().TargetVariant))
1812+
subInvocation.getLangOptions().Target))
18261813
return true;
18271814

18281815
// Prior to Swift 5.9, swiftinterfaces were always built (accidentally) with

lib/Serialization/SerializedModuleLoader.cpp

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1389,13 +1389,6 @@ void swift::serialization::diagnoseSerializedASTLoadFailureTransitive(
13891389
}
13901390
}
13911391

1392-
static bool tripleNeedsSubarchitectureAdjustment(const llvm::Triple &lhs, const llvm::Triple &rhs) {
1393-
return (lhs.getSubArch() != rhs.getSubArch() &&
1394-
lhs.getArch() == rhs.getArch() &&
1395-
lhs.getVendor() == rhs.getVendor() &&
1396-
lhs.getOS() == rhs.getOS() &&
1397-
lhs.getEnvironment() == rhs.getEnvironment());
1398-
}
13991392

14001393
static std::optional<StringRef> getFlagsFromInterfaceFile(StringRef &file,
14011394
StringRef prefix) {
@@ -1418,10 +1411,10 @@ static std::optional<StringRef> getFlagsFromInterfaceFile(StringRef &file,
14181411
bool swift::extractCompilerFlagsFromInterface(
14191412
StringRef interfacePath, StringRef buffer, llvm::StringSaver &ArgSaver,
14201413
SmallVectorImpl<const char *> &SubArgs,
1421-
std::optional<llvm::Triple> PreferredTarget,
1422-
std::optional<llvm::Triple> PreferredTargetVariant) {
1423-
auto FlagMatch = getFlagsFromInterfaceFile(buffer, SWIFT_MODULE_FLAGS_KEY);
1424-
if (!FlagMatch)
1414+
std::optional<llvm::Triple> PreferredTarget) {
1415+
SmallVector<StringRef, 1> FlagMatches;
1416+
auto FlagRe = llvm::Regex("^// swift-module-flags:(.*)$", llvm::Regex::Newline);
1417+
if (!FlagRe.match(buffer, &FlagMatches))
14251418
return true;
14261419
llvm::cl::TokenizeGNUCommandLine(*FlagMatch, ArgSaver, SubArgs);
14271420

@@ -1430,19 +1423,19 @@ bool swift::extractCompilerFlagsFromInterface(
14301423
// we have loaded a Swift interface from a different-but-compatible
14311424
// architecture slice. Use the compatible subarchitecture.
14321425
for (unsigned I = 1; I < SubArgs.size(); ++I) {
1433-
if (strcmp(SubArgs[I - 1], "-target") == 0) {
1434-
llvm::Triple target(SubArgs[I]);
1435-
if (PreferredTarget &&
1436-
tripleNeedsSubarchitectureAdjustment(target, *PreferredTarget))
1437-
target.setArch(PreferredTarget->getArch(), PreferredTarget->getSubArch());
1438-
SubArgs[I] = ArgSaver.save(target.str()).data();
1439-
} else if (strcmp(SubArgs[I - 1], "-target-variant") == 0) {
1440-
llvm::Triple targetVariant(SubArgs[I]);
1441-
if (PreferredTargetVariant &&
1442-
tripleNeedsSubarchitectureAdjustment(targetVariant, *PreferredTargetVariant))
1443-
targetVariant.setArch(PreferredTargetVariant->getArch(), PreferredTargetVariant->getSubArch());
1444-
SubArgs[I] = ArgSaver.save(targetVariant.str()).data();
1426+
// FIXME: Also fix up -target-variant (rdar://135322077).
1427+
if (strcmp(SubArgs[I - 1], "-target") != 0) {
1428+
continue;
14451429
}
1430+
llvm::Triple target(SubArgs[I]);
1431+
if (PreferredTarget &&
1432+
target.getSubArch() != PreferredTarget->getSubArch() &&
1433+
target.getArch() == PreferredTarget->getArch() &&
1434+
target.getVendor() == PreferredTarget->getVendor() &&
1435+
target.getOS() == PreferredTarget->getOS() &&
1436+
target.getEnvironment() == PreferredTarget->getEnvironment())
1437+
target.setArch(PreferredTarget->getArch(), PreferredTarget->getSubArch());
1438+
SubArgs[I] = ArgSaver.save(target.str()).data();
14461439
}
14471440

14481441
auto IgnFlagMatch =

0 commit comments

Comments
 (0)