[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:35:03 PDT 2022
Esme updated this revision to Diff 440116.
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/test/tools/llc/codemodel.ll
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/test/tools/llc/codemodel.ll
===================================================================
--- /dev/null
+++ llvm/test/tools/llc/codemodel.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+; RUN: llc %s -o - | FileCheck %s --check-prefix=CHECK-LARGE
+
+target triple = "x86_64-unknown-linux-gnu"
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
+
+!llvm.module.flags = !{!0, !1}
+
+!0 = !{i32 1, !"wchar_size", i32 4}
+!1 = !{i32 1, !"Code Model", i32 4}
+
+ at data = internal constant [0 x i32] []
+
+define i32* @foo() nounwind readonly {
+entry:
+; CHECK-LARGE-LABEL: foo:
+; CHECK-LARGE: movabsq $data, %rax
+ ret i32* getelementptr ([0 x i32], [0 x i32]* @data, i64 0, i64 0)
+}
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.440116.patch
Type: text/x-patch
Size: 3452 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220627/d623efa1/attachment.bin>
More information about the llvm-commits
mailing list