[PATCH] D128623: Pass code-model through Module IR to LLC
Esme Yi via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 26 21:51:02 PDT 2022
Esme created this revision.
Esme added reviewers: shchenz, rzurob, MaskRay, PowerPC.
Herald added subscribers: StephenFan, hiraditya.
Herald added a project: All.
Esme requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
Currently, the code-model specified in IR can't be captured by LLC.
This patch fixes that.
Repository:
rG LLVM Github Monorepo
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
@@ -521,6 +521,7 @@
};
Optional<Reloc::Model> RM = codegen::getExplicitRelocModel();
+ Optional<CodeModel::Model> CM = codegen::getExplicitCodeModel();
const Target *TheTarget = nullptr;
std::unique_ptr<TargetMachine> Target;
@@ -553,8 +554,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();
@@ -574,6 +574,11 @@
}
if (!TargetTriple.empty())
M->setTargetTriple(Triple::normalize(TargetTriple));
+
+ Optional<CodeModel::Model> CM_IR = M->getCodeModel();
+ if (!CM.hasValue() && CM_IR.hasValue()) {
+ Target->setCodeModel(CM_IR.getValue());
+ }
} else {
TheTriple = Triple(Triple::normalize(TargetTriple));
if (TheTriple.getTriple().empty())
@@ -598,8 +603,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,18 @@
+; 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.440108.patch
Type: text/x-patch
Size: 3448 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220627/7a1907fe/attachment.bin>
More information about the llvm-commits
mailing list