[PATCH] D128623: Pass code-model through Module IR to LLC
Esme Yi via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 27 00:33:53 PDT 2022
Esme updated this revision to Diff 440115.
Esme added a comment.
Addressed comments.
Thanks! @MaskRay
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D128623/new/
https://reviews.llvm.org/D128623
Files:
llvm/include/llvm/Target/TargetMachine.h
llvm/lib/Target/TargetMachine.cpp
llvm/tools/llc/llc.cpp
Index: llvm/tools/llc/llc.cpp
===================================================================
--- llvm/tools/llc/llc.cpp
+++ llvm/tools/llc/llc.cpp
@@ -520,6 +520,7 @@
};
Optional<Reloc::Model> RM = codegen::getExplicitRelocModel();
+ Optional<CodeModel::Model> CM = codegen::getExplicitCodeModel();
const Target *TheTarget = nullptr;
std::unique_ptr<TargetMachine> Target;
@@ -552,8 +553,7 @@
InitializeOptions(TheTriple);
Target = std::unique_ptr<TargetMachine>(TheTarget->createTargetMachine(
- TheTriple.getTriple(), CPUStr, FeaturesStr, Options, RM,
- codegen::getExplicitCodeModel(), OLvl));
+ TheTriple.getTriple(), CPUStr, FeaturesStr, Options, RM, CM, OLvl));
assert(Target && "Could not allocate target machine!");
return Target->createDataLayout().getStringRepresentation();
@@ -573,6 +573,10 @@
}
if (!TargetTriple.empty())
M->setTargetTriple(Triple::normalize(TargetTriple));
+
+ Optional<CodeModel::Model> CM_IR = M->getCodeModel();
+ if (!CM && CM_IR)
+ Target->setCodeModel(CM_IR.getValue());
} else {
TheTriple = Triple(Triple::normalize(TargetTriple));
if (TheTriple.getTriple().empty())
@@ -597,8 +601,7 @@
InitializeOptions(TheTriple);
Target = std::unique_ptr<TargetMachine>(TheTarget->createTargetMachine(
- TheTriple.getTriple(), CPUStr, FeaturesStr, Options, RM,
- codegen::getExplicitCodeModel(), OLvl));
+ TheTriple.getTriple(), CPUStr, FeaturesStr, Options, RM, CM, OLvl));
assert(Target && "Could not allocate target machine!");
// If we don't have a module then just exit now. We do this down
Index: llvm/lib/Target/TargetMachine.cpp
===================================================================
--- llvm/lib/Target/TargetMachine.cpp
+++ llvm/lib/Target/TargetMachine.cpp
@@ -71,6 +71,9 @@
/// target default.
CodeModel::Model TargetMachine::getCodeModel() const { return CMModel; }
+/// Set the code model.
+void TargetMachine::setCodeModel(CodeModel::Model CM) { CMModel = CM; }
+
/// Get the IR-specified TLS model for Var.
static TLSModel::Model getSelectedTLSModel(const GlobalValue *GV) {
switch (GV->getThreadLocalMode()) {
Index: llvm/include/llvm/Target/TargetMachine.h
===================================================================
--- llvm/include/llvm/Target/TargetMachine.h
+++ llvm/include/llvm/Target/TargetMachine.h
@@ -223,6 +223,7 @@
/// Returns the code model. The choices are small, kernel, medium, large, and
/// target default.
CodeModel::Model getCodeModel() const;
+ void setCodeModel(CodeModel::Model CM);
bool isPositionIndependent() const;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D128623.440115.patch
Type: text/x-patch
Size: 2699 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220627/c9a5dfea/attachment.bin>
More information about the llvm-commits
mailing list