Skip to content

Commit 929c7d6

Browse files
authored
Merge pull request #38135 from etcwilde/ewilde/swift-next/find-getDataLayout
[Swift next] Construct DataLayout from string
2 parents 5632c6e + b3422fe commit 929c7d6

File tree

7 files changed

+23
-20
lines changed

7 files changed

+23
-20
lines changed

include/swift/AST/TBDGenRequests.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class TBDGenDescriptor final {
7070
const TBDGenOptions &getOptions() const { return Opts; }
7171
TBDGenOptions &getOptions() { return Opts; }
7272

73-
const llvm::DataLayout &getDataLayout() const;
73+
const StringRef getDataLayoutString() const;
7474
const llvm::Triple &getTarget() const;
7575

7676
bool operator==(const TBDGenDescriptor &other) const;

lib/IRGen/IRGen.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1533,7 +1533,7 @@ bool swift::performLLVM(const IRGenOptions &Opts, ASTContext &Ctx,
15331533

15341534
auto *Clang = static_cast<ClangImporter *>(Ctx.getClangModuleLoader());
15351535
// Use clang's datalayout.
1536-
Module->setDataLayout(Clang->getTargetInfo().getDataLayout());
1536+
Module->setDataLayout(Clang->getTargetInfo().getDataLayoutString());
15371537

15381538
embedBitcode(Module, Opts);
15391539
if (::performLLVM(Opts, Ctx.Diags, nullptr, nullptr, Module,

lib/IRGen/IRGenModule.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -192,19 +192,18 @@ static void sanityCheckStdlib(IRGenModule &IGM) {
192192

193193
IRGenModule::IRGenModule(IRGenerator &irgen,
194194
std::unique_ptr<llvm::TargetMachine> &&target,
195-
SourceFile *SF,
196-
StringRef ModuleName, StringRef OutputFilename,
195+
SourceFile *SF, StringRef ModuleName,
196+
StringRef OutputFilename,
197197
StringRef MainInputFilenameForDebugInfo,
198198
StringRef PrivateDiscriminator)
199-
: LLVMContext(new llvm::LLVMContext()),
200-
IRGen(irgen), Context(irgen.SIL.getASTContext()),
199+
: LLVMContext(new llvm::LLVMContext()), IRGen(irgen),
200+
Context(irgen.SIL.getASTContext()),
201201
// The LLVMContext (and the IGM itself) will get deleted by the IGMDeleter
202202
// as long as the IGM is registered with the IRGenerator.
203-
ClangCodeGen(createClangCodeGenerator(Context, *LLVMContext,
204-
irgen.Opts,
203+
ClangCodeGen(createClangCodeGenerator(Context, *LLVMContext, irgen.Opts,
205204
ModuleName, PrivateDiscriminator)),
206205
Module(*ClangCodeGen->GetModule()),
207-
DataLayout(irgen.getClangDataLayout()),
206+
DataLayout(irgen.getClangDataLayoutString()),
208207
Triple(irgen.getEffectiveClangTriple()), TargetMachine(std::move(target)),
209208
silConv(irgen.SIL), OutputFilename(OutputFilename),
210209
MainInputFilenameForDebugInfo(MainInputFilenameForDebugInfo),
@@ -1750,12 +1749,12 @@ llvm::Triple IRGenerator::getEffectiveClangTriple() {
17501749
return llvm::Triple(CI->getTargetInfo().getTargetOpts().Triple);
17511750
}
17521751

1753-
const llvm::DataLayout &IRGenerator::getClangDataLayout() {
1752+
const llvm::StringRef IRGenerator::getClangDataLayoutString() {
17541753
return static_cast<ClangImporter *>(
17551754
SIL.getASTContext().getClangModuleLoader())
17561755
->getTargetInfo()
1757-
.getDataLayout();
1758-
}
1756+
.getDataLayoutString();
1757+
}
17591758

17601759
TypeExpansionContext IRGenModule::getMaximalTypeExpansionContext() const {
17611760
return TypeExpansionContext::maximal(getSwiftModule(),

lib/IRGen/IRGenModule.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,7 @@ class IRGenerator {
519519
/// Return the effective triple used by clang.
520520
llvm::Triple getEffectiveClangTriple();
521521

522-
const llvm::DataLayout &getClangDataLayout();
522+
const llvm::StringRef getClangDataLayoutString();
523523
};
524524

525525
class ConstantReference {

lib/TBDGen/TBDGen.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ static bool isGlobalOrStaticVar(VarDecl *VD) {
6868

6969
TBDGenVisitor::TBDGenVisitor(const TBDGenDescriptor &desc,
7070
APIRecorder &recorder)
71-
: TBDGenVisitor(desc.getTarget(), desc.getDataLayout(),
71+
: TBDGenVisitor(desc.getTarget(), desc.getDataLayoutString(),
7272
desc.getParentModule(), desc.getOptions(), recorder) {}
7373

7474
void TBDGenVisitor::addSymbolInternal(StringRef name, SymbolKind kind,
@@ -390,7 +390,9 @@ void TBDGenVisitor::addSymbol(StringRef name, SymbolSource source,
390390
if (kind == SymbolKind::ObjectiveCClass) {
391391
mangled = name;
392392
} else {
393-
llvm::Mangler::getNameWithPrefix(mangled, name, DataLayout);
393+
if (!DataLayout)
394+
DataLayout = llvm::DataLayout(DataLayoutDescription);
395+
llvm::Mangler::getNameWithPrefix(mangled, name, *DataLayout);
394396
}
395397

396398
addSymbolInternal(mangled, kind, source);

lib/TBDGen/TBDGenRequests.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ ModuleDecl *TBDGenDescriptor::getParentModule() const {
4848
return Input.get<FileUnit *>()->getParentModule();
4949
}
5050

51-
const llvm::DataLayout &TBDGenDescriptor::getDataLayout() const {
51+
const StringRef TBDGenDescriptor::getDataLayoutString() const {
5252
auto &ctx = getParentModule()->getASTContext();
5353
auto *clang = static_cast<ClangImporter *>(ctx.getClangModuleLoader());
54-
return clang->getTargetInfo().getDataLayout();
54+
return llvm::StringRef(clang->getTargetInfo().getDataLayoutString());
5555
}
5656

5757
const llvm::Triple &TBDGenDescriptor::getTarget() const {

lib/TBDGen/TBDGenVisitor.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ class TBDGenVisitor : public ASTVisitor<TBDGenVisitor> {
9292
llvm::StringSet<> DuplicateSymbolChecker;
9393
#endif
9494

95-
const llvm::DataLayout &DataLayout;
95+
Optional<llvm::DataLayout> DataLayout = None;
96+
const StringRef DataLayoutDescription;
97+
9698
UniversalLinkageInfo UniversalLinkInfo;
9799
ModuleDecl *SwiftModule;
98100
const TBDGenOptions &Opts;
@@ -167,10 +169,10 @@ class TBDGenVisitor : public ASTVisitor<TBDGenVisitor> {
167169
const AutoDiffConfig &config);
168170

169171
public:
170-
TBDGenVisitor(const llvm::Triple &target, const llvm::DataLayout &dataLayout,
172+
TBDGenVisitor(const llvm::Triple &target, const StringRef dataLayoutString,
171173
ModuleDecl *swiftModule, const TBDGenOptions &opts,
172174
APIRecorder &recorder)
173-
: DataLayout(dataLayout),
175+
: DataLayoutDescription(dataLayoutString),
174176
UniversalLinkInfo(target, opts.HasMultipleIGMs, /*forcePublic*/ false),
175177
SwiftModule(swiftModule), Opts(opts), recorder(recorder),
176178
previousInstallNameMap(parsePreviousModuleInstallNameMap()) {}

0 commit comments

Comments
 (0)