summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/include/llvm/ExecutionEngine/ExecutionEngine.h5
-rw-r--r--llvm/lib/ExecutionEngine/TargetSelect.cpp3
-rw-r--r--llvm/test/ExecutionEngine/MCJIT/tlvtest.ll10
-rw-r--r--llvm/test/ExecutionEngine/OrcMCJIT/tlvtest.ll10
4 files changed, 27 insertions, 1 deletions
diff --git a/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h b/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h
index 70ee843095f..77c23b46d32 100644
--- a/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h
+++ b/llvm/include/llvm/ExecutionEngine/ExecutionEngine.h
@@ -541,6 +541,7 @@ private:
SmallVector<std::string, 4> MAttrs;
bool VerifyModules;
bool UseOrcMCJITReplacement;
+ bool EmulatedTLS = true;
public:
/// Default constructor for EngineBuilder.
@@ -641,6 +642,10 @@ public:
this->UseOrcMCJITReplacement = UseOrcMCJITReplacement;
}
+ void setEmulatedTLS(bool EmulatedTLS) {
+ this->EmulatedTLS = EmulatedTLS;
+ }
+
TargetMachine *selectTarget();
/// selectTarget - Pick a target either via -march or by guessing the native
diff --git a/llvm/lib/ExecutionEngine/TargetSelect.cpp b/llvm/lib/ExecutionEngine/TargetSelect.cpp
index 5df5e1eabec..18dfa4e3c31 100644
--- a/llvm/lib/ExecutionEngine/TargetSelect.cpp
+++ b/llvm/lib/ExecutionEngine/TargetSelect.cpp
@@ -95,7 +95,8 @@ TargetMachine *EngineBuilder::selectTarget(const Triple &TargetTriple,
TargetMachine *Target =
TheTarget->createTargetMachine(TheTriple.getTriple(), MCPU, FeaturesStr,
Options, RelocModel, CMModel, OptLevel,
- /*JIT*/ true);
+ /*JIT*/ true);
+ Target->Options.EmulatedTLS = EmulatedTLS;
assert(Target && "Could not allocate target machine!");
return Target;
}
diff --git a/llvm/test/ExecutionEngine/MCJIT/tlvtest.ll b/llvm/test/ExecutionEngine/MCJIT/tlvtest.ll
new file mode 100644
index 00000000000..2596dabb63f
--- /dev/null
+++ b/llvm/test/ExecutionEngine/MCJIT/tlvtest.ll
@@ -0,0 +1,10 @@
+; RUN: %lli %s > /dev/null
+
+@x = thread_local local_unnamed_addr global i32 0
+
+define i32 @main() {
+entry:
+ store i32 42, i32* @x
+ ret i32 0
+}
+
diff --git a/llvm/test/ExecutionEngine/OrcMCJIT/tlvtest.ll b/llvm/test/ExecutionEngine/OrcMCJIT/tlvtest.ll
new file mode 100644
index 00000000000..2596dabb63f
--- /dev/null
+++ b/llvm/test/ExecutionEngine/OrcMCJIT/tlvtest.ll
@@ -0,0 +1,10 @@
+; RUN: %lli %s > /dev/null
+
+@x = thread_local local_unnamed_addr global i32 0
+
+define i32 @main() {
+entry:
+ store i32 42, i32* @x
+ ret i32 0
+}
+
OpenPOWER on IntegriCloud