mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
[TLS] use emulated TLS if the target supports only this mode
Emulated TLS is enabled by llc flag -emulated-tls, which is passed by clang driver. When llc is called explicitly or from other drivers like LTO, missing -emulated-tls flag would generate wrong TLS code for targets that supports only this mode. Now use useEmulatedTLS() instead of Options.EmulatedTLS to decide whether emulated TLS code should be generated. Unit tests are modified to run with and without the -emulated-tls flag. Differential Revision: https://reviews.llvm.org/D42999 llvm-svn: 326341
This commit is contained in:
parent
2a23458dab
commit
13e607925f
@ -665,6 +665,11 @@ public:
|
||||
return !isOSBinFormatMachO();
|
||||
}
|
||||
|
||||
/// Tests whether the target uses emulated TLS as default.
|
||||
bool hasDefaultEmulatedTLS() const {
|
||||
return isAndroid() || isOSOpenBSD() || isWindowsCygwinEnvironment();
|
||||
}
|
||||
|
||||
/// @}
|
||||
/// @name Mutators
|
||||
/// @{
|
||||
|
@ -286,6 +286,7 @@ static TargetOptions InitTargetOptionsFromCodeGenFlags() {
|
||||
Options.FunctionSections = FunctionSections;
|
||||
Options.UniqueSectionNames = UniqueSectionNames;
|
||||
Options.EmulatedTLS = EmulatedTLS;
|
||||
Options.ExplicitEmulatedTLS = EmulatedTLS.getNumOccurrences() > 0;
|
||||
Options.ExceptionModel = ExceptionModel;
|
||||
Options.EmitStackSizeSection = EnableStackSizeSection;
|
||||
|
||||
|
@ -172,6 +172,9 @@ public:
|
||||
|
||||
bool shouldAssumeDSOLocal(const Module &M, const GlobalValue *GV) const;
|
||||
|
||||
/// Returns true if this target uses emulated TLS.
|
||||
bool useEmulatedTLS() const;
|
||||
|
||||
/// Returns the TLS model which should be used for the given global variable.
|
||||
TLSModel::Model getTLSModel(const GlobalValue *GV) const;
|
||||
|
||||
|
@ -107,7 +107,8 @@ namespace llvm {
|
||||
EnableFastISel(false), EnableGlobalISel(false), UseInitArray(false),
|
||||
DisableIntegratedAS(false), RelaxELFRelocations(false),
|
||||
FunctionSections(false), DataSections(false),
|
||||
UniqueSectionNames(true), TrapUnreachable(false), EmulatedTLS(false),
|
||||
UniqueSectionNames(true), TrapUnreachable(false),
|
||||
EmulatedTLS(false), ExplicitEmulatedTLS(false),
|
||||
EnableIPRA(false), EmitStackSizeSection(false) {}
|
||||
|
||||
/// PrintMachineCode - This flag is enabled when the -print-machineinstrs
|
||||
@ -216,6 +217,9 @@ namespace llvm {
|
||||
/// function in the runtime library..
|
||||
unsigned EmulatedTLS : 1;
|
||||
|
||||
/// Whether -emulated-tls or -no-emulated-tls is set.
|
||||
unsigned ExplicitEmulatedTLS : 1;
|
||||
|
||||
/// This flag enables InterProcedural Register Allocation (IPRA).
|
||||
unsigned EnableIPRA : 1;
|
||||
|
||||
|
@ -429,7 +429,7 @@ MCSymbol *AsmPrinter::getSymbol(const GlobalValue *GV) const {
|
||||
|
||||
/// EmitGlobalVariable - Emit the specified global variable to the .s file.
|
||||
void AsmPrinter::EmitGlobalVariable(const GlobalVariable *GV) {
|
||||
bool IsEmuTLSVar = TM.Options.EmulatedTLS && GV->isThreadLocal();
|
||||
bool IsEmuTLSVar = TM.useEmulatedTLS() && GV->isThreadLocal();
|
||||
assert(!(IsEmuTLSVar && GV->hasCommonLinkage()) &&
|
||||
"No emulated TLS variables in the common section");
|
||||
|
||||
|
@ -198,7 +198,7 @@ DIE *DwarfCompileUnit::getOrCreateGlobalVariableDIE(
|
||||
if (Global) {
|
||||
const MCSymbol *Sym = Asm->getSymbol(Global);
|
||||
if (Global->isThreadLocal()) {
|
||||
if (Asm->TM.Options.EmulatedTLS) {
|
||||
if (Asm->TM.useEmulatedTLS()) {
|
||||
// TODO: add debug info for emulated thread local mode.
|
||||
} else {
|
||||
// FIXME: Make this work with -gsplit-dwarf.
|
||||
|
@ -68,7 +68,7 @@ bool LowerEmuTLS::runOnModule(Module &M) {
|
||||
return false;
|
||||
|
||||
auto &TM = TPC->getTM<TargetMachine>();
|
||||
if (!TM.Options.EmulatedTLS)
|
||||
if (!TM.useEmulatedTLS())
|
||||
return false;
|
||||
|
||||
bool Changed = false;
|
||||
|
@ -748,7 +748,7 @@ bool TargetPassConfig::addCoreISelPasses() {
|
||||
}
|
||||
|
||||
bool TargetPassConfig::addISelPasses() {
|
||||
if (TM->Options.EmulatedTLS)
|
||||
if (TM->useEmulatedTLS())
|
||||
addPass(createLowerEmuTLSPass());
|
||||
|
||||
addPass(createPreISelIntrinsicLoweringPass());
|
||||
|
@ -97,6 +97,8 @@ TargetMachine *EngineBuilder::selectTarget(const Triple &TargetTriple,
|
||||
Options, RelocModel, CMModel, OptLevel,
|
||||
/*JIT*/ true);
|
||||
Target->Options.EmulatedTLS = EmulatedTLS;
|
||||
Target->Options.ExplicitEmulatedTLS = true;
|
||||
|
||||
assert(Target && "Could not allocate target machine!");
|
||||
return Target;
|
||||
}
|
||||
|
@ -3979,7 +3979,7 @@ AArch64TargetLowering::LowerELFGlobalTLSAddress(SDValue Op,
|
||||
SDValue AArch64TargetLowering::LowerGlobalTLSAddress(SDValue Op,
|
||||
SelectionDAG &DAG) const {
|
||||
const GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(Op);
|
||||
if (DAG.getTarget().Options.EmulatedTLS)
|
||||
if (DAG.getTarget().useEmulatedTLS())
|
||||
return LowerToTLSEmulatedModel(GA, DAG);
|
||||
|
||||
if (Subtarget->isTargetDarwin())
|
||||
|
@ -3005,7 +3005,7 @@ ARMTargetLowering::LowerToTLSExecModels(GlobalAddressSDNode *GA,
|
||||
SDValue
|
||||
ARMTargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
||||
GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(Op);
|
||||
if (DAG.getTarget().Options.EmulatedTLS)
|
||||
if (DAG.getTarget().useEmulatedTLS())
|
||||
return LowerToTLSEmulatedModel(GA, DAG);
|
||||
|
||||
if (Subtarget->isTargetDarwin())
|
||||
|
@ -2069,7 +2069,7 @@ lowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const
|
||||
// Local Exec TLS Model.
|
||||
|
||||
GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(Op);
|
||||
if (DAG.getTarget().Options.EmulatedTLS)
|
||||
if (DAG.getTarget().useEmulatedTLS())
|
||||
return LowerToTLSEmulatedModel(GA, DAG);
|
||||
|
||||
SDLoc DL(GA);
|
||||
|
@ -2571,7 +2571,7 @@ SDValue PPCTargetLowering::LowerGlobalTLSAddress(SDValue Op,
|
||||
// large models could be added if users need it, at the cost of
|
||||
// additional complexity.
|
||||
GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(Op);
|
||||
if (DAG.getTarget().Options.EmulatedTLS)
|
||||
if (DAG.getTarget().useEmulatedTLS())
|
||||
return LowerToTLSEmulatedModel(GA, DAG);
|
||||
|
||||
SDLoc dl(GA);
|
||||
|
@ -2036,7 +2036,7 @@ SDValue SparcTargetLowering::LowerGlobalTLSAddress(SDValue Op,
|
||||
SelectionDAG &DAG) const {
|
||||
|
||||
GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(Op);
|
||||
if (DAG.getTarget().Options.EmulatedTLS)
|
||||
if (DAG.getTarget().useEmulatedTLS())
|
||||
return LowerToTLSEmulatedModel(GA, DAG);
|
||||
|
||||
SDLoc DL(GA);
|
||||
|
@ -2663,7 +2663,7 @@ SDValue SystemZTargetLowering::lowerThreadPointer(const SDLoc &DL,
|
||||
|
||||
SDValue SystemZTargetLowering::lowerGlobalTLSAddress(GlobalAddressSDNode *Node,
|
||||
SelectionDAG &DAG) const {
|
||||
if (DAG.getTarget().Options.EmulatedTLS)
|
||||
if (DAG.getTarget().useEmulatedTLS())
|
||||
return LowerToTLSEmulatedModel(Node, DAG);
|
||||
SDLoc DL(Node);
|
||||
const GlobalValue *GV = Node->getGlobal();
|
||||
|
@ -192,6 +192,14 @@ bool TargetMachine::shouldAssumeDSOLocal(const Module &M,
|
||||
return false;
|
||||
}
|
||||
|
||||
bool TargetMachine::useEmulatedTLS() const {
|
||||
// Returns Options.EmulatedTLS if the -emulated-tls or -no-emulated-tls
|
||||
// was specified explicitly; otherwise uses target triple to decide default.
|
||||
if (Options.ExplicitEmulatedTLS)
|
||||
return Options.EmulatedTLS;
|
||||
return getTargetTriple().hasDefaultEmulatedTLS();
|
||||
}
|
||||
|
||||
TLSModel::Model TargetMachine::getTLSModel(const GlobalValue *GV) const {
|
||||
bool IsPIE = GV->getParent()->getPIELevel() != PIELevel::Default;
|
||||
Reloc::Model RM = getRelocationModel();
|
||||
|
@ -15638,7 +15638,7 @@ X86TargetLowering::LowerGlobalTLSAddress(SDValue Op, SelectionDAG &DAG) const {
|
||||
|
||||
GlobalAddressSDNode *GA = cast<GlobalAddressSDNode>(Op);
|
||||
|
||||
if (DAG.getTarget().Options.EmulatedTLS)
|
||||
if (DAG.getTarget().useEmulatedTLS())
|
||||
return LowerToTLSEmulatedModel(GA, DAG);
|
||||
|
||||
const GlobalValue *GV = GA->getGlobal();
|
||||
|
@ -1,5 +1,7 @@
|
||||
; RUN: llc -emulated-tls -mtriple=aarch64-linux-android \
|
||||
; RUN: -relocation-model=pic -disable-fp-elim < %s | FileCheck -check-prefix=ARM64 %s
|
||||
; RUN: llc -mtriple=aarch64-linux-android \
|
||||
; RUN: -relocation-model=pic -disable-fp-elim < %s | FileCheck -check-prefix=ARM64 %s
|
||||
|
||||
; Copied from X86/emutls.ll
|
||||
|
||||
|
@ -9,6 +9,18 @@
|
||||
; RUN: llc < %s -emulated-tls -mtriple=aarch64-apple-darwin -O3 \
|
||||
; RUN: | FileCheck -check-prefix=DARWIN %s
|
||||
|
||||
; RUN: llc < %s -mtriple=aarch64-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=ARM_64 %s
|
||||
; RUN: llc < %s -mtriple=aarch64-linux-android -relocation-model=pic -O3 \
|
||||
; RUN: | FileCheck -check-prefix=ARM_64 %s
|
||||
; RUN: llc < %s -mtriple=aarch64-linux-android -O3 \
|
||||
; RUN: | FileCheck -check-prefix=ARM_64 %s
|
||||
; aarch64-windows-gnu needs explicit -emulated-tls
|
||||
; RUN: llc < %s -mtriple=aarch64-apple-darwin -O3 \
|
||||
; RUN: | FileCheck -check-prefix=NoEMU %s
|
||||
|
||||
; NoEMU-NOT: __emutls
|
||||
|
||||
; Make sure that TLS symbols are emitted in expected order.
|
||||
|
||||
@external_x = external thread_local global i32, align 8
|
||||
|
@ -1,5 +1,7 @@
|
||||
; RUN: llc -emulated-tls -mtriple=arm-linux-android \
|
||||
; RUN: -relocation-model=pic < %s | FileCheck -check-prefix=ARM32 %s
|
||||
; RUN: llc -mtriple=arm-linux-android \
|
||||
; RUN: -relocation-model=pic < %s | FileCheck -check-prefix=ARM32 %s
|
||||
|
||||
; Copied from X86/emutls.ll
|
||||
|
||||
|
@ -11,6 +11,17 @@
|
||||
; RUN: llc < %s -emulated-tls -mtriple=thumbv7-windows-gnu -O3 \
|
||||
; RUN: | FileCheck -check-prefix=WIN %s
|
||||
|
||||
; RUN: llc < %s -mtriple=arm-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=ARM_32 %s
|
||||
; RUN: llc < %s -mtriple=arm-linux-androidabi -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=ARM_32 %s
|
||||
; RUN: llc < %s -mtriple=arm-linux-androidabi -relocation-model=pic -O3 \
|
||||
; RUN: | FileCheck -check-prefix=ARM_32 %s
|
||||
; RUN: llc < %s -mtriple=arm-linux-androidabi -O3 \
|
||||
; RUN: | FileCheck -check-prefix=ARM_32 %s
|
||||
; arm-apple-darwin must use -emulated-tls
|
||||
; windows must use -emulated-tls
|
||||
|
||||
; Make sure that TLS symbols are emitted in expected order.
|
||||
|
||||
@external_x = external thread_local global i32, align 8
|
||||
|
@ -3,6 +3,11 @@
|
||||
; RUN: llc < %s -emulated-tls -mtriple=mips64el-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=MIPS_64 %s
|
||||
|
||||
; RUN: llc < %s -mtriple=mipsel-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=MIPS_32 %s
|
||||
; RUN: llc < %s -mtriple=mips64el-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=MIPS_64 %s
|
||||
|
||||
; Make sure that TLS symbols are emitted in expected order.
|
||||
|
||||
@external_x = external thread_local global i32, align 8
|
||||
|
@ -3,6 +3,13 @@
|
||||
; RUN: llc < %s -emulated-tls -mtriple=powerpc-unknown-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck %s
|
||||
|
||||
; RUN: llc < %s -mtriple=powerpc64-unknown-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=NoEMU %s
|
||||
; RUN: llc < %s -mtriple=powerpc-unknown-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=NoEMU %s
|
||||
|
||||
; NoEMU-NOT: __emutls
|
||||
|
||||
; Make sure that TLS symbols are emitted in expected order.
|
||||
|
||||
@external_x = external thread_local global i32, align 8
|
||||
|
@ -3,6 +3,13 @@
|
||||
; RUN: llc < %s -emulated-tls -mtriple=i386-linux-android -relocation-model=pic | FileCheck -check-prefix=X32 %s
|
||||
; RUN: llc < %s -emulated-tls -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck -check-prefix=X64 %s
|
||||
|
||||
; RUN: llc < %s -mtriple=i386-linux-gnu -relocation-model=pic | FileCheck -check-prefix=NoEMU %s
|
||||
; RUN: llc < %s -mtriple=x86_64-linux-gnu -relocation-model=pic | FileCheck -check-prefix=NoEMU %s
|
||||
; RUN: llc < %s -mtriple=i386-linux-android -relocation-model=pic | FileCheck -check-prefix=X32 %s
|
||||
; RUN: llc < %s -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck -check-prefix=X64 %s
|
||||
|
||||
; NoEMU-NOT: __emutls
|
||||
|
||||
; Use my_emutls_get_address like __emutls_get_address.
|
||||
@my_emutls_v_xyz = external global i8*, align 4
|
||||
declare i8* @my_emutls_get_address(i8*)
|
||||
|
@ -7,6 +7,17 @@
|
||||
; RUN: llc < %s -emulated-tls -mcpu=generic -mtriple=x86_64-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X64 %s
|
||||
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=NoEMU %s
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=NoEMU %s
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=i386-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X32 %s
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X64 %s
|
||||
|
||||
; NoEMU-NOT: __emutls
|
||||
|
||||
; Use my_emutls_get_address like __emutls_get_address.
|
||||
@my_emutls_v_xyz = external global i8*, align 4
|
||||
declare i8* @my_emutls_get_address(i8*)
|
||||
|
@ -3,8 +3,15 @@
|
||||
; RUN: llc < %s -emulated-tls -mtriple=i386-linux-android | FileCheck -check-prefix=X32 %s
|
||||
; RUN: llc < %s -emulated-tls -mtriple=x86_64-linux-android | FileCheck -check-prefix=X64 %s
|
||||
|
||||
; RUN: llc < %s -mtriple=i386-linux-gnu | FileCheck -check-prefix=NoEMU %s
|
||||
; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck -check-prefix=NoEMU %s
|
||||
; RUN: llc < %s -mtriple=i386-linux-android | FileCheck -check-prefix=X32 %s
|
||||
; RUN: llc < %s -mtriple=x86_64-linux-android | FileCheck -check-prefix=X64 %s
|
||||
|
||||
; Copied from tls.ll; emulated TLS model is not implemented
|
||||
; for *-pc-win32 and *-pc-winows targets yet.
|
||||
; for *-pc-win32 and *-pc-windows targets yet.
|
||||
|
||||
; NoEMU-NOT: __emutls
|
||||
|
||||
; Use my_emutls_get_address like __emutls_get_address.
|
||||
@my_emutls_v_xyz = external global i8*, align 4
|
||||
|
@ -7,6 +7,17 @@
|
||||
; RUN: llc < %s -emulated-tls -mtriple=i386-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck %s
|
||||
|
||||
; RUN: llc < %s -mtriple=i686-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X86_32 %s
|
||||
; RUN: llc < %s -mtriple=i686-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X86_32 %s
|
||||
; RUN: llc < %s -mtriple=x86_64-linux-android -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X86_64 %s
|
||||
; RUN: llc < %s -mtriple=i386-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=NoEMU %s
|
||||
|
||||
; NoEMU-NOT: __emutls
|
||||
|
||||
; Make sure that TLS symbols are emitted in expected order.
|
||||
|
||||
@external_x = external thread_local global i32, align 8
|
||||
|
@ -1,6 +1,10 @@
|
||||
; RUN: llc < %s -emulated-tls -relocation-model=pic -mtriple=i686-unknown-linux-gnu -fast-isel | FileCheck %s
|
||||
; RUN: llc < %s -relocation-model=pic -mtriple=i686-unknown-linux-gnu -fast-isel \
|
||||
; RUN: | FileCheck -check-prefix=NoEMU %s
|
||||
; PR3654
|
||||
|
||||
; NoEMU-NOT: __emutls
|
||||
|
||||
@v = thread_local global i32 0
|
||||
define i32 @f() nounwind {
|
||||
entry:
|
||||
|
@ -1,8 +1,13 @@
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic -pie-copy-relocations \
|
||||
; RUN: llc < %s -emulated-tls -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic -pie-copy-relocations \
|
||||
; RUN: | FileCheck -check-prefix=X64 %s
|
||||
; RUN: llc < %s -emulated-tls -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic -pie-copy-relocations \
|
||||
; RUN: | FileCheck -check-prefix=X32 %s
|
||||
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic -pie-copy-relocations \
|
||||
; RUN: | FileCheck -check-prefix=X64 %s
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic -pie-copy-relocations \
|
||||
; RUN: | FileCheck -check-prefix=X32 %s
|
||||
|
||||
; External Linkage
|
||||
@a = global i32 0, align 4
|
||||
|
||||
|
@ -1,8 +1,13 @@
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \
|
||||
; RUN: llc < %s -emulated-tls -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X64 %s
|
||||
; RUN: llc < %s -emulated-tls -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X32 %s
|
||||
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=x86_64-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X64 %s
|
||||
; RUN: llc < %s -mcpu=generic -mtriple=i386-linux-gnu -relocation-model=pic \
|
||||
; RUN: | FileCheck -check-prefix=X32 %s
|
||||
|
||||
; External Linkage
|
||||
@a = global i32 0, align 4
|
||||
|
||||
|
@ -1,6 +1,9 @@
|
||||
; RUN: llc < %s -emulated-tls -mtriple=i686-linux-android -relocation-model=pic | FileCheck %s
|
||||
; RUN: llc < %s -emulated-tls -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck %s
|
||||
|
||||
; RUN: llc < %s -mtriple=i686-linux-android -relocation-model=pic | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck %s
|
||||
|
||||
; Make sure that some symboles are not emitted in emulated TLS model.
|
||||
|
||||
@external_x = external thread_local global i32
|
||||
|
@ -1,6 +1,9 @@
|
||||
; RUN: llc < %s -emulated-tls -mtriple=i686-linux-android -relocation-model=pic | FileCheck %s
|
||||
; RUN: llc < %s -emulated-tls -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck -check-prefix=X64 %s
|
||||
|
||||
; RUN: llc < %s -mtriple=i686-linux-android -relocation-model=pic | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=x86_64-linux-android -relocation-model=pic | FileCheck -check-prefix=X64 %s
|
||||
|
||||
; Make sure that TLS symboles are emitted in expected order.
|
||||
|
||||
@external_x = external thread_local global i32
|
||||
|
Loading…
x
Reference in New Issue
Block a user