[PATCH] D141183: [LoongArch] Add support for emulated TLS model
wanglei via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 6 23:34:39 PST 2023
wangleiat created this revision.
wangleiat added reviewers: SixWeining, xen0n, xry111, MaskRay.
Herald added subscribers: StephenFan, hiraditya.
Herald added a project: All.
wangleiat requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
This will ensure that the emulated TLS code should be generated when
`useEmulatedTLS()` is true.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D141183
Files:
llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
llvm/test/CodeGen/LoongArch/emutls_generic.ll
Index: llvm/test/CodeGen/LoongArch/emutls_generic.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/LoongArch/emutls_generic.ll
@@ -0,0 +1,43 @@
+; RUN: llc < %s --emulated-tls --mtriple=loongarch64 --relocation-model=pic \
+; RUN: | FileCheck %s
+
+; RUN: llc < %s --mtriple=loongarch64 --relocation-model=pic \
+; RUN: | FileCheck --check-prefix=NoEMU %s
+
+;; NoEMU-NOT: __emutls
+
+;; Make sure that TLS symbols are emitted in expected order.
+
+ at external_x = external thread_local global i32, align 8
+ at external_y = thread_local global i8 7, align 2
+ at internal_y = internal thread_local global i64 9, align 16
+
+define ptr @get_external_x() {
+; CHECK-LABEL: get_external_x:
+; CHECK-NOT: _tls_get_address
+; CHECK: __emutls_get_address
+entry:
+ ret ptr @external_x
+}
+
+define ptr @get_external_y() {
+; CHECK-LABEL: get_external_y:
+; CHECK: __emutls_get_address
+; CHECK-NOT: _tls_get_address
+entry:
+ ret ptr @external_y
+}
+
+define ptr @get_internal_y() {
+; CHECK-LABEL: get_internal_y:
+; CHECK-NOT: __emutls_t.external_x:
+; CHECK-NOT: __emutls_v.external_x:
+; CHECK-LABEL: __emutls_v.external_y:
+; CHECK-LABEL: __emutls_t.external_y:
+; CHECK: __emutls_t.external_y
+; CHECK-LABEL: __emutls_v.internal_y:
+; CHECK-LABEL: __emutls_t.internal_y:
+; CHECK: __emutls_t.internal_y
+entry:
+ ret ptr @internal_y
+}
Index: llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
===================================================================
--- llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
+++ llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp
@@ -557,6 +557,9 @@
GlobalAddressSDNode *N = cast<GlobalAddressSDNode>(Op);
assert(N->getOffset() == 0 && "unexpected offset in global node");
+ if (DAG.getTarget().useEmulatedTLS())
+ return LowerToTLSEmulatedModel(N, DAG);
+
SDValue Addr;
switch (getTargetMachine().getTLSModel(N->getGlobal())) {
case TLSModel::GeneralDynamic:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D141183.487057.patch
Type: text/x-patch
Size: 2020 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230107/4f64afab/attachment.bin>
More information about the llvm-commits
mailing list